python字符识别_crnn(基于pytorch、python3) 实现不定长中文字符识别

2023-10-30

在六七月份参加了一个比赛,做的项目是提取图片中的文字信息,首先是接触了一些文本检测算法(如CTPN,East),后研究了文本识别算法(我认为较好的是CRNN)。代码实现是参考算法提出者的pytorch,python3版本的crnn实现。因为python版本的迭代,导致代码重使用比较难,其中涉及到ctc,python编码,中文数据集,如何将模型finetune到自己的应用场景上种种问题。实现的深度学习框架是pytorch,虽然TensorFlow也可以,但是比较多坑。其实是什么框架实现的都没关系,现在语法都是比较简单,看懂不难!

因为自己已经踩了很多坑,也填好了这些坑,就将自己填好的项目贡献给大家!

这次分享的是文本识别算法CRNN,具体的内容我就不涉及了,这篇文章主要是做算法代码的实现(参考原作者),建议大家研读算法一定要看作者发的Paper! CRNN论文地址:http://arxiv.org/abs/1507.05717(作者是华中科技大学的老师)

先放一些效果图,利用360万的中文数据训练集,最后可以finetune到97.7%的验证准确率,训练好的模型在train_models文件夹

第一、二张图片是最近修改的一个demo,第三、四张图是CTPN算法和CRNN的结合,可以将图片上的任何文字信息提取。因为CTPN要求的环境比较复杂,所以这次只放出CRNN的代码,因为CRNN实现环境比较简单。

现在开始介绍代码:

代码的实现必须是Linux环境(因为涉及到warp-ctc的安装,最好是Ubuntu16.04,能跳的坑我基本都填了)

1. Warp-ctc安装

首先得安装warp-ctc https://github.com/SeanNaren/Warp-ctc,这是pytorch版本的ctc实现(计算序列loss,具体看论文),安装方法按照作者的步骤即可,如果遇到问题可以私聊我。我是在Ubuntu16.04安装的,并没有太大问题,但是在17.04就遇到很多问题,所以最好用Ubuntu16.04作为代码实现环境。

2. 测试

安装好ctc后,直接运行终端输入 python3 test.py 试下效果,测试图片在test_images文件夹下。

3. 训练

正确的训练效果如图。

训练之前首先制作数据集,因为360万的中文数据集制作成lmdb格式的数据有十几G,就没直接放到Github中。

对于数据集我想说明一下,在文字识别领域有比较多的识别场景,例如场景文本识别,比较正规的图片信息识别,这些不同的应用场景需要对应不同的数据集训练,这次我自己应用到的场景比较正规的字体识别,所以这个训练集不一定能够用到所有场景,但也确实提供了一个不错数据集资源!还有就是训练集最好是具有语义信息,如果只是将文字随机的组合生成图片作为训练集,模型收敛会更慢并且准确率受限!

下图是部分训练集

(这个数据是在Github中找到的,暂时没找到他的地址,很感谢作者的奉献!)

数据集是随机选取定长的字数,经过模糊、倾斜、颜色变化等操作之后生成的,比较具有一般性,能很好地提升模型的Robust。

下载好数据集之后如果解压出错,不完整,可以用好压进行修复。

接下来是制作lmdb格式的数据。

图片与之对应的标签我链接:https://pan.baidu.com/s/1jfAKQVjD-SMJSffOwGhh8A 密码:u7bo,只需要将下载好的数据集放到lmdb文件中,根据情况修改to_lmdb.py中的文件名 运行该py程序就可以制作lmdb格式的数据!

制作好数据集之后将它放到lmdb_dataset文件夹中调出终端:

python3 crnn_main.py --train_root 训练数据集路径 --val_root 验证集路径 --cuda (如果有cuda加速可选)

大概流程就是这样了,最主要的还是自己看待自己琢磨!

(不定长识别是将训练集图片的放缩feed到神经网络中的尺寸应用到测试中,test.py已经标注!)

(如果有帮助到你,可以在Github给我个star!)

