自然场景下的文字检测是深度学习的重要应用,在之前的文章中已经介绍过了在简单场景、复杂场景下的文字检测方法,包括MSER+NMS、CTPN、SegLink、EAST等方法,详见文章:
【AI实战】手把手教你文字识别(检测篇一: MSER、CTPN、SegLink、EAST方法)
今天将继续介绍复杂场景下基于深度学习的文本检测方法,手把手教你如何使用AdvancedEAST、PixelLink进行文本检测。
1、AdvancedEAST方法实战
在上一篇文本检测的AI实战文章中,介绍了EAST检测方式,取得了不错的检测效果,但是在长文本预测中效果还不是很理想。于是,有大牛对EAST检测方法进行了改进,获得了比EAST更好的预测准确性(特别是在长文本上),并开源了源代码,这就是AdvancedEAST方法。网络结构如下:
AdvancedEAST的网络结构与EAST相似(EAST技术原理详见文章:大话文本检测经典模型EAST),但采用了VGG作为网络主干结构,基于Keras编写,在特征提取层中增加了后面卷积层的通道数量,对后处理方法也进行了优化。下面动手来试试AdvancedEAST的实际检测效果吧。
(1)下载源代码
首先,在github上下载AdvancedEAST源代码(https://github.com/huoyijie/AdvancedEAST),可直接下载成zip压缩包或者git克隆
git clone https://github.com/huoyijie/AdvancedEAST.git
(2)下载模型文件
下载AdvancedEAST预训练好的模型,下载链接: https://pan.baidu.com/s/1KO7tR_MW767ggmbTjIJpuQ 提取码: kpm2
创建文件夹saved_model,将下载后的模型文件解压后放到里面
修改cfg.py文件里面的train_task_id,将该id修改与下载的预训练模型一致,以便于在执行程序时,可自动加载模型,修改如下:
train_task_id = ‘3T736’
下载keras的VGG预训练模型,因为AdvancedEAST使用了VGG作为网络的主干结构,因此,在调用keras时会加载VGG预训练模型,下载地址为https://github.com/fchollet/deep-learning-models/releases/download/v0.1/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5,然后放到keras加载模型的默认路径,目录如下:
~/.keras/model
如果没有手动下载,那么在加载keras的VGG模型时,程序也会自动下载,但一般速度会很慢,经常会超时
(3)准备基础环境
AdvancedEAST依赖于以下的基础环境,使用conda或pip进行安装准备。
- python 3.6.3+
- tensorflow-gpu 1.5.0+(or tensorflow 1.5.0+)
- keras 2.1.4+
- numpy 1.14.1+
- tqdm 4.19.7+
(4)AdvancedEAST检测文本
执行python predict.py进行文本检测
默认读取项目自带的demo/012.png文件,进行检测
检测后生成以下文件
其中,012.png_act.jpg是检测过程的结果
012.png_predict.jpg是检测出最终文本框的圈定结果
012.txt是检测文本框的位置坐标(4个顶点)
在执行模型时,其中会有少部分检测结果是不完整的(边框少于4个顶点),默认会显示出来
可通过在predict.py的源代码中,让其保持静默(不提示不完整的检测结果),修改最后一行为
predict(east_detect, img_path, threshold, quiet=True)
如果要检测指定的图片,在执行python predict.py时,可通过增加参数指定图片路径。另外,还可指定阈值,即在做像素分类判断是否为文本的阈值,默认为0.9。执行命令如下:
python predict.py --path=/data/work/tensorflow/data/icdar_datasets/ICDAR2015/ch4_test_images/img