向AI转型的程序员都关注了这个号👇👇👇
大数据挖掘DT机器学习 公众号:datayx
实现功能
文字方向检测 0、90、180、270度检测
文字检测 后期将切换到keras版本文本检测 实现keras端到端的文本检测及识别
不定长OCR识别
本文完整项目代码,模型预训练权重,和数据集获取方式
关注微信公众号 datayx 然后回复OCR即可获取。
环境部署
模型训练
一共分为3个网络
1. 文本方向检测网络-Classify(vgg16)
2. 文本区域检测网络-CTPN(CNN+RNN)
3. EndToEnd文本识别网络-CRNN(CNN+GRU/LSTM+CTC)
文字方向检测-vgg分类
模型地址
文字区域检测CTPN
支持CPU、GPU环境,一键部署
文本检测训练参考
/eragonruan/text-detection-ctpn
OCR 端到端识别:CRNN
ocr识别采用GRU+CTC端到到识别技术,实现不分隔识别不定长文字
提供keras 与pytorch版本的训练代码,在理解keras的基础上,可以切换到pytorch版本,此版本更稳定
如果你只是测试一下
运行demo.py 写入测试图片的路径即可,如果想要显示ctpn的结果,修改文件./ctpn/ctpn/other.py的draw_boxes函数的最后部分,cv2.inwrite('dest_path',img),如此,可以得到ctpn检测的文字区域框以及图像的ocr识别结果
如果你想训练这个网络
1 对ctpn进行训练
定位到路径--./ctpn/ctpn/train_net.py
预训练的vgg网络路径VGG_imagenet.npy将预训练权重下载下来,pretrained_model指向该路径即可, 此外整个模型的预训练权重checkpoint
ctpn数据集还是百度云数据集下载完成并解压后,将.ctpn/lib/datasets/pascal_voc.py 文件中的pascal_voc 类中的参数self.devkit_path指向数据集的路径即可
2 对crnn进行训练
keras版本 ./train/keras_train/train_batch.py model_path--指向预训练权重位置 MODEL_PATH---指向模型训练保存的位置keras模型预训练权重
pythorch版本./train/pytorch-train/crnn_main.py
parser.add_argument('--crnn',help="path to crnn (to continue training)",default=预训练权重的路径,看你下载的预训练权重在哪啦)parser.add_argument('--experiment',help='Where to store samples and models',default=模型训练的权重保存位置,这个自己指定)
识别结果展示
文字检测及OCR识别结果
主要是因为训练的时候,只包含中文和英文字母,因此很多公式结构是识别不出来的
看看纯文字的
可以看到,对于纯文字的识别结果还是阔以的呢,感觉可以在crnn网络在加以改进,现在的crnn中的cnn有点浅,并且rnn层为单层双向+attention,目前正在针对这个地方进行改动,使用迁移学习,以restnet为特征提取层,使用多层双向动态rnn+attention+ctc的机制,将模型加深,目前正在进行模型搭建,结果好的话就发上来。
阅读过本文的人还看了以下:
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加:datayx
长按图片,识别二维码,点关注