前面讲的都是对于标准字的识别,但对于验证码或者手写字体识别率就会非常低。为了让Tesseract识别自己的语言,可以通过训练语言库的方式来解决。下面通过一个识别手写字体的例子来了解Tesseract提供什么方式训练自己的语言库。

首先我们来看下未经过训练的Tesseract对接下来的这张图片的识别率。

待识别图片:

识别结果:

可以看出识别效果很不理想。下面训练手写字体的语言库,看看训练后的Tesseract识别效果如何。

为了训练语言库,我们需要两个工具,Tesseract和jTessBoxEditor。经过前面的介绍,Tesseract相信大家应该不陌生了,至于jTessBoxEditor的用途,后面用到时将会介绍。

训练步骤:

1.下载jTessBoxEditor,这个软件是java写的,所以使用前需要安装JDK。

2.准备几张手写字的图片,原则上是越多越好,然后通过“jTessBoxEditor->Tools->Merge TIFFS”来合并图片,因为jTessBoxEditor只能合并tiff格式的图片,所以如果不是这个格式的话请先转换一下。本例中我将合并下面两张图片作为训练样本,并保存为test.tif。

3.生成box文件。打开命令行工具,转到test.tif所在的目录,键入命令tesseract test.tif test batch.nochop makebox,将在该目录下生成test.box文件,它保存的是识别出来的每个字符以及各自的位置。当然这里面会有很多错误,我们可以通过jTessBoxEditor来修正,注意test.tif和test.box需要在同一个位置。

4.生成字符特征文件。在cmd中键入:tesseract test.tif test nobatch box.train,这一步将生成两个文件,test.tr(特征文件)和test.txt。

5.计算字符集(unicharset)。在cmd中键入:unicharset_extractor test.box,这一步产生字符集文件unicharset

6.聚集字符特征(inttemp、pffmtable、normproto)。命令:mftraining -F font_properties -U unicharset test.tr,其中font_properties需要自己创建,文件内容:<fontname><italic><bold><fixed><serif><fraktur>。

where<fontname>is a string naming the font (no spacesallowed!), and<italic>,<bold>, <fixed>, <serif> and <fraktur>are all simple 0 or 1 flags indicating whetherthe font has the named property。

这是我的font_properties内容:test 0 0 0 0 0,大概意思为普通标准字体。

根据上一步产生的字符集文件unicharset,来生成当前新语言的字符集文件mfunicharset。同时还会产生图形原型文件inttemp和每个字符所对应的字符特征数文件pffmtable。附带还会产生Microfeat文件,但是这个文件没啥用。

接下来使用命令cntraining test.tr,这一步产生字符形状正常化特征文件normproto。 到这里基本上所需的文件都形成了,下面就开始生成字典文件。

7.合并训练文件(*.traineddata)。此时在目录下应该生成若干个文件了,把unicharset,inttemp,normproto,pffmtable这四个文件加上前缀”testfont.“然后使用命令:combine_tessdata testfont.将其合并成一个字典文件,这时会生成如下结果:

必须确定的是第2、4、5、6行的数据不是-1,这样一个新的字典(testfont.traineddata)就算生成了。

下面通过训练出的字典来识别最开始识别的那张图片:

在这之前需要将testfont.traineddata放入tessdata文件夹中,然后在识别时选择语言testfont。

识别结果:

可以看出正确率明显提高了,这个例子中识别率达到了100%。

