echart 固定刻度文字宽度_基于tensorflow实现对自然场景的文字检测及端到端的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)

文字方向检测-vgg分类

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

文字区域检测CTPN

关于ctpn网络,网上有很多对其进行介绍讲解的,算法是2016年提出的,在印书体识别用的很多,CTPN网路结构如下:

822c759e77c2708264ff2d7fecc9030a.png

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生成函数上进行修改。

OCR 端到端识别:CRNN

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

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

此外参考了了tensorflow版本的资源仓库:https://github.com/xiaofengShi/CTC_TF

为什么使用ctc

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

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

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

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

使用预训练测试

运行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识别结果

fb0a386c3775924f046b770ed77b0ad2.png
37f7aaa96d5d328485dca28948040182.png

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

11126952562063531de49891fca67af7.png
6a9a58a7222b5bf67d98331a709fb45c.png
文献链接:https://arxiv.org/pdf/1803.00085.pdf 数据集下载地址:https://ctwdataset.github.io/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值