1、前言
OCR (Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。
本系统实现了支持中英德韩日五种文字的OCR软件系统,并提供了源码和部署使用教程,见下边链接。整套系统界面部分基于PyQT5进行搭建,底层文字检测和识别部分基于国产软件PaddleOCR,可以进行票据、证件、书本、字幕等进行文字检测和识别,本系统还提供了粘贴板功能,方便用户在识别后直接粘贴出来。
2、实现原理
OCR 文字识别一般包括两个部分,文本检测和文本识别;文本检测首先利用检测算法检测到图像中的文本行;然后检测到的文本行用识别算法去识别到具体文字。
2.1 检测模型
文本检测就是要定位图像中的文字区域,然后通常以边界框的形式将单词或文本行标记出来。传统的文字检测算法多是通过手工提取特征的方式,特点是速度快,简单场景效果好,但是面对自然场景,效果会大打折扣。当前多是采用深度学习方法来做。
基于深度学习的文本检测算法可以大致分为以下几类:
- 基于目标检测的方法;一般是预测得到文本框后,通过 NMS 筛选得到最终文本框,多是四点文本框,对弯曲文本场景效果不理想。典型算法为 EAST、Text Box 等方法。
- 基于分割的方法;将文本行当成分割目标,然后通过分割结果构建外接文本框,可以处理弯曲文本,对于文本交叉场景问题效果不理想。典型算法为 DB、PSENet 等方法。
- 混合目标检测和分割的方法;
2.2 识别模型
OCR 识别算法的输入数据一般是文本行,背景信息不多,文字占据主要部分,识别算法目前可以分为两类算法:
- 基于 CTC 的方法;即识别算法的文字预测模块是基于 CTC 的,常用的算法组合为 CNN+RNN+CTC。目前也有一些算法尝试在网络中加入 transformer 模块等等。
- 基于 Attention 的方法;即识别算法的文字预测模块是基于 Attention 的,常用算法组合是CNN+RNN+Attention。
2.3 PP-OCR模型
PaddleOCR 中集成了很多 OCR 算法,文本检测算法有 DB、EAST、SAST 等等,文本识别算法有 CRNN、RARE、StarNet、Rosetta、SRN 等算法。
其中 PaddleOCR 针对中英文自然场景通用 OCR,推出了 PP-OCR 系列模型,PP-OCR 模型由DB+CRNN 算法组成,利用海量中文数据训练加上模型调优方法,在中文场景上具备较高的文本检测识别能力。并且 PaddleOCR 推出了高精度超轻量 PP-OCRv2 模型,检测模型仅 3M,识别模型仅 8.5M,利用 PaddleSlim 的模型量化方法,可以在保持精度不降低的情况下,将检测模型压缩到 0.8M,识别压缩到 3M,更加适用于移动端部署场景。
模型下载列表 中给出了不同类型的模型,包括推理模型、训练模型、预训练模型与 slim 模型,推理模型(paddle.jit.save保存的模型) 一般是模型训练,把模型结构和模型参数保存在文件中的固化模型,多用于预测部署场景。 训练过程中保存的模型是 checkpoints 模型,保存的只有模型的参数,多用于恢复训练等。 与 checkpoints 模型相比,inference 模型会额外保存模型的结构信息,在预测部署、加速推理上性能优越,灵活方便,适合于实际系统集成。模型区别如下
各个模型的关系如下所示
3、使用步骤
运行main.py启动软件,
- 打开图片
- 选择语言模型(默认ch中文)
- 选择文本检测+识别
- 点击开始按钮
- 检测完的文本区域会自动画框,并在右侧识别结果列表中显示。
4、安装部署
以下两种安装部署步骤都可以
(1)pip install -r requirements
建议使用镜像源会比较快
(2)下载链接里边提供了anaconda 的环境,直接下载放到本机anaconda路径下边的envs文件夹
运行conda env list
可以看到有一个环境为ocr
运行conda activate ocr
进行环境激活
参考链接:https://zhuanlan.zhihu.com/p/630081304