开箱即用的 OCR 工具,支持 80 多种语言,涵盖所有主流书写体系,包括:拉丁文、中文、阿拉伯文、梵文、西里尔文等。
已通过 Gradio 集成到 Huggingface Spaces 🤗。尝试在线演示:
2024年9月24日 - 版本 1.7.2



使用 pip 安装
稳定版:
pip install easyocr
开发版:
pip install git+https://github.com/JaidedAI/EasyOCR.git
注意 1:对于 Windows 用户,请先按照官方说明安装 torch 和 torchvision:https://pytorch.org。在 PyTorch 官网上,请务必选择与您系统匹配的 CUDA 版本。如果仅计划在 CPU 模式下运行,请选择 CUDA = None。
注意 2:我们也提供了 Dockerfile。
import easyocr
reader = easyocr.Reader(['ch_sim','en']) # 此操作只需运行一次,将模型加载到内存中
result = reader.readtext('chinese.jpg')
输出结果将以列表形式呈现,每个条目包含检测到的文本边界框、文本内容以及置信度。
[([[189, 75], [469, 75], [469, 165], [189, 165]], '愚园路', 0.3754989504814148),
([[86, 80], [134, 80], [134, 128], [86, 128]], '西', 0.40452659130096436),
([[517, 81], [565, 81], [565, 123], [517, 123]], '东', 0.9989598989486694),
([[78, 126], [136, 126], [136, 156], [78, 156]], '315', 0.8125889301300049),
([[514, 126], [574, 126], [574, 156], [514, 156]], '309', 0.4971577227115631),
([[226, 170], [414, 170], [414, 220], [226, 220]], 'Yuyuan Rd.', 0.8261902332305908),
([[79, 173], [125, 173], [125, 213], [79, 213]], 'W', 0.9848111271858215),
([[529, 173], [569, 173], [569, 213], [529, 213]], 'E', 0.8405593633651733)]
注意 1:['ch_sim','en'] 是您希望识别的语言列表。您可以同时传入多种语言,但并非所有语言都能组合使用。英语与所有语言兼容,共享字符的语言通常也彼此兼容。
注意 2:除了文件路径 chinese.jpg,您也可以传入 OpenCV 图像对象(numpy 数组)、图像文件的字节数据或原始图像的 URL。
注意 3:reader = easyocr.Reader(['ch_sim','en']) 这行代码用于将模型加载到内存中。这需要一些时间,但只需运行一次。
您也可以设置 detail=0 来获得更简洁的输出。
reader.readtext('chinese.jpg', detail = 0)
结果:
['愚园路', '西', '东', '315', '309', 'Yuyuan Rd.', 'W', 'E']
所选语言的模型权重将自动下载,您也可以从模型中心手动下载,并将其放入 ~/.EasyOCR/model 文件夹。
如果您的设备没有 GPU,或者 GPU 内存较低,可以通过添加 gpu=False 在仅 CPU 模式下运行模型。
reader = easyocr.Reader(['ch_sim','en'], gpu=False)
$ easyocr -l ch_sim en -f chinese.jpg --detail=1 --gpu=True
关于识别模型,请阅读此处。
关于检测模型 (CRAFT),请阅读此处。
reader = easyocr.Reader(['en'], detection='DB', recognition = 'Transformer')
我们的目标是能够将任何最先进的模型轻松集成到 EasyOCR 中。许多优秀的研究者致力于开发更好的检测/识别模型,而我们并非要成为这样的研究者。我们只是希望让他们的成果能够快速、免费地为公众所用。(我们相信大多数研究者都希望他们的工作能尽快产生广泛而积极的影响。)整个流程应如下图所示。灰色插槽是可替换的浅蓝色模块的占位符。

本项目基于多篇论文和开源仓库的研究与代码。
所有深度学习执行都基于 Pytorch。:heart:
检测执行使用了来自此官方仓库及其论文的 CRAFT 算法(感谢来自 @clovaai 的 @YoungminBaek)。我们也使用了他们的预训练模型。训练脚本由 @gmuffiness 提供。
识别模型是 CRNN(论文)。它由三个主要部分组成:特征提取(我们目前使用 Resnet 和 VGG)、序列标记(LSTM)和解码(CTC)。识别执行的训练流程是 deep-text-recognition-benchmark 框架的修改版本。(感谢来自 @clovaai 的 @ku21fan)这个仓库是一颗值得更多关注的宝石。
集束搜索代码基于此仓库及其博客文章。(感谢 @githubharald)
数据合成基于 TextRecognitionDataGenerator。(感谢 @Belval)
关于 CTC 的优秀读物可参考 distill.pub 的这篇文章。
让我们共同努力,推动人工智能普及化!
三种贡献方式:
开发者: 对于小型的 bug 修复或改进,请直接提交 PR。对于较大的改动,请先通过创建 issue 与我们讨论。我们有一个标记为 'PR WELCOME' 的可能 bug/改进问题列表。
用户: 告诉我们 EasyOCR 如何使您或您的组织受益,以鼓励进一步的开发。同时,在 Issue 板块 发布失败案例,以帮助改进未来的模型。
技术领袖/专家: 如果您觉得这个库有用,请帮忙宣传!(参见 Yann Lecun 关于 EasyOCR 的帖子)
要请求添加新语言,您需要提交一个包含以下两个文件的 PR:
yourlanguagecode_char.txt 的文件,其中包含该语言的所有字符列表。请参考该文件夹中其他文件的格式示例。yourlanguagecode.txt 的文件,其中包含您语言的单词列表。平均而言,每种语言我们约有 30000 个单词,对于更流行的语言则超过 50000 个。此文件内容越多越好。如果您的语言有独特之处(例如:1. 阿拉伯语:字符在连接时会改变形态 + 从右向左书写;2. 泰语:有些字符需要位于行上方,有些在下方),请尽可能详细地告知我们,或提供有用的链接。关注细节对于构建一个真正可用的系统至关重要。
最后,请理解我们的优先级必须给予流行语言或共享大量字符的语言集(如果您的语言属于这种情况,也请告知我们)。开发一个新模型至少需要一周时间,因此您可能需要等待一段时间才能看到新模型发布。
参见开发中的语言列表
由于资源有限,超过 6 个月的 issue 将被自动关闭。如果问题至关重要,请重新打开。