代码地址如下:
http://www.demodashi.com/demo/13870.html

参考GitHub源码:https://github.com/YoungMiao/crnn

应demo大师文章要求,我再补充下,推荐下,这个平台挺好

1.环境搭建

1.1 基础环境

  • Ubuntu14.04 + CUDA
  • opencv2.4 + pytorch + lmdb +wrap_ctc

安装lmdb apt-get install lmdb

1.2 安装pytorch

pip,linux,cuda8.0,python2.7:pip install http://download.pytorch.org/whl/cu80/torch-0.1.12.post2-cp27-none-linux_x86_64.whl
参考:http://pytorch.org/

1.3 安装wrap_ctc

git clone https://github.com/baidu-research/warp-ctc.git`
cd warp-ctc
mkdir build; cd build
cmake ..
make

GPU版在环境变量中添加
export CUDA_HOME="/usr/local/cuda"

cd pytorch_binding
python setup.py install

参考:https://github.com/SeanNaren/warp-ctc/tree/pytorch_bindings/pytorch_binding

1.4 注意问题

  1. 缺少cffi库文件 使用pip install cffi安装
  2. 安装pytorch_binding前,确认设置CUDA_HOME,虽然编译安装不会报错,但是在调用gpu时,会出现wrap_ctc没有gpu属性的错误

2. crnn预测(以21类中英文为例)

模型地址:链接:https://eyun.baidu.com/s/3dEUJJg9 密码:vKeD

运行/contrib/crnn/demo.py

原始图片为:

识别结果为:

# 加载模型
model_path = './samples/netCRNN_9_112580.pth'
# 需识别的图片
img_path = './data/demo.png'
# 识别的类别
alphabet = 'ACIMRey万下依口哺摄次状璐癌草血运重'
# 设置模型参数 图片高度imgH=32, nc, 分类数目nclass=len(alphabet)+1 一个预留位, LSTM设置隐藏层数nh=128, 使用GPU个数ngpu=1
model = crnn.CRNN(32, 1, 22, 128, 1).cuda()

替换模型时,注意模型分类的类别数目

3、程序实现(crnn 训练(以21类中英文为例))

注意:--------------------------------------

请补充完整个实现过程,以下实现,没有说到具体的实现过程,应该把具体的代码说清楚,思路说清楚。数据怎样清洗的,怎样建模的等等

###1. 数据预处理

运行/contrib/crnn/tool/tolmdb.py

# 生成的lmdb输出路径
outputPath = "./train_lmdb"
# 图片及对应的label
imgdata = open("./train.txt")

###2. 训练模型

运行/contrib/crnn/crnn_main.py

python crnn_main.py [--param val]
--trainroot        训练集路径
--valroot          验证集路径
--workers          CPU工作核数, default=2
--batchSize        设置batchSize大小, default=64
--imgH             图片高度, default=32
--nh               LSTM隐藏层数, default=256
--niter            训练回合数, default=25
--lr               学习率, default=0.01
--beta1
--cuda             使用GPU, action='store_true'
--ngpu             使用GPU的个数, default=1
--crnn             选择预训练模型
--alphabet         设置分类
--Diters
--experiment        模型保存目录
--displayInterval   设置多少次迭代显示一次, default=500
--n_test_disp        每次验证显示的个数, default=10
--valInterval        设置多少次迭代验证一次, default=500
--saveInterval       设置多少次迭代保存一次模型, default=500
--adam               使用adma优化器, action='store_true'
--adadelta           使用adadelta优化器, action='store_true'
--keep_ratio         设置图片保持横纵比缩放, action='store_true'
--random_sample      是否使用随机采样器对数据集进行采样, action='store_true'

示例:python /contrib/crnn/crnn_main.py --tainroot [训练集路径] --valroot [验证集路径] --nh 128 --cuda --crnn [预训练模型路径]

修改/contrib/crnn/keys.pyalphabet = 'ACIMRey万下依口哺摄次状璐癌草血运重'增加或者减少类别

  1. 注意事项

训练和预测采用的类别数和LSTM隐藏层数需保持一致

4、项目结构

从上往下大概说明下

1.crnn.py是crnn网络结构模块
#双向的LSTM
class BidirectionalLSTM(nn.Module)
#CRNN网络
class CRNN(nn.Module)
crnn网络设计:
CRNN由CNN+BiLSTM+CTC构成:

