前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cnocr:用来做中文OCR的Python3包,装上就能用!

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

作者头像
机器学习AI算法工程
发布2020-05-26 16:38:57
3.2K0
发布2020-05-26 16:38:57
举报
cnocr是用来做中文OCR的Python 3包。cnocr自带了训练好的识别模型,安装后即可直接使用。

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

示例

安装真的很简单

pip install cnocr

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

可直接使用的模型

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

  1. 局部编码模型(emb model)
    • conv:多层的卷积网络;
    • conv-lite:更小的多层卷积网络;
    • densenet:一个小型的densenet网络;
    • densenet-lite:一个更小的densenet网络。
  2. 序列编码模型(seq model)
    • lstm:两层的LSTM网络;
    • gru:两层的GRU网络;
    • fc:两层的全连接网络。

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

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

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

虽然上表中给出的多个模型在测试集上的准确率都是 98.6%,但从实际使用经验看,综合中英文的识别效果,conv-lite-fc是效果最好的,其次是 densenet-lite-lstmconv-lite-lstm。对于中文识别且识别困难(如文字比较模糊)的场景,建议尝试模型 conv-lite-lstm。对于简单的中文识别场景,可以使用模型 densenet-lite-lstmdensenet-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 即可获取。

放置好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
    • 例如对于图片
    • ,不做约束时识别结果为 o12345678;如果加入数字约束时(ocr = CnOcr(cand_alphabet=NUMBERS)),识别结果为 012345678
  • root: 模型文件所在的根目录。
    • Linux/Mac下默认值为 ~/.cnocr,表示模型文件所处文件夹类似 ~/.cnocr/1.1.0/conv-lite-fc
    • Windows下默认值为 C:\Users\<username>\AppData\Roaming\cnocr

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

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

1. 函数CnOcr.ocr(img_fp)

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

函数说明:

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

调用示例:

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

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.NDArraynp.ndarray,取值应该是[0,255]的整数,维数应该是(height, width)(height, width, channel)。如果没有channel,表示传入的就是灰度图片。第三个维度channel可以是1(灰度图片)或者3(彩色图片)。如果是彩色图片,它应该是RGB格式的。
  • 返回值:为一个list,类似这样['你', '好']

调用示例:

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.NDArraynp.ndarray,取值应该是[0,255]的整数,维数应该是(height, width)(height, width, channel)。如果没有channel,表示传入的就是灰度图片。第三个维度channel可以是1(灰度图片)或者3(彩色图片)。如果是彩色图片,它应该是RGB格式的。
  • 返回值:为一个嵌套的list,类似这样[['第', '一', '行'], ['第', '二', '行'], ['第', '三', '行']]

调用示例:

训练自己的模型

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

(一)转换图片数据格式

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

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

(三)评估模型

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习AI算法工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例
  • 可直接使用的模型
  • 使用方法
    • 1. 函数CnOcr.ocr(img_fp)
      • 2. 函数CnOcr.ocr_for_single_line(img_fp)
        • 3. 函数CnOcr.ocr_for_single_lines(img_list)
          • 训练自己的模型
            • (一)转换图片数据格式
            • (三)评估模型
        相关产品与服务
        AI 应用产品
        文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档