Tesseract学习(五)相关推荐

  1. vivado 亚稳态_【vivado学习五】时序分析

    想一千次,不如去做一次.华丽的跌倒,胜过无谓的徘徊. [vivado学习五]时序分析 典型的时序模型由发起寄存器.组合逻辑和捕获寄存器3部分组成,如图1所示形成了三条时钟路径:原时钟路径(Source ...

  2. C#多线程学习(五) 多线程的自动管理(定时器) (转载系列)——继续搜索引擎研究...

    Timer类:设置一个定时器,定时执行用户指定的函数.               定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 初始化一个Timer对象: Timer timer ...

  3. OpenCV与图像处理学习五——图像滤波与增强:线性、非线性滤波、直方图均衡化与Gamma变换

    OpenCV与图像处理学习五--图像滤波与增强:线性.非线性滤波.直方图均衡化与Gamma变换 三.图像滤波与增强 3.1 线性滤波 3.1.1 方框滤波 3.1.2 均值滤波 3.1.3 高斯滤波 ...

  4. PyTorch框架学习五——图像预处理transforms(一)

    PyTorch框架学习五--图像预处理transforms(一) 一.transforms运行机制 二.transforms的具体方法 1.裁剪 (1)随机裁剪:transforms.RandomCr ...

  5. Docker学习五:Docker 数据管理

    前言 本次学习来自于datawhale组队学习: 教程地址为: https://github.com/datawhalechina/team-learning-program/tree/master/ ...

  6. (转)MyBatis框架的学习(五)——一对一关联映射和一对多关联映射

    http://blog.csdn.net/yerenyuan_pku/article/details/71894172 在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中 ...

  7. 罗马音平假名片假名转换器_零基础日语萌新该如何学习五十音?

    在这里跟小伙伴们讲一下如何学习日语50音.五十音就像我们的二十六个字母一样.如果我们不能熟练地写和发音五十种音调,我们就无法很好地继续学习. 日语五十音图 https://sourl.cn/rMFhZ ...

  8. vector 插入_Java学习五分钟系列:对比Vector、ArrayList、LinkedList

    Java学习五分钟系列,目的是为让大家在短时间内搞清楚一项技术的概念.优缺点和适用场景,想要深入的了解,还需要投入更多的时间. Java的集合类,值得我们深入的学习,建议大家有时间的话,可以阅读一下源 ...

  9. [日语]学习“五十音”(读音篇)

    这回,我们开始学习"五十音",也就是清音的读音. 上回已经说过了"五十音"发音的规律,第一行是"a.i.u.e.o",下面每行都是根据第一行 ...

  10. Hbase深入学习(五) 命令及查看状态

    Hbase深入学习(五) ―― 命令及查看状态 HBase是Apache Hadoop中的一个子项目,Hbase依托于Hadoop的HDFS作为最基本存储基础单元,通过使用hadoop的DFS工具就可 ...

最新文章

  1. django-5-自定义模板过滤器及标签
  2. 【汇总篇】如何利用Excel高效地处理数据
  3. 七十六、React中的TodoList和拆分组件,组件之间的传值
  4. GDCM:gdcm::CompositeNetworkFunctions的测试程序
  5. Linux KVM 虚拟化技术
  6. 【Leetcode | 49】230. 二叉搜索树中第K小的元素
  7. 我对组件components 和 页面 views 的思考
  8. C++(STL):35---multimap容器
  9. 技术管理者必备管理模板
  10. 09. 慎重选择删除元素的方法
  11. 从TextBox的升级看VB6与VB2010的不同~
  12. 【刷题总结】二叉树前中后序遍历
  13. 感情箴言滴水藏海(二)
  14. Delphi中三种延时方法
  15. php站长统计,如何巧妙去除隐藏“站长统计”文字链接?
  16. 一文读懂自学机器学习的误区和陷阱(附学习资料)
  17. [Fourier]傅里叶级数中虚数部分j去了哪里
  18. 数据结构翻转课堂答疑实录——概述
  19. 【转】Robot Framework作者建议如何选择自动化测试框架
  20. tolua全教程-Chinar

热门文章

  1. 宁畅g40系列服务器发布,酷冷至尊MWE Gold V2 1050 让你的神机干劲十足
  2. 有效的数独 C++算法 leetcode36
  3. 常见面试题及解答|计算机网络
  4. android surface 平板,Surface体验:完胜Android平板 有望替代iPad
  5. 王者荣耀入门技能树-解答
  6. 国产加密实际运用:使用SM3加盐存储密码,并且使用SM2进行登录认证
  7. mysql(day03)
  8. 【BZOJ3653】谈笑风生 离线+树状数组+DFS序
  9. 2022 ICPC Gran Premio de Mexico 1ra Fecha (B、D、E、F)
  10. 一物一码(2): 一物一码之【红包那点事】