--------------------- 本文来自 Sierkinhane 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Sierkinhane/article/details/82857572?utm_source=copy

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python字符识别_crnn(基于pytorch、python3) 实现不定长中文字符识别 的相关文章

  • python连接sqlsever_使用Python连接到Microsoft SQL Server

    我试图通过python连接到SQL以在Microsoft SQL服务器上的某些SQL数据库上运行一些查询 从我的在线研究和在这个论坛上 最有前途的图书馆似乎是pyodbc 所以我做了以下代码 import pyodbc conn pyodb
  • 【C#学习笔记】Hello World

    using System namespace ConsoleApplication class Program static void Main string args Console Write Hello World Console R
  • Class.forName()用法详解

    一 CLASS类概念 Class也是一个Java类 保存的是与之对应Java类的meta信息 元信息 用来描述这个类的结构 比如描述一个类有哪些成员 有哪些方法等 一般在反射中使用 详细解释 Java 源程序 java 文件 在经过 Jav
  • mysql 查询不出结果_mysql 执行查询SQL 一直执行不出结果

    今天执行一个mysql 语句 一直在 执行 执行了5分钟了 还是没有出来结果 每个组织下包括 同级或者下级的 注册店铺数 查询 历史每一天的每个组织下的当天存在的门店数 select dt time startDate o brand id
  • Spring Cloud 序列化和反序列化过程定制(Jackson)

    现在都是基于Spring Cloud Feign进行微服务的调用 并且序列化的过程都封装完成的 只是自己可以定制序列化的方式 但是为了调用的时候能方便的找到问题所在等 基本都会使用json Jackson等 方式的序列化 虽然性能比较差 但
  • 学习笔记-弗洛伊德算法

    弗洛伊德算法解决最短路径问题 弗洛伊德算法和迪杰斯特拉算法都可以求解最短路径的问题 但区别是迪杰斯特拉会求出某个顶点到其他顶点的最短路径 而弗洛伊德算法会求出各个顶点到各个顶点的最短路径 最终结果采用一个二维表表示 而迪杰斯特拉算法只需要用
  • 文件读写的并发操作分析

    前言 涉及到多进程 线程间对文件的并发读写 首先说明一下比较常见的多进程读写方法是在保证数据不混乱的前提下 让某一个进程专门负责写该文件 其它进程负责往该进程发消息 通常在日志系统中 开启一个专门的进程 线程进行文件的写操作 其他进程 线程
  • Windows下用pip安装lib时报错的简单解决思路

    今天在Windows下用pip尝试安装Python爬虫库Scrapy 但是安装的时候报错 不过看命令行里也能运行scrapy命令 以为没问题 结果写了个简单爬虫 不停地报各种错 怀疑可能是这个系统中的pip版本问题 想了想 可以先重装pip
  • 操作系统中的硬链接和符号链接的不同

    硬链接和符号链接 这里没有介绍它们的功能和优点缺点 太多博客已经写过了 主要是解释了它们的原理 出现硬链接和符号链接的原因 我们需要共享文件 如果一个共享文件同时出现在属于不同用户的不同目录下 工作起来就会很方便 但是 怎么解决不同用户下对
  • 在未来的十年无疑将是刷脸支付的世界

    在未来的十年 交易场景的闭环 无疑将是刷脸支付的世界 最近比较热的词就是 刷脸支付 相对扫码支付 刷脸支付的方式更加安全 更加便捷 支付宝和微信同时推出刷脸支付 微信叫 青蛙 用户只需站在屏幕前 输入支付金额即可完成刷脸支付 按住屏幕下方的
  • vue项目性能优化详解汇总

    提起性能优化 很多人眼前浮现的面试经验是不是历历在目呢 反正 性能优化在我看来他永远是前端领域的热度之王 先说一下性能优化的方案 一 基础优化 代码以及编码规范 1 v if 和 v show 区分使用场景 v if false时不渲染DO
  • python输入姓名_Python基础篇--输入与输出

    在任何语言中 输入和输出都是代码最基础的开始 so 先来聊一聊输入和输出 输出 在python中 我们一般用print 输出 在括号里输入你想输出的信息 用引号包裹起来 单双三都可以 例如我们来输出一个 hello python gt gt
  • 【endnote】利用endnote批量修改参考文献格式

    1 情况描述 本来是在word中用交叉引用插入了参考文献 没有用endnote 但是格式没有统一 现在需要把全部参考文献统一成gb7714的格式 大概三百多篇 2 方法 1 在谷歌学术中挨个搜索参考文献 点击引用 点击 endnote 下载
  • Ubuntu14.04桥接网络设置与SSH登陆

    操作系统 Unbuntu14 04 虚拟机 VMware10 一 网络设置 1 设置vmware Bridge Protocol 本地链接 gt 属性 gt vmware Bridge Protocol打钩 2 然后主机设定静态ip 如果已
  • Matlab学习6-图像处理之直方图处理、灰度变换

    1 直方图均衡化 代码 直方图均衡化 img imread img rice png 显示 subplot 2 2 1 imshow img xlabel 原图 subplot 2 2 2 imhist img xlabel 原图的灰度直方
  • qt中漂亮的几款 qss 样式

    Qt中漂亮的几款QSS Shared QStackedWidget QLabel QPushButton QRadioButton QCheckBox QGroupBox QStatusBar QToolButton QComboBox Q
  • 傅里叶变换和小波分析

    无论是傅立叶变换还是小波变换 其实质都是一样的 既 将信号在时间域和频率域之间相互转换 从看似复杂的数据中找出一些直观的信息 再对它进行分析 由于信号往往在频域有比在时域更加简单和直观的特性 所以 大部分信号分析的工作是在频域中进行的 音乐
  • 【嵌入式】STM32基于片内flash进行数据读取和音频播放

    目录 一 片内FLASH的认识 二 如何对闪存进行读取 编程和擦除 三 基于flash的数据提取 项目创建 电路连接 调试 四 基于flash的提示音播放 五 实验心得 六 参考链接 一 片内FLASH的认识 不同型号的 STM32 其 F
  • phpStorm MarkDown插件下载

    phpStorm MarkDown插件下载 打开设置 找到Plugins Browse Repositories 搜索MarkDown Navigator 然后就可以正常查看 md 文件了 原文链接 https blog csdn net

