使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别
GitHub:https://github.com/pengcao/chinese_ocr https://github.com/xiaofengShi/CHINESE-OCR
|-angle 基于VGG分类模型的文字方向检测预测 |-bash 环境安装 |----setup-python3.sh 安装python3环境 |----setup-python3-cpu.sh 安装CPU环境 |----setup-python3-gpu.sh 安装CPU环境 |-crnn |-ctpn 基于CTPN模型的文本区域检测模型训练及预测 |-model |----modelAngle.h5 文字方向检测VGG模型 |----my_model_keras.h5 文本识别CRNN模型 |-ocr 基于CRNN的文本识别模型预测 |-result 预测图片 |-test 测试图片 |-train 基于CRNN的文本识别模型训练
环境要求:
python3.6 tensorflow1.7-cpu/gpu graphviz pydot (py)torch torchvision
- 卸载旧版本的pytorch和torchvision
pip uninstall torchvision pip uninstall torch
- 安装pytorch
1)Anaconda搜索torch
2)选择标记处点开
3)Anaconda Prompt - conda install -c peterjc123 pytorch
- 安装torchvision
conda install torchvision -c pytorch # TorchVision requires PyTorch 1.1 or newer
离线安装pytorch 1).whl安装
从pytorch官网https://pytorch.org/previous-versions/下载合适版本torch及torchvision的whl
# 直接对whl文件进行编译即可 pip install torch-0.4.0-cp36-cp36m-linux_x86_64.whl pip install torchvision-0.2.1-py2.py3-none-any.whl
2).tar.gz安装
下载对应版本的.tar.gz文件,并解压
# 进入解压目录,执行安装命令 python setup.py install
离线安装GCC(Tensorflow部分第三方模块需要GCC进行编译,所以在安装第三方的依赖包之前先安装GCC)
从https://pkgs.org/download/gcc下载gcc-4.8.5-28.el7_5.1.x86_64.rpm版本,并且在require部分下载所需要的rpm文件(根据报错缺失的rpm下载)
rpm -ivh gcc-4.8.5-28.el7_5.1.x86_64.rpm # 如果已经有旧的版本会报conflicts with错误 rpm -ivh gcc-4.8.5-28.el7_5.1.x86_64.rpm --force
模型
- 文本方向检测网络 - Classify(vgg16)
- 文本区域检测网络 - CTPN(CNN+RNN) - 支持CPU、GPU环境,一键部署 - 文本检测训练Github:https://github.com/eragonruan/text-detection-ctpn
- EndToEnd文本识别网络 - CRNN(CNN+GRU/LSTM+CTC)
文本方向检测
训练:基于图像分类模型 - VGG16分类模型,训练0、90、180、270度检测的分类模型(
angle/predict.py
),
训练图片8000张,准确率88.23%
模型:https://pan.baidu.com/s/1Sqbnoeh1lCMmtp64XBaK9w(n2v4)
文本区域检测
基于深度学习的文本区域检测方法:http://xiaofengshi.com/2019/01/23/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0-TextDetection/
CTPN(CNN+RNN)网路结构:
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生成函数上进行修改
对CTPN进行训练:
- 训练脚本 - 定位到路径:./ctpn/ctpn/train_net.py
- 预训练的VGG网络路径[VGG_imagenet.npy]:https://pan.baidu.com/s/1jzrcCr0tX6xAiVoolVRyew(a5ze) - 将预训练权重下载下来,pretrained_model指向该路径即可
- 模型的预训练权重[checkpoint]:https://pan.baidu.com/s/1oS6_kqHgmcunkooTAXE8GA(xmjv)
- CTPN数据集[VOCdevkit.zip]:https://pan.baidu.com/s/1NXFmdP_OgRF42xfHXUhBHQ - 下载解压后将.ctpn/lib/datasets/pascal_voc.py文件中的pascal_voc类中的参数self.devkit_path指向数据集的路径即可
端到端(EndToEnd)文本识别
OCR识别采用GRU+CTC[CRNN(CNN+GRU/LSTM+CTC)]端到端识别技术,实现不分隔识别不定长文字
CTC - CTC算法原理
CTC是一种解码机制,在使用CTPN提取到待检测文本行之后,需要识别提取到的区域内的文本内容,目前广泛存在两种解码机制。
- 一种是Seq2Seq机制,输入的是图像,经过卷积编码之后再使用RNN解码,为了提高识别的准确率,一般会加入Attention机制;
- 另一种就是CTC解码机制,但是对于CTC解码要满足一个前提,那就是输入序列的长度不小于输出序列的长度。CTC主要用于序列解码,不需要对序列中的每个元素进行标记,只需要知道输入序列对应的整个Label是什么即可,针对OCR项目,也就是输入一张图像上面写着“欢迎来到中国”这几个字,只需要是这几个字,而没必要知道这几个字在输入图像中所在的具体位置,实际上如果知道每个字所在的位置,就是单字符识别了,的确会降低任务的复杂多,但是现实中我们没有这么多标记号位置的数据,这个时候CTC就显得很重要了。
对CRNN进行训练:
- keras版本:./train/keras_train/train_batch.py(model_path-指向预训练权重位置,MODEL_PATH-指向模型训练保存的位置)
- 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=定义的模型训练的权重保存位置)
模型:
keras模型预训练权重:https://pan.baidu.com/s/14cTCedz1ESnj0mM9ISm__w(1kb9)
pytorch预训练权重:https://pan.baidu.com/s/1kAXKudJLqJbEKfGcJUMVtw(9six)
预测测试
运行predict.predict(demo).py:写入测试图片的路径即可
如果想要显示CTPN的结果,修改文件./ctpn/ctpn/other.py的draw_boxes函数的最后部分,cv2.inwrite('dest_path',img),如此可以得到CTPN检测的文字区域框以及图像的OCR识别结果
使用Python基于VGG/CTPN/CRNN的自然场景文字方向检测/区域检测/不定长OCR识别相关推荐
- Python基于YOLOv7和CRNN的车牌分割&识别系统(源码&教程)
1.研究背景 随着科技的进步和社会需求的增长,近年来摄像头逐渐高清化.高帧率化,摄像头作为信息获取设备的载体也不再局限于固定场景.路口.路侧.室内.高位.低位等不同场景下产生了各种对于检测识别的需求, ...
- python自然场景文字识别_chineseocr
本项目基于yolo3 与crnn 实现中文自然场景文字检测及识别 master分支将保留一周,后续app分支将替换为master 实现功能 文字方向检测 0.90.180.270度检测(支持dnn/t ...
- 基于深度学习的自然场景文字识别
声明:本文来源,详细内容请参考原博文https://blog.csdn.net/xiaofei0801/article/details/72778223 1.1引言 传统光学字符识别主要面向高质量的文 ...
- DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)实现不定长文本识别
DL之CNN:基于CNN-RNN(GRU,2)算法(keras+tensorflow)实现不定长文本识别 目录 输出结果 实现代码 输出结果 后期更新-- 实现代码 后期更新-- image_ocr代 ...
- 【OCR技术系列之八】端到端不定长文本识别CRNN代码实现
CRNN是OCR领域非常经典且被广泛使用的识别算法,其理论基础可以参考我上一篇文章,本文将着重讲解CRNN代码实现过程以及识别效果. 数据处理 利用图像处理技术我们手工大批量生成文字图像,一共360万 ...
- ICDAR 2019论文:自然场景文字定位技术详解
自然场景文字定位是文字识别中非常重要的一部分.与通用的物体检测相比,文字定位更具挑战性,文字在长宽比.尺度和方向上有更大范围的变化.针对这些问题,本文介绍一种融合文字片段及金字塔网络的场景文字定位方法 ...
- 基于YOLOv3 与CRNN的中文自然场景文字检测与识别
(欢迎关注"我爱计算机视觉"公众号,一个有价值有深度的公众号~) 52CV君曾经分享过多篇关于文字检测与识别的文章: 华科白翔老师团队ECCV2018 OCR论文:Mask Tex ...
- SSD: Signle Shot Detector 用于自然场景文字检测
前言 之前我在 论文阅读:SSD: Single Shot MultiBox Detector 中,讲了这个最新的 Object Detection 算法. 既然 SSD 是用来检测物体的,那么可不可 ...
- 在服务器上搭建基于yolo3 与crnn 实现中文自然场景文字检测及识别,GPU版本
Github地址 参考地址 作者大人,十分热心,对于我的问题,提供了大量的帮助,使我少走了很多的弯路,在此表示由衷的感谢 注意事项 使用nvidia-smi命令查看cuda的版本,必须是10.1或者1 ...
最新文章
- 水稻微生物组时间序列分析2b-散点图拟合
- 作为一只Python爬虫:如何破解滑动验证码
- 人工智能预测AI系统的“心灵”与“行为”
- html加载完显示图片,js图片未加载完显示loading效果
- Qt学习笔记-----事件
- BZOJ2006 [NOI2010]超级钢琴 【堆 + RMQ】
- C/C++之#ifdef、#if、#if defined的区别
- tomcat与tomee_Apache TomEE(和Tomcat)的自签名证书
- idea代码可以编译但是爆红_推荐一款 IDEA 生成代码神器,写代码再也不用加班了...
- puppeteer api_使用Node.js和puppeteer API从URL创建PDF文件
- jenkins集成sonar
- RADIO廉价冗余阵列radio0 dadio1 radio10/01 radio5 radio6
- oracle中表空间实例,oracle的表空间实例详解
- WordPress分页插件WP-PageNavi分页导航nofollow
- FunctionalInterface注解
- TPS_AOV_2 Algorithm made by Knuth {照TAOCP 2.2.3 完成}
- 短信验证码接口开发代码
- 【随记】无线网络能替代有线网络吗?
- 他融资40亿成快递巨头,自称活下去是最高目标,今夫妻双双殒命
- 74LS148 编码器 【数字电路】
热门文章
- 导入maven项目,pom报错org.apache.maven.archiver.MavenArchiver.getManifest
- 工作中用到的一些基础知识
- maxpermsize java_关于java:-XX:MaxPermSize带有或不带有-XX:PermSize
- Python2爬取内涵段子
- XShell下载安装与使用
- Java:JVM+数据库(搬砖整理,侵权删文)
- 【C++】基于OpenGL的音乐可视化(二):波形的绘制
- 解决远程到windows2012r2服务器提示credssp加密oracle修正
- unity Shader Graph实现2D图片扭曲波纹效果
- JavaScript 读取Cookie