开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别

Posted OpenCV大本营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别相关的知识,希望对你有一定的参考价值。


本文分享一个OCR中文文字识别项目:CHINESE-OCR,其基于TensorFlow、Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别。


https://github.com/xiaofengShi/CHINESE-OCR


实现功能


  • 文字方向检测 0、90、180、270度检测

  • 文字检测 后期将切换到keras版本文本检测 实现keras端到端的文本检测及识别

  • 不定长OCR识别

环境部署


Bash
##GPU环境
sh setup.sh
## CPU环境
sh setup-cpu.sh
##CPU python3环境
sh setup-python3.sh

使用环境:python3.6+tensorflow1.7+cpu/gpu


模型训练


一共分为3个网络 


  • 1. 文本方向检测网络-Classify(vgg16)

  • 2. 文本区域检测网络-CTPN(CNN+RNN)

  • 3. EndToEnd文本识别网络-CRNN(CNN+GRU/LSTM+CTC)


1 文字方向检测-vgg分类

基于图像分类,在VGG16模型的基础上,训练0、90、180、270度检测的分类模型.
详细代码参考angle/predict.py文件,训练图片8000张,准确率88.23%

https://pan.baidu.com/s/1zquQNdO0MUsLMsuwxbgPYg

2 文字区域检测CTPN

关于ctpn网络,网上有很多对其进行介绍讲解的,算法是2016年提出的,在印书体识别用的很多,本人也写过一篇相应的博文深度学习-TextDetection,在文章中结合本repo的代码对ctpn的原理进行了详细的讲解。CTPN网路结构如下

开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别

ctpn是一种基于目标检测方法的文本检测模型,在本repo的ctpn中anchor的设置为固定宽度,高度不同,相关代码如下:

def generate_anchors(base_size=16, ratios=[0.5, 1, 2],
scales=2 ** np.arange(3, 6)):
heights = [11, 16, 23, 33, 48, 68, 97, 139, 198, 283]
widths = [16]
sizes = []
for h in heights:
for w in widths:
sizes.append((h, w))
return generate_basic_anchors(sizes)


基于这种设置,ctpn只能检测水平方向的文本,如果想要ctpn可以支持垂直文本检测,可以在anchor生成函数上进行修改。更详细的内容可以参考博客讲解。

3 OCR 端到端识别:CRNN

ocr识别采用GRU+CTC端到到识别技术,实现不分隔识别不定长文字


提供keras 与pytorch版本的训练代码,在理解keras的基础上,可以切换到pytorch版本,此版本更稳定

  • 此外参考了了tensorflow版本的资源仓库:TF:LSTM-CTC_loss

为什么使用ctc


ctc是一种解码机制,在使用ctpn提取到待检测文本行之后,我们要识别提取到的区域内的文本内容,目前广泛存在两种解码机制。

一种是seq2seq机制,输入的是图像,经过卷积编码之后再使用RNN解码,为了提高识别的准确率,一般会加入attention机制。

另一种就是ctc解码机制,但是对于ctc解码要满足一个前提,那就是输入序列的长度不小于输出序列的长度。ctc主要用于序列解码,我们不需要对序列中的每个元素进行标记,只需要知道输入序列对应的整个label是什么即可,针对ocr项目,也就是输入一张图像上面写着“欢迎来到中国”这几个字,我们只需要是这几个字,而没必要知道这几个字在输入图像中所在的具体位置,实际上如果知道每个字所在的位置,就是单字符识别了,的确会降低任务的复杂多,但是现实中我们没有这么多标记号位置的数据,这个时候CTC就显得很重要了。关于ctc解码机制,本人同样谢了一个对应的博客CTC算法原理,在文章中进行了详细的讲解,,如有疑问,请提交提问。

本repo中使用的是CNN+RNN+CTC的机制,实际上可以使用CNN+CTC的机制,CNN推荐选择densenet或者resnet

识别结果展示

文字检测及OCR识别结果


开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别=========================================================== 开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别=========================================================== 开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别

主要是因为训练的时候,只包含中文和英文字母,因此很多公式结构是识别不出来的

看看纯文字的

开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别=========================================================== 开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别

https://github.com/xiaofengShi/CHINESE-OCR


检测与识别源码


开源代码已经打包上传至百度云,可以扫码下方二维码,

后台回复:OCR20190402,即可获得百度云链接。


欢迎给我"在看"!

以上是关于开源!基于TensorFlow/Keras/PyTorch实现对自然场景的文字检测及端到端的OCR中文文字识别的主要内容,如果未能解决你的问题,请参考以下文章

基于Node.JS, MongoDB的开源IM聊天框架Spika

基于SpringBoot 的MCMS系统,完全开源,直接商用太爽了

基于Vue和Electron企业级开源接口管理工具

基于 Github 平台的 .NET 开源项目模板. 嘎嘎实用!

语音助手(基于v3s开源啦)

语音助手(基于v3s开源啦)