极简主义OCR

用opencv的dnn模块做OCR,实现对图片中的文本检测与识别,其中文本检测用的是EAST,文本识别用的是CRNN。程序的运行不依赖任何深度学习框架pytorch,tensorflow等等的,只依赖opencv,numpy,math和argparse这4个python库,做到极简主义OCR。下载源码的地址是 https://github.com/hpc203/ocr-opencv-dnn

在运行程序前,按照README.md里的提供的模型文件地址下载模型文件后,就可以运行程序了。

在编写这个程序时,我一直有个疑惑,就是在EAST文本检测模块里。起初,我是在https://github.com/spmallick/learnopencv/blob/master/TextDetectionEAST/textDetection.py里看到用opencv的dnn模块做EAST文本检测,但是它的读取模型文件初始化网络的方式我一直疑惑不解。看text_detect_recognition.py的第152行:

detector = cv.dnn.readNet(modelDetector)

modelDetector是.pb文件,这说明它是在tensorflow框架里训练得到的,我把这行代码换成

detector = cv.dnn.readNetFromTensorflow(modelDetector)

程序依然可以正常运行。但是我看到过的用cv.dnn.readNetFromTensorflow读取faster-rcnn,mask-rcnn,又或者ssd的时候,需要提供.pb和.pbtxt文件才能正常运行的,如果只提供.pb文件,那程序运行就会报错中断的。看opencv里的dnn.py文件,readNetFromTensorflow函数接口的定义:

可以看到config(也就是pbtxt文件)是一个可选项,在调用这个函数时,可以不提供config输入参数的。readNet函数接口的定义也是如此

因此,我就有个疑问,在tensorflow框架里训练产生的模型文件,用opencv的dnn模块读取时,什么样的网络可以只提供.pb文件就能正常运行,什么样的网络需要既提供.pb又要提供.pbtxt文件才能正常运行呢?

猜你喜欢

转载自blog.csdn.net/nihate/article/details/108754622