OpenCV4.5.0基于深度学习的文本和数字识别示例

OpenCV 4.5.0已发布,其中【基于深度学习的文本和数字识别示例】是新版本的重大改进之一,它也是GSoC2020的成果之一。本文记录该项目相关示例OpenCV 4.5.0/samples/dnn/text_detection.py的测试方法与测试结果。

环境说明

python3.6
opencv-contrib-python 4.4.0.44
因为opencv-contrib-python尚未更新至4.5.0,故本文的测试环境还未用上最新的OpenCV 4.5.0,但【基于深度学习的文本和数字识别示例】的示例代码(4.5.0/samples/dnn/text_detection.py)在当前环境下已可以运行。
关于【基于深度学习的文本和数字识别示例】与GSoC2020的更多幕后信息,请参考回放 | OpenCV Webinar 4:谷歌编程夏令营 2020 OpenCV文本识别开发,其中有介绍如何训练适合的OCR模型以及开发过程中遇到的DNN模型导入、模型转换等问题。感谢原作者优秀的代码和精彩的分享。

opencv4.5.0 text_detection.py运行方法

1. 下载text_detection.py及相关模型
OpenCV dnn text_detection一文中我曾经介绍过opencv3.4.2版本中的该示例,当时该示例中仅有文字定位的功能,而在Opencv4.5.0中的同名文件中,不仅有文字定位,还有文字识别功能。
根据text_detection.py中的提示,我们分别下载文字检测模型和文字识别模型。
原文中文字检测模型下载链接:https://www.dropbox.com/s/r2ingd0l3zt8hxs/frozen_east_text_detection.tar.gz?dl=1
百度网盘下载链接:
文字识别模型下载链接:https://drive.google.com/drive/folders/1cTbQ3nuZG-EKWak6emD_s8_hHXWz7lAr?usp=sharing
谷歌云盘下载链接中有多个模型,我这里给出我测试过的模型的百度网盘链接:
下载完成后,将文件检测frozen_east_text_detection.pb,文字识别模型crnn.onnx以及示例代码text_detection.py放在同一路径下。
2. 运行text_detection.py
我们选取影响pytesseract识别结果的几项设定中的图片为测试图片,也好与tesseract的定位与识别结果进行对比。为了方便观察,我将text_detection.py中putText的字体适当进行了放大,其他未做改动,这里不再给出代码。
打开cmd.exe,切换至text_detection.py所在路径,运行如下命令:


运行结果如下,效果极佳,成功定位且识别出了每一件货物的编号。

EAST Loaction crnn OCR

下图分别为原图和我在tesseract中曾尝试过的不同参数的较好的测试结果:

items number

tesseract ocr results


注意这里的参数【–width 1600 –height 640】是有讲究的,必须是32的倍数,且尽量与原图的宽高比接近。相关对比测试结果可以参考OpenCV dnn text_detection

How to convert from pb to onnx

在text_detection.py的注释中有提到How to convert from pb to onnx。为何需要由pb转换至onnx呢?原作者的视频分享中有提及,因为现在主流的OCR算法主要基于PyTorch来实现的,但opencv并不能直接读取PytTorch的模型,所以我们需要将PyTorch的模型转换为OpenCV可读取的onnx模型。
后续我们也有可能需要进行此类转换,因此这里也记录一下转换的测试过程。
1. 安装torch

convert from pb to onnx需要用到torch,因此我们要先安装。根据Start Locally | PyTorch的指引,按自己电脑的配置环境选择,运行其给出的命令,即可安装成功。

2.下载crnn.pytorch
下载仓库https://github.com/meijieru/crnn.pytorch。按照其说明,下载crnn.pth并将 放在该仓库的 data/.目录下,然后运行


运行结果与其仓库说明的结果一致。
3. 将.pth转换为.crnn模式

在crnn.pytorch-master/demo.py相同路径下新建文件pth2onnx.py,将text_detection.py注释中的代码拷贝到该文件并运行:

运行上述代码即可成功将crnn.pth转换为我们第一小节需要的crnn.onnx文件。

本文到此结束,感谢阅读,欢迎关注。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Fork me on GitHub