github python项目,python.编译器
本文基于tensorflow,keras/pytorch,实现了自然场景的文字检测和端到端的OCR汉字识别。
实现功能
文本检测0、90、180、270度检测
在文字检测的后期,我们将切换到keras版本文字检测,实现keras端到端的文字检测和识别。
不确定OCR识别
部署环境
尝试
##GPU环境
sh设置. sh
## CPU环境
sh安装程序-cpu.sh
##CPU python3环境
sh setup-python3.sh
运行环境:python3.6 tensorflow1.7 cpu/gpu
模特培训
它分为三个网络。
1.文本方向检测网络-分类器(vgg16)
2.文本区域检测网络-CTPN(CNN RNN)
3.端到端文本识别网络(CNN GRU/LSTM CTC)
文本检测-vgg分类
基于图像分类,在VGG16模型的基础上训练了0、90、180和270度检测的分类模型。
代码详细参考文件angle/predict.py。训练图片8000张,准确率88.23%。
文本区域检测CTPN
网上有很多关于ctpn网的介绍和解释。该算法于2016年提出,广泛应用于印刷体识别。我还写了一篇相应的博文,深度学习-TextDetection,里面我用这个回购的代码详细解释了ctpn的原理。CTPN的网络结构如下
Ctpn是一种基于目标检测方法的文本检测模型。在这个repo的ctpn中,锚点设置为固定宽度,不同高度。相关代码如下:
def generate _ anchors(base _ size=16,ratios=[0.5,1,2],
scales=2 ** np.arange(3,6)):
高度=[11,16,23,33,48,68,97,139,198,283]
宽度=[16]
尺寸=[]
对于高度h:
对于宽度w:
size . append((h,w))
返回生成_基本_锚点(大小)
基于此设置,ctpn只能检测水平方向的文本。如果希望ctpn支持垂直文本检测,可以修改锚生成函数。更多详情,请参考博客。
OCR端到端识别:CRNN
Ocr采用GRU CTC端到端识别技术,实现不分离的不定字符识别。
为keras和pytorch版本提供培训代码。在了解keras的基础上,可以切换到pytorch版本,更加稳定。
另外参考tensorflow版本的资源库:TF:LSTM-CTC_loss。
为什么使用ctc?
Ctc是一种解码机制。在使用ctpn提取待检测的文本行后,我们需要识别提取区域中的文本内容。目前有两种解码机制。
一种是seq2seq机制,其中输入图像通过卷积编码,然后通过RNN解码。为了提高识别准确率,通常会加入注意机制。
另一种是ctc解码机制,但对于ctc解码,一个前提条件是输入序列的长度不小于输出序列的长度。Ctc主要用于序列解码。我们不需要标记序列中的每一个元素,只需要知道输入序列的整个标签是什么。对于ocr项目,也就是输入一张写有“欢迎来到中国”字样的图像,我们只需要这些文字,而不需要知道这些文字在输入图像中的具体位置。事实上,如果我们知道每个单词的位置,这将是单个字符识别,这确实会降低任务的复杂性。关于ctc解码机制,我也感谢过一个相应的关于CTC算法原理的博客,在文章里有详细的讲解。如果您有任何问题,请提交您的问题。
这个回购用的是CNN CNN CTC的机制,但实际上可以用。CNN推荐densenet或者resnet。
说明
使用培训前测试
运行demo.py,写出测试图片的路径。如果你想显示ctpn的结果,修改文件的draw_boxes函数的最后一部分。/ctpn/ctpn/other.py,cv2.inwrite(dest_path ,img),这样就可以得到ctpn检测的文本区域框和图像的ocr识别结果。
用自己的数据训练。
1列车ctpn。
导航到路径-。/ctpn/ctpn/train _ net.py。
预训练的vgg网络路径VGG_imagenet.npy
下载预训练权重,pretrained_model指向路径。
此外,整个模型的训练前体重检查点
Ctpn数据集还是百度云
数据集下载解压后,将pascal_voc类中的参数self.devkit_path指向。ctpn/lib/data sets/Pascal _ VOC . py文件到数据集的路径。
火车crnn。
Keras版本。/train/keras _ train/train _ batch . py model _ path-指向训练前的重量位置
MODEL _ PATH——指向保存模型训练的位置。
Keras模型训练前重量
Pytorch版本。/train/py torch-train/crnn _ main . py
parser.add_argument(
- crnn ,
help= crnn的路径(继续训练),
默认=预训练体重的路径,取决于您下载的预训练体重的位置)
parser.add_argument(
-实验,
help=存储样本和模型的位置,
默认=模型训练权重的保存位置,由自己指定)
识别结果显示
文本检测和OCR识别结果
===========================================================
===========================================================
主要是因为训练只包含中英文字母,所以很多公式结构无法识别。
看纯文本。
===========================================================
===========================================================
待续
Tensorflow版本crnn,计划尝试当前各种招数(Dropout,BN,Learning _ Decay等。)
大家可以看到,纯文本的识别结果还是比较宽泛的,感觉在crnn网络中还可以改进。现在crnn里的cnn有点浅薄。
而rnn层是单层双向注意,目前正在针对这个地方进行修改,使用迁移学习和restnet作为特征提取层。
利用多层双向动态rnn关注ctc的机制深化模型。目前模型正在搭建中。如果结果好,就发上来。如果没有,那就只能爽了~ ~ ~
训练数据集补充
列出一些在文本检测和识别领域可以用于模型训练的大型公共数据集,不涉及只用于模型微调任务的小型数据集。
中文文本在野外(CTW)
该数据集包含32,285幅图像,1,018,402个汉字(来自腾讯街景),包括平面文本、凸起文本、城市文本、农村文本、低亮度文本、远处文本和部分遮挡文本。图像大小为2048*2048,数据集大小为31GB。数据集按(8:1:1)的比例分为训练集(25887幅图像,812872个汉字)、测试集(3269幅图像,103519个汉字)和验证集(3129幅图像,103519个汉字)。
文献链接:https://arxiv.org/pdf/1803.00085.pdf
下载数据集地址:https://ctwdataset.github.io/
在野外阅读中文文本(RCTW-17)
这个数据集包含12,263张图片,8,034个训练集和4,229个测试集,总计11.4GB,大部分图片都是手机摄像头拍摄的,包含少数截屏。这些图像包含中文文本和一些英文文本。图像分辨率不同。
http://mclab.eic.hust.edu.cn/icdar2017chinese/dataset.html
文学:http://arxiv.org/pdf/1708.09585v2
ICPR MWI 2018挑战赛
竞赛提供了20,000幅图像作为数据集,其中50%是训练集,50%是测试集。它主要由合成图像、产品描述和在线广告组成。数据集数据丰富,中英文混杂,涵盖几十种字体,字体大小不一,格式多样,背景复杂。文件大小为2GB。
https://tianchi.aliyun.com/competition/information.htm?raceId=231651 _ is _ log in _ redirect=true account traceid=595 a06c 3-7530-4b8a-ad3d-40165 e 22 dbfe
总计-文本
这个数据集由1555个图像和11459个文本行组成,包括水平文本、倾斜文本和弯曲文本。文件大小为441MB。大部分是英文的,少数是中文的。训练集:1255件测试集:300件
http://www.cs-chan.com/source/ICDAR2017/totaltext.zip
arxiv.org/pdf/1710.10400v http://号
谷歌FSNS(谷歌街景文本数据集)
这个数据集是从谷歌的法国街景图片中获得的超过一百万个街道名称标志,每个街道名称标志都包含同一街道标志的不同视角。图像大小为600*150,训练集1044868个,验证集16150个,测试集20404个。
http://rrc.cvc.uab.es/?ch=6com=下载
arxiv.org/pdf/1702.03970v1 http://号
可可-文本
该数据集包括63,686幅图像和173,589个文本示例,包括手写和印刷版本、清晰和不清晰版本。文件大小12.58GB,训练集43686个,测试集10000个,验证集10000个。
http://arxiv.org/pdf/1601.07140v2
https://vision.cornell.edu/se3/coco-text-2/
用于文本本地化的合成数据
复杂背景下人工合成的自然场景文本数据。包含858,750幅图像,总共7,266,866个单词实例,28,971,487个字符,文件大小为41GB。利用这种合成算法,不需要人工标注就可以知道文本的标签信息和位置信息,可以获得大量的自然场景文本标注数据。
下载地址:http://www.robots.ox.ac.uk/~vgg/data/scenetext/
文学:http://www.robots.ox.ac.uk/~ankush/textloc.pdf
代码:https://github.com/ankush-me/SynthText(英文版)
Codehttps://github.com/wang-tf/Chinese _ ocr _综合_数据(中文版)
合成单词数据集
合成文本识别数据集,包含900万幅图像,涵盖90000个英文单词。文件大小为10GB。
http://www.robots.ox.ac.uk/~vgg/data/text/
Caffe-ocr中文合成数据
利用中文语料库的数据,通过字体、大小、灰度、模糊、透视、拉伸等变化随机生成。共有360万张图片,图像分辨率为280x32,涵盖汉字、标点、英文、数字共5990个字符。文件大小约为8.6GB。
https://pan.baidu.com/s/1dFda6R3
涉及
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。