网络结构:

  • input: 输入文字块,归一化到32*w 即height缩放到32,宽度按高度的比率缩放,也可以缩放到自己想要的宽度,训练时为批次训练,缩放到[32,Wmax]),示例为(32,128)

  • 经过两个conv层和两个poling层,conv3层时数据大小为256*8*32,两个pooling层步长为2

  • pooling2层步长为(2,1),(个人看法:作者使用的英文训练,英文字符的特征是高大于宽的特征,倘若使用中文训练,建议使用(2,2),我的代码中默认为(2,2),示例以(2,1)为例,所以此时输出为256*4*33

  • bn层不改变输出的大小(就是做个归一化,加速训练收敛),p3层时,w+1,所以pooling3层时,输出为512*2*34

  • conv7层时,kernel 为22,stride(1,1) padding(0,0)
    Wnew = (2 + 2 * padW - kernel ) / strideW + 1 = 1
    Hnew = 33
    所以conv7层输出为512
    1*33

  • 后面跟两个双向Lstm,隐藏节点都是256
    Blstm1输出33*1256
    Blstm2输出 33
    *1*5530 5530 = 字符个数 + 非字符 = 5529 + 1
    最终的输出结果直观上可以想象成将128分为33份,每一份对应5530个类别的概率

2.tolmdb.py生成训练lmdb数据模块

  • 输入图片list的文档,大概格式如下

3.crnn_main.py主程序模块

  • 增加了对类别增删的增量训练,line104~line117
    4.dataset.py数据加载模块
  • class alignCollate:按照比例缩放w
  • class randomSequentialSampler:随机采样batch
    5.utils.py编解码模块
    ##5、数据部分
    数据获取方法有两种:
  1. 生成自然场景文本
    GitHub:https://github.com/ankush-me/SynthText
  2. 生成常规文本:
    GitHub:https://github.com/YoungMiao/synthdata-zh
    有时间在记录两种方法

CRNN中英文字符识别

代码地址如下:
http://www.demodashi.com/demo/13870.html

注:本文著作权归作者,由demo大师发表,拒绝转载,转载需要作者授权

CRNN中英文字符识别相关推荐

  1. 基于EAST+CRNN实现集装箱箱号识别

    前段时间利用深度学习实现了一个集装箱箱号自动识别系统,主要是利用了EAST+CRNN进行实现. 一.数据 从某港口采集10000多张集装箱数据,图像数据如图所示,包含了一些非理想情况下的环境,集装箱生 ...

  2. 街景字符识别1-街景字符编码SVHN

    The Street View House Numbers (SVHN) Dataset是街景字符的数据集.该数据集用于modern-day map making.街景字符转录是字符序列识别问题.针对 ...

  3. CTPN+CRNN算法端到端实现文字识别的实战开发

    本文分享自华为云社区<CTPN+CRNN 算法端到端实现文字识别>,作者:HWCloudAI. OCR介绍 光学字符识别(英语:Optical Character Recognition, ...

  4. 【项目实践】中英文文字检测与识别项目(CTPN+CRNN+CTC Loss原理讲解)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:opencv学堂 OCR--简介 文字识别也是图像领域一 ...

  5. python实现文字识别软件_文字识别(OCR)CRNN(基于pytorch、python3) 实现不定长中文字符识别...

    文字识别(OCR)CRNN(基于pytorch.python3) 实现不定长中文字符识别 发布时间:2018-09-26 19:40, 浏览次数:1265 , 标签: OCR CRNN pytorch ...

  6. OCR字符识别,支持手写字体识别,中英文识别

    OCR字符识别,支持手写字体识别,中英文识别,基于深度学习,轻量级网络,检测进度高,支持python开发 编号:4199652712767280盐市口会玩的川乌

  7. CRNN论文翻译——中英文对照

    文章作者:Tyan 博客:noahsnail.com  |  CSDN  |  简书 声明:作者翻译论文仅为学习,如有侵权请联系作者删除博文,谢谢! 翻译论文汇总:https://github.com ...

  8. 字符识别--CRNN+CTC

    文字检测过程分两步,第一步为检测出文字所在的位置,第二步根据检测框里的内容进行文字识别. 第一部分文字检测,这里介绍了SAST算法:https://blog.csdn.net/qq_31607947/ ...

  9. 文字识别(OCR)CRNN(基于pytorch、python3) 实现不定长中文字符识别

     最近开源了一个之前做的人脸关键点检测的算法,欢迎star GitHub - Sierkinhane/TAB: Think about boundary: Fusing multi-level bou ...

最新文章

  1. Java数组传参sql_Java中如何传一个数组作为筛选条件操作数据库(sql中foreach的使用)...
  2. Windows环境安装运行:Angular.js
  3. Android获取手机短信
  4. Nginx独立图片服务器搭建教程
  5. freeRtos学习笔(3)临界区管理
  6. javascript中的运算符号
  7. 炫界 (978) -(建工发现应用克隆漏)_湖南建工装配式建筑迈入“加速度”
  8. Python获取当前目录和上级目录
  9. C++学习笔记章节中 面向对象详解
  10. C/C++静态库编译报错(/usr/bin/ld:cannot find -lpthread,/usr/bin/ld:cannot find -lc)
  11. JDBC连接数据库:单线程、多线程、批处理插入数据的对比
  12. 晋职称不考外语 计算机,评职称不考外语计算机的价值导向
  13. ibm服务器系统电池型号,IBM服务器_X366型号2003系统恢复
  14. linux服务之NTP及chrony时间同步
  15. 谷歌服务框架_谷歌服务框架下载_谷歌服务框架全版本整理
  16. 这是浙江大学郑强教授的经典语录 虽然我不完全赞同但对他的精神佩服的五体投地...
  17. 用Liveupdata 刷MSI主板Slic 2.1
  18. 综合布线系统施工规范
  19. 舒老师AK的hu测 T1. 迷失沃尔玛(dp+贪心)
  20. java基础篇(11) 枚举类型

热门文章

  1. Android仿手机淘宝多级下拉菜单
  2. 无意中看到,有一些感受。。。
  3. 如何发布一款Android应用到安卓市场
  4. 别被骗了:物联网卡骗局无处不在
  5. php怎么判断qq内置浏览器,如何判断微信内置浏览器(JS PHP)
  6. java dsa加密与解密_Java DSA 加密 | 解密
  7. Jenkins使用入门笔记
  8. 三国演义java_三国演义之「策略模式」
  9. mit app中计算器制作程序_“个税APP”,防不胜防啊
  10. 星星下落_与星星共舞