极简主义OCR

用opencv的dnn模块做OCR,实现对图片中的文本检测与识别,其中文本检测用的是EAST,文本识别用的是CRNN。这套程序里有Python和C++两种版本的实现,以Python版本的程序为例,程序的运行不依赖任何深度学习框架pytorch,tensorflow等等的,只依赖opencv,numpy,math和argparse这4个python库,做到极简主义OCR。我把这套程序源码发布在github上了,地址是 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)

程序依然可以正常运行,值得注意的是它这里只提供.pb文件作为输入就能正常运行。但是我看到过的用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文件才能正常运行呢?

此外,我做了一个OCR的应用,使用OCR算法做身份证全卡面文字解析,在这个算法里,包含Faster-rcnn检测图片里的证件照,DBNet检测证件照里的文字,CRNN识别文字,一共三个模块,我把程序发布在github上了,地址是 https://github.com/hpc203/OCR-dbnet-crnn

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值