因为项目需要,之前找了下已有可用的开源中文OCR工具,发现居然没有特别好用的。 所以就自己封装了一个中文OCR Python包,称之为 cnocr(Chinese OCR的简称)。 cnocr主打使用简单,功能极简。
以下是使用说明,欢迎大家试用,帮忙提issue。
cnocr
cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,所以安装后即可直接使用。
目前使用的识别模型是crnn,识别准确度约为 98.7%
。
本项目起源于我们自己 (爱因互动 Ein+) 内部的项目需求,所以非常感谢公司的支持。
特色
本项目的大部分代码都fork自 crnn-mxnet-chinese-text-recognition,感谢作者。 但源项目使用起来不够方便,所以我在此基础上做了一些封装和重构。主要变化如下:
-
不再使用需要额外安装的MXNet WarpCTC Loss,改用原生的 MXNet CTC Loss。所以安装极简!
-
自带训练好的中文OCR识别模型。不再需要额外训练!
-
增加了预测(或推断)接口。所以使用方便!
安装
pip install cnocr
注意:请使用Python3 (3.4, 3.5, 3.6以及之后版本应该都行),没测过Python2下是否ok。
使用方法
预测
以如下图片文件为例,文件内容如下:
代码引用
from cnocr import CnOcr
ocr = CnOcr()
res = ocr.ocr_for_single_line('examples/rand_cn1.png')
print("Predicted Chars:", res)
首次使用cnocr时,系统会自动从Dropbox下载zip格式的模型压缩文件,并存于 ~/.cnocr
目录。
下载后的zip文件代码会自动对其解压,然后把解压后的模型相关文件放于~/.cnocr/models
目录。
如果系统不能自动从Dropbox成功下载zip文件,则需要手动下载此zip文件并把它放于 ~/.cnocr
目录。
另一个下载地址是百度云盘(提取码为pg26
)。
放置好zip文件后,后面的事代码就会自动执行了。
上面预测代码段的返回结果如下:
Predicted Chars: ['笠', '淡', '嘿', '骅', '谧', '鼎', '皋', '姚', '歼', '蠢', '驼', '耳', '胬', '挝', '涯', '狗', '蒽', '子', '犷']
脚本引用
也可以使用脚本模式预测:
python scripts/cnocr_predict.py --file examples/rand_cn1.png
返回结果和前面相同:
Predicted Chars: ['笠', '淡', '嘿', '骅', '谧', '鼎', '皋', '姚', '歼', '蠢', '驼', '耳', '胬', '挝', '涯', '狗', '蒽', '子', '犷']
训练自己的模型
cnocr安装后即可直接使用,但如果你非要训练自己的模型,请参考下面命令:
python scripts/cnocr_train.py --cpu 2 --num_proc 4 --loss ctc --dataset cn_ocr
未来工作
- 支持
空格
识别 - 修bugs(目前代码还比较凌乱。。)
- 完善测试用例
- 考虑使用MxNet的命令式编程重写代码,提升灵活性
- 尝试新模型,如 DenseNet、ResNet,进一步提升识别准确率