随机推荐

  • element-ui table中使用type=‘selection‘实现多选、禁用的问题总结

    问题1 在表格中使用type selection 实现多选 但表头中用label无法添加全选字样 解决方法 使用css伪类元素添加 el table header has gutter tr el table column selectio
  • C++设计模式——观察者模式(Observer Pattern)

    C 设计模式 观察者模式 Observer Pattern 微信公众号 幼儿园的学霸 目录 文章目录 C 设计模式 观察者模式 Observer Pattern 目录 前言 定义 代码示例 总结 观察者模式和中介模式 优缺点 适用场景及应用
  • 计算机管理 服务无响应,如何解决系统服务没有及时响应启动 ?

    原标题 如何解决系统服务没有及时响应启动 最近有位朋友在使用电脑的时候 遇到了Windows无法启动服务错误 1053 服务没有及时响应启动或控制请求RRS feed的情况 不知道怎么回事 其实 这种情况原因比较多 比如说电脑不正确的超时设
  • python机器学习基础04——sklearn之朴素贝叶斯

    文章目录 朴素贝叶斯算法 高斯模型 多项式模型 朴素贝叶斯算法 相关重点处 https blog csdn net xiaoyoupei article details 122641753 贝叶斯思想 其实就是计算出条件概率 也就是某条件情
  • 2.5.9 构架虚拟Fiber Channel (vFC)

    最后更新2021 07 30 架构虚拟FC比虚拟scsi更简单 但有一些额外的要求 主要的需求包括 使用vFC的分区只支持AIX v5 3 TL10 v6 1 TL2或者SUSE Linux Enterprise Server 11以后版本
  • 判断一个对象是否有某一个属性

    如果我们要检测xiaoming是否拥有某一属性 可以用in操作符 var xiaoming name 小明 birth 1990 school No 1 Middle School height 1 70 weight 65 score n
  • 关于poc的查找

    1 已知漏洞cve号 1 github https github com 2 twitter https twitter com home 3 直接浏览器搜索 google 百度 4 微信搜索 2 批量找poc 1 发现者3号有github
  • 爬虫:从入门到入狱,进去一起做兄弟

    从入门到入狱 中国爬虫违法违规案例汇总 1 一 什么是爬虫 二 爬虫的分类 搜索引擎 百度 谷歌 数据采集 天眼查 企查查 薅羊毛 抢票机器人 秒杀软件 比价软件 微博僵尸粉 三 爬虫与反爬虫 1 君子协议 robots txt www b
  • Chrome浏览器禁用更新

    操作步骤 我的电脑 进入目录 C Windows System32 drivers etc 修改hosts文件 在末尾添加 127 0 0 1 update googleapis com 保存并退出 按win r 快捷键 输入cmd打开命令
  • spring-mvc的重定向和转发

    重定向和转发 servlet的方法 Controller public class ResultGo 在页面上打印 RequestMapping result t1 public void test1 HttpServletRequest
  • 终于弄懂tf.reduce_sum()函数和tf.reduce_mean()函数

    参考博客 1 https www zhihu com question 51325408 answer 125426642 2 https www w3cschool cn tensorflow python tensorflow pyth
  • typescript 提示 Object is possibly null

    Object is possibly null 对象可能是null 分析 localStorage getItem SET HISTORY KEY 这个值有可能为空 所以再执行getItem就会报错此刻对象可能为空 解决 联合类型 把nul
  • linux单进程最大内存,限制单个Linux进程的内存使用量

    我正在运行pdftoppm将用户提供的PDF转换为300DPI图像 这非常有用 除非用户提供的页面大小非常大 pdftoppm将分配足够的内存来在内存中保存该大小的300DPI图像 对于100英寸的方形页面 每像素100 300 100 3
  • 关于Postman无法显示中文的解决方案(翻译)

    在使用Postman时很多人因为界面是纯英文的感到很头疼 会面临不知道什么意思及界面看不懂的情况 于是出现了需要将界面汉化翻译过来的需求 但从实际工作经验来讲 个人还是比较喜欢看英文界面的 可能也是看习惯了导致的吧 本文以两种方式帮助读者理
  • FPGA虚拟时钟约束详解

    FPGA虚拟时钟约束详解 在FPGA设计中 时钟是一个至关重要的因素 为了确保时序分析的准确性 并满足特定应用对时钟精度的要求 我们需要通过时钟约束来对FPGA设计进行优化和配置 本文将详细介绍FPGA虚拟时钟约束的原理与实现方法 一 什么
  • 2023,软件测试人的未来在哪里?

    2023年 IT行业出现空前的萧条 首先是年初一开始各大厂像着了魔似的不约而同的纷纷裁员 降薪 奖金包缩水 随之而来的是需求萎缩 HC减少或封锁等等 而有幸未被列入裁员名单的在职人员 庆幸之余也心有余悸 伴随着恐慌 说不定哪天裁员就轮到了自
  • Cocos2d C++与lua互相调用

    参考文章 cocos2dx之Lua调用C 与 cocos2dx之C 调用Lua 感谢 乐逍遥Jun的参考 我是用的是 3 13版本 创建一个 lua版本的工程 我的工程名称是 TestLua 一 lua 调用c 1 编写一个 ini文件 路
  • 自驱力超强的羊驼?斯坦福微调LLaMa

    大型 指令调优 语言模型在新任务上展现了Zero shot的卓越能力 但严重依赖于人类编写的指令数据 而这些数据在数量 多样性和创造性方面都是有限的 斯坦福科研人员引入了self instruction框架 提高指令遵循能力来自我迭代进化
  • 利用MATLAB做一维CNN分类 问题及解决方法

    利用MATLAB做一维数据的CNN分类 问题及解决方法 我在做一维CNN分类时参考了知乎凉拌西红柿答主的程序示例 根据其代码改编实现了CNN分类 其中遇到的问题与解决方法总结如下 1 数据维度转换问题 for i 1 1 3000 for
  • python字符识别_crnn(基于pytorch、python3) 实现不定长中文字符识别

    在六七月份参加了一个比赛 做的项目是提取图片中的文字信息 首先是接触了一些文本检测算法 如CTPN East 后研究了文本识别算法 我认为较好的是CRNN 代码实现是参考算法提出者的pytorch python3版本的crnn实现 因为py