5

cnocr: 极简的中文OCR Python包

 2 years ago
source link: https://breezedeus.github.io/2019/03/28/breezedeus-cnocr.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

因为项目需要,之前找了下已有可用的开源中文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,进一步提升识别准确率



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK