EasyOCR
即用型 OCR,支持 80 多种支持的语言和所有流行的书写系统,包括:拉丁文、中文、阿拉伯文、天城文、西里尔文等。
通过 Gradio 集成到 Huggingface Spaces 🤗。试试网络演示:
最新动态
-
2023年9月4日 - 版本 1.7.1
- 修复多个兼容性问题
-
2023年5月25日 - 版本 1.7.0
- 增加 Apple Silicon 支持(感谢@rayeesoft 和 @ArtemBernatskyy,请参阅 PR)
- 修复多个兼容性问题
-
2022年9月15日 - 版本 1.6.2
- 为 DBnet 增加 CPU 支持
- 仅当用户初始化 DBnet 检测器时,DBnet 才会被编译。
-
2022年9月1日 - 版本 1.6.1
- 修复 Windows 的 DBnet 路径错误
- 添加新内置模型
cyrillic_g2
。该模型是西里尔文的新默认模型。
-
2022年8月24日 - 版本 1.6.0
- 重新构建代码以支持替代文本检测器。
- 添加检测器
DBnet
,请参阅论文。可以像这样初始化使用reader = easyocr.Reader(['en'], detect_network = 'dbnet18')
。
-
2022年6月2日 - 版本 1.5.0
- 为 CRAFT 检测模型添加训练器(感谢@gmuffiness,请参阅 PR)
即将推出
- 手写文字支持
示例
安装
使用 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),请点击这里查看。
实施路线图
- 支持手写体
- 重构代码以支持可替换的检测和识别算法 API 应该像下面这样简单
reader = easyocr.Reader(['en'], detection='DB', recognition='Transformer')
这个想法是能够将任何最先进的模型插入EasyOCR。许多天才正在努力开发更好的检测/识别模型,但我们并不打算成为天才。我们只是希望能够让公众快速获取这些成果……而且是免费的。(当然,我们相信大多数天才希望他们的工作能尽快/尽大地产生积极影响)流程应类似于下图。灰色槽是可替换的浅蓝色模块的占位符。
致谢与参考
该项目基于多篇论文和开源代码库的研究和代码。
所有深度学习的执行均基于Pytorch。:heart:
检测执行使用了这个官方库的CRAFT算法和他们的论文(感谢@YoungminBaek来自@clovaai)。我们还使用了他们的预训练模型。训练脚本由@gmuffiness提供。
识别模型是一个CRNN模型(论文)。它由三个主要部分组成:特征提取(我们目前使用Resnet)和VGG,序列标注(LSTM)以及解码(CTC)。识别执行的训练流程是deep-text-recognition-benchmark框架的修改版本。(感谢@ku21fan来自@clovaai)这个库是一个值得更多认可的宝藏。
Beam search代码基于这个库及其博客。(感谢@githubharald)
数据合成基于TextRecognitionDataGenerator。(感谢@Belval)
关于CTC的好文章请参阅distill.pub 这里。
想要贡献?
让我们通过让AI惠及所有人一起来推动人类进步!
有三种方式可以贡献:
编码者: 请发送PR修复小的错误/改进。对于较大的改动,请先通过打开issue与我们讨论。有一个可能的错误/改进问题列表,标记为'PR WELCOME'。
用户: 告诉我们EasyOCR对您/您的组织有何帮助,以鼓励进一步开发。也请在Issue部分发布失败案例,以帮助改进未来的模型。
技术领袖/专家: 如果您发现此库有用,请帮助传播!(参见Yann Lecun的帖子关于EasyOCR)
新语言请求指南
要请求新语言,我们需要您提交包含以下两个文件的PR:
- 在文件夹easyocr/character中, 我们需要一个'yourlanguagecode_char.txt',其中包含所有字符的列表。请参见该文件夹中其他文件的格式示例。
- 在文件夹easyocr/dict中, 我们需要一个'yourlanguagecode.txt',其中包含您的语言中的单词列表。 平均而言,我们每种语言大约有3万个单词,对于更流行的语言,单词数超过5万个。 在这个文件中,越多越好。
如果您的语言具有独特的元素(例如1. 阿拉伯语:字符连接时会改变形式+从右到左书写 2. 泰语:某些字符需要在线上方,某些字符需要在线下方),请尽您所能教育我们和/或提供有用的链接。关注细节对于实现一个真正有效的系统非常重要。
最后,请理解我们必须优先考虑流行的语言或共享大量字符的语言集合(如果您的语言属于此类,请告诉我们)。开发新模型至少需要一周的时间,因此您可能需要等待一段时间才能发布新模型。
Github Issues
由于资源有限,超过6个月的问题将自动关闭。如果问题很重要,请重新打开问题。