cnocr:用来做中文OCR的Python3包,装上就能用!


向AI转型的程序员都关注了这个号????????????

机器学习AI算法工程   公众号:datayx

cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用。

cnocr主要针对的是排版简单的印刷体文字图片,如截图图片,扫描件等。cnocr目前内置的文字检测和分行模块无法处理复杂的文字排版定位。如果要用于场景文字图片的识别,需要结合其他的场景文字检测引擎使用。

示例

cnocr:用来做中文OCR的Python3包,装上就能用!_第1张图片

cnocr:用来做中文OCR的Python3包,装上就能用!_第2张图片

cnocr:用来做中文OCR的Python3包,装上就能用!_第3张图片

cnocr:用来做中文OCR的Python3包,装上就能用!_第4张图片

安装真的很简单

pip install cnocr

请使用Python3 (3.4, 3.5, 3.6以及之后版本应该都行

可直接使用的模型

cnocr的ocr模型可以分为两阶段:第一阶段是获得ocr图片的局部编码向量,第二部分是对局部编码向量进行序列学习,获得序列编码向量。目前两个阶段分别包含以下的模型:

  1. 局部编码模型(emb model)

  • conv:多层的卷积网络;

  • conv-lite:更小的多层卷积网络;

  • densenet:一个小型的densenet网络;

  • densenet-lite:一个更小的densenet网络。

  • 序列编码模型(seq model)

    • lstm:两层的LSTM网络;

    • gru:两层的GRU网络;

    • fc:两层的全连接网络。

    cnocr目前包含以下可直接使用的模型,训练好的模型都放在 cnocr-models 项目中,可免费下载使用:

    cnocr:用来做中文OCR的Python3包,装上就能用!_第5张图片

    模型名称是由局部编码模型和序列编码模型名称拼接而成。

    图片预测速度是在多核CPU机器上做的测试, 绝对值依赖机器资源,意义不大;但不同模型之间的相对值是可以参考的。

    虽然上表中给出的多个模型在测试集上的准确率都是 98.6%,但从实际使用经验看,综合中英文的识别效果,conv-lite-fc是效果最好的,其次是 densenet-lite-lstm 和 conv-lite-lstm。对于中文识别且识别困难(如文字比较模糊)的场景,建议尝试模型 conv-lite-lstm。对于简单的中文识别场景,可以使用模型 densenet-lite-lstm 或 densenet-lite-fc ,或者利用自己的训练数据对它们进行精调。

    模型 conv-lstm把图片长度压缩到 1/8再做预测,其他模型是压缩到1/4再做预测,所以 conv-lstm 虽然比 conv-lite-lstm 有更多参数,但预测速度却快了一倍。

    使用方法

    首次使用cnocr时,系统会自动从 cnocr-models 下载zip格式的模型压缩文件,并存于 ~/.cnocr目录。下载后的zip文件代码会自动对其解压,然后把解压后的模型相关目录放于~/.cnocr/1.1.0目录中。

    如果系统不能自动从 cnocr-models 成功下载zip文件,则需要手动下载此zip文件并把它放于 ~/.cnocr/1.1.0目录。如果Github下载太慢,也可以从 百度云盘 下载。

    项目地址、模型下载地址 获取:

    关注微信公众号 datayx  然后回复  OCR  即可获取。

    cnocr:用来做中文OCR的Python3包,装上就能用!_第6张图片

    放置好zip文件后,后面的事代码就会自动执行了。

    图片预测

    CnOcr是OCR的主类,包含了三个函数针对不同场景进行文字识别。类CnOcr的初始化函数如下:

    其中的几个参数含义如下:

    • model_name: 模型名称,即上面表格第一列中的值。默认为 conv-lite-fc

    • model_epoch: 模型迭代次数。默认为 None,表示使用默认的迭代次数值。对于模型名称 conv-lite-fc就是 27

    • cand_alphabet: 待识别字符所在的候选集合。默认为 None,表示不限定识别字符范围。cnocr.consts中内置了两个候选集合:(1) 数字和标点 NUMBERS;(2) 英文字母、数字和标点 ENG_LETTERS

      • 例如对于图片

      • cnocr:用来做中文OCR的Python3包,装上就能用!_第7张图片

      •   ,不做约束时识别结果为 o12345678;如果加入数字约束时(ocr = CnOcr(cand_alphabet=NUMBERS)),识别结果为 012345678

    • root: 模型文件所在的根目录。

      • Linux/Mac下默认值为 ~/.cnocr,表示模型文件所处文件夹类似 ~/.cnocr/1.1.0/conv-lite-fc

      • Windows下默认值为 C:\Users\\AppData\Roaming\cnocr

    每个参数都有默认取值,所以可以不传入任何参数值进行初始化:ocr = CnOcr()

    CnOcr主要包含三个函数,下面分别说明。

    1. 函数CnOcr.ocr(img_fp)

    函数CnOcr.ocr(img_fp)可以对包含多行文字(或单行)的图片进行文字识别。

    函数说明:

    • 输入参数 img_fp: 可以是需要识别的图片文件路径(如上例);或者是已经从图片文件中读入的数组,类型可以为mx.nd.NDArray 或 np.ndarray,取值应该是[0,255]的整数,维数应该是(height, width, 3),第三个维度是channel,它应该是RGB格式的。

    • 返回值:为一个嵌套的list,类似这样[['第', '一', '行'], ['第', '二', '行'], ['第', '三', '行']]

    调用示例:

    cnocr:用来做中文OCR的Python3包,装上就能用!_第8张图片

    上面使用的图片文件 examples/multi-line_cn1.png内容如下:

    cnocr:用来做中文OCR的Python3包,装上就能用!_第9张图片

    2. 函数CnOcr.ocr_for_single_line(img_fp)

    如果明确知道要预测的图片中只包含了单行文字,可以使用函数CnOcr.ocr_for_single_line(img_fp)进行识别。和 CnOcr.ocr()相比,CnOcr.ocr_for_single_line()结果可靠性更强,因为它不需要做额外的分行处理。

    函数说明:

    • 输入参数 img_fp: 可以是需要识别的单行文字图片文件路径(如上例);或者是已经从图片文件中读入的数组,类型可以为mx.nd.NDArray 或 np.ndarray,取值应该是[0,255]的整数,维数应该是(height, width)(height, width, channel)。如果没有channel,表示传入的就是灰度图片。第三个维度channel可以是1(灰度图片)或者3(彩色图片)。如果是彩色图片,它应该是RGB格式的。

    • 返回值:为一个list,类似这样['你', '好']

    调用示例:

    cnocr:用来做中文OCR的Python3包,装上就能用!_第10张图片

    3. 函数CnOcr.ocr_for_single_lines(img_list)

    函数CnOcr.ocr_for_single_lines(img_list)可以对多个单行文字图片进行批量预测。函数CnOcr.ocr(img_fp)CnOcr.ocr_for_single_line(img_fp)内部其实都是调用的函数CnOcr.ocr_for_single_lines(img_list)

    函数说明:

    • 输入参数 img_list: 为一个list;其中每个元素是已经从图片文件中读入的数组,类型可以为mx.nd.NDArray 或 np.ndarray,取值应该是[0,255]的整数,维数应该是(height, width)(height, width, channel)。如果没有channel,表示传入的就是灰度图片。第三个维度channel可以是1(灰度图片)或者3(彩色图片)。如果是彩色图片,它应该是RGB格式的。

    • 返回值:为一个嵌套的list,类似这样[['第', '一', '行'], ['第', '二', '行'], ['第', '三', '行']]

    调用示例:

    cnocr:用来做中文OCR的Python3包,装上就能用!_第11张图片

    训练自己的模型

    cnocr自带训练好的模型, 安装后即可直接使用。但如果你需要训练自己的模型,请参考下面的步骤。所有代码均可在文件 Makefile 中找到。

    (一)转换图片数据格式

    为了提升训练效率,在开始训练之前,需要使用mxnet的recordio首先把数据转换成二进制格式:

    cnocr:用来做中文OCR的Python3包,装上就能用!_第12张图片

    如果需要在GPU上训练,把上面命令中的参数 --gpu 0改为--gpu ,其中的 为使用的GPU数量。注意,使用GPU训练需要安装mxnet的GPU版本,如mxnet-cu101

    (三)评估模型

    评估模型的代码依赖一些额外的python包,使用下面命令安装这些额外的包:

    cnocr:用来做中文OCR的Python3包,装上就能用!_第13张图片


    阅读过本文的人还看了以下文章:

    【全套视频课】最全的目标检测算法系列讲解,通俗易懂!

    《美团机器学习实践》_美团算法团队.pdf

    《深度学习入门:基于Python的理论与实现》高清中文PDF+源码

    特征提取与图像处理(第二版).pdf

    python就业班学习视频,从入门到实战项目

    2019最新《PyTorch自然语言处理》英、中文版PDF+源码

    《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码

    《深度学习之pytorch》pdf+附书源码

    PyTorch深度学习快速实战入门《pytorch-handbook》

    【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》

    《Python数据分析与挖掘实战》PDF+完整源码

    汽车行业完整知识图谱项目实战视频(全23课)

    李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材

    笔记、代码清晰易懂!李航《统计学习方法》最新资源全套!

    《神经网络与深度学习》最新2018版中英PDF+源码

    将机器学习模型部署为REST API

    FashionAI服装属性标签图像识别Top1-5方案分享

    重要开源!CNN-RNN-CTC 实现手写汉字识别

    yolo3 检测出图像中的不规则汉字

    同样是机器学习算法工程师,你的面试为什么过不了?

    前海征信大数据算法:风险概率预测

    【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类

    VGG16迁移学习,实现医学图像识别分类工程项目

    特征工程(一)

    特征工程(二) :文本数据的展开、过滤和分块

    特征工程(三):特征缩放,从词袋到 TF-IDF

    特征工程(四): 类别特征

    特征工程(五): PCA 降维

    特征工程(六): 非线性特征提取和模型堆叠

    特征工程(七):图像特征提取和深度学习

    如何利用全新的决策树集成级联结构gcForest做特征工程并打分?

    Machine Learning Yearning 中文翻译稿

    蚂蚁金服2018秋招-算法工程师(共四面)通过

    全球AI挑战-场景分类的比赛源码(多模型融合)

    斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)

    python+flask搭建CNN在线识别手写中文网站

    中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程

    不断更新资源

    深度学习、机器学习、数据分析、python

     搜索公众号添加: datayx  

你可能感兴趣的:(cnocr:用来做中文OCR的Python3包,装上就能用!)