Python重构ocr的cnocr中文ocr识别技术 - 秦朗的天空

时间:2024-03-03 07:37:19

Python重构ocr的cnocr中文ocr识别技术

简介

由于国内爱因互动 Ein+项目需求,项目组内部成员对ocr技术进行了重构,开发出了python的cnocr库。

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

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

安装

sudo pip3 install cnocr               

注意事项

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

如果系统不能自动从 Dropbox 成功下载zip文件,则需要手动下载此zip文件并把它放于~/.cnocr目录。下载地址是 百度云盘:https://pan.baidu.com/s/1s91985r0YBGbk_1cqgHa1Q (提取码为 pg26 )

使用

单行识别

如果明确知道要预测的图片中只包含了单行文字,可以使用函数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,类似这样[\'你\', \'好\', \'U\', \'O\', \'S\']。 示例1: from cnocr import CnOcr ocr = CnOcr() res = ocr.ocr_for_single_line(\'examples/1.png\') print("Predicted Chars:", res) 示例2: import mxnet as mx from cnocr import CnOcr ocr = CnOcr() img_fp = \'examples/1.png\' img = mx.image.imread(img_fp, 1) res = ocr.ocr_for_single_line(img) print("Predicted Chars:", res)

多行识别

函数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,类似这样[[\'第\', \'一\', \'行\'], [\'第\', \'二\', \'行\'], [\'第\', \'三\', \'行\']]。 示例: import mxnet as mx from cnocr import CnOcr ocr = CnOcr() img_fp = \'examples/multi-line_cn1.png\' img = mx.image.imread(img_fp, 1).asnumpy() line_imgs = line_split(img, blank=True) line_img_list = [line_img for line_img, _ in line_imgs] res = ocr.ocr_for_single_lines(line_img_list) print("Predicted Chars:", res)

关于cnocr更多技术

cnocr技术