训练Tesseract

大多数其他的验证码都是比较简单的。例如,流行的 PHP 内容管理系统 Drupal 有一个著 名的验证码模块(https://www.drupal.org/project/captcha),可以生成不同难度的验证码。

那么与其他验证码相比,究竟是什么让这个验证码更容易被人类和机器读懂呢?

  • 字母没有相互叠加在一起,在水平方向上也没有彼此交叉。也就是说,可以在每一个字 母外面画一个方框,而不会重叠在一起。
  • 图片没有背景色、线条或其他对 OCR 程序产生干扰的噪点。
  • 虽然不能因一个图片下定论,但是这个验证码用的字体种类很少,而且用的是 sans-serif 字体(像“4”和“M”)和一种手写形式的字体(像“m”“C”和“3”)。
  • 白色背景色与深色字母之间的对比度很高。

这个验证码只做了一点点改变,就让 OCR 程序很难识别。

  • 字母和数据都使用了,这会增加待搜索字符的数量。
  • 字母随机的倾斜程度会迷惑 OCR 软件,但是人类还是很容易识别的。
  • 那个比较陌生的手写字体很有挑战性,在“C”和“3”里面还有额外的线条。另外这 个非常小的小写“m”,计算机需要进行额外的训练才能识别。 用下面的代码运行 Tesseract 识别图片:

tesseract captchaExample.png output

我们得到的结果 output.txt 是: 4N\,,,C<3

训练Tesseract

要训练 Tesseract 识别一种文字,无论是晦涩难懂的字体还是验证码,你都需要向 Tesseract 提供每个字符不同形式的样本。

做这个枯燥的工作可能要花好几个小时的时间,你可能更想用这点儿时间找个好看的视频 或电影看看。首先要把大量的验证码样本下载到一个文件夹里。

下载的样本数量由验证码 的复杂程度决定;我在训练集里一共放了 100 个样本(一共 500 个字符,平均每个字符 8 个样本;a~z 大小写字母加 0~9 数字,一共 62 个字符),应该足够训练的了。

提示:建议使用验证码的真实结果给每个样本文件命名(即4MmC3.jpg)。 这样可以帮你 一次性对大量的文件进行快速检查——你可以先把图片调成缩略图模式,然后通过文件名 对比不同的图片。这样在后面的步骤中进行训练效果的检查也会很方便。

第二步是准确地告诉 Tesseract 一张图片中的每个字符是什么,以及每个字符的具体位置。 这里需要创建一些矩形定位文件(box file),一个验证码图片生成一个矩形定位文件。一 个图片的矩形定位文件如下所示:

4 15 26 33 55 0M 38 13 67 45 0m 79 15 101 26 0C 111 33 136 60 03 147 17 176 45 0

第一列符号是图片中的每个字符,后面的 4 个数字分别是包围这个字符的最小矩形的坐标 (图片左下角是原点 (0,0),4 个数字分别对应每个字符的左下角 x 坐标、左下角 y 坐标、右上角 x 坐标和右上角 y 坐标),最后一个数字“0”表示图片样本的编号。

显然,手工创建这些图片矩形定位文件很无聊,不过有一些工具可以帮你完成。我很喜欢 在线工具 Tesseract OCR Chopper(http://pp19dd.com/tesseract-ocr-chopper/),因为它不需要 安装,也没有其他依赖,只要有浏览器就可以运行,而且用法很简单:上传图片,如果要 增加新矩形就单击“add”按钮,还可以根据需要调整矩形的尺寸,最后把新生成的矩形 定位文件复制到一个新文件里就可以了。

矩形定位文件必须保存在一个 .box 后缀的文本文件中。和图片文件一样,文本文件也是用 验证码的实际结果命名(例如,4MmC3.box)。另外,这样便于检查 .box 文件的内容和文件的名称,而且按文件名对目录中的文件排序之后,就可以让 .box 文件与对应的图片文件 的实际结果进行对比。

你还需要创建大约 100 个 .box 文件来保证你有足够的训练数据。因为 Tesseract 会忽略那 些不能读取的文件,所以建议你尽量多做一些矩形定位文件,以保证训练足够充分。如果 你觉得训练的 OCR 结果没有达到你的目标,或者 Tesseract 识别某些字符时总是出错,多 创建一些训练数据然后重新训练将是一个不错的改进方法。

创建完满载 .box 文件和图片文件的数据文件夹之后,在做进一步分析之前最好备份一下这 个文件夹。虽然在数据上运行训练程序不太可能删除任何数据,但是创建 .box 文件用了你 好几个小时的时间,来之不易,稳妥一点儿总没错。此外,能够抓取一个满是编译数据的 混乱目录,然后再尝试一次,总是好的。

前面的内容只是对 Tesseract 库强大的字体训练和识别能力的一个简略概述。如果你对 Tesseract 的其他训练方法感兴趣,甚至打算建立自己的验证码训练文件库,或者想和全世 界的 Tesseract 爱好者分享自己对一种新字体的识别成果,推荐阅读 Tesseract 的文档:https://github.com/tesseract-ocr/tesseract/wiki,加油!

训练Tesseract相关推荐

  1. Python机器学习:训练Tesseract

    训练Tesseract 大多数其他的验证码都是比较简单的.例如,流行的 PHP 内容管理系统 Drupal 有一个著 名的验证码模块(https://www.drupal.org/project/ca ...

  2. python爬虫学习笔记 3.9 (了解参考:训练Tesseract)

    python爬虫学习笔记 3.9 (了解参考:训练Tesseract) 参考阅读:训练Tesseract 要使用 Tesseract 的功能,比如后面的示例中训练程序识别字母,要先在系统中设置一 个新 ...

  3. 如何训练Tesseract 4.0

    原文:https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00 tesseract 4.0之后开始使用机器学习来进行 ...

  4. Google开源OCR项目Tesseract训练(自己训练的记录,未成功)

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 本文训练Tesseract用的方法主要参考文章  ...

  5. Windows下Tesseract训练音符识别

    Windows下Tesseract训练音符识别 背景 开局一张图:现在有这么一个需求,要将数字简谱中的数字带点的内容识别出来做进一步的处理,比如 6 1 6 641 533 . . ... 识别成 F ...

  6. Tesseract字体识别 及 jTessBoxEditor工具进行训练 及 Java API实现字体识别

    Tesseract程序识别 程序源码 tesseract项目的github地址 (Linux下可通过包管理器下载安装) 基本使用 注意点:1,图片文件类型为tiff/tif,2,output是输出文件 ...

  7. Tesseract识别图片提取文字字库训练

    文中测试了3.0和4.0两个版本.发现3.0识别效率不准确,需要训练词库.4.0识别效率就比较高了,而且支持结果生成pdf.txt等格式.所以推荐使用4.0版本. 这个工具可以用在爬虫的时候获取验证码 ...

  8. tesseract简单介绍和训练

    Python--图片文字识别--Tesseract 1.tesseract介绍 Tesseract,一款由HP实验室开发由Google维护的开源OCR(Optical Character Recogn ...

  9. 机器视觉和Tesseract

    机器视觉 从 Google 的无人驾驶汽车到可以识别假钞的自动售卖机,机器视觉一直都是一个应用广 泛且具有深远的影响和雄伟的愿景的领域. 我们将重点介绍机器视觉的一个分支:文字识别,介绍如何用一些 P ...

最新文章

  1. LeetCode实战:除自身以外数组的乘积
  2. 线段树 + 树形换根 + dfs序 ---- 离线启发式求解 (有点像树上启发式合并答案) F. Nearest Leaf
  3. leetcode算法题--和为s的两个数字
  4. 网站自动登录功能的设计
  5. html字体渐变颜色的设置颜色代码,使用CSS3实现字体颜色渐变的实现
  6. Bitmap与IplImage之间的转换
  7. 电场 大学_人工电场优化算法
  8. zookeeper专题:zookeeper集群搭建和客户端连接
  9. Fantageek翻译系列之《使用Autolayout显示变化高度的UITableViewCell》
  10. skyeye + ulibc + busybox + linux kernel
  11. selenium的运行时异常
  12. GitHub上不错的Android开源项目(二)
  13. python学习之面向对象学习进阶
  14. 高亮显示搜索的关键词(二)
  15. POJ 3070 Fibonacci(矩阵高速功率)
  16. 第三季-第14课-有名管道通讯编程
  17. Android实现计算器布局(约束布局
  18. 通过CuteFTP用VBScript使用SFTP,实现Win与Linux的文件传输
  19. 银行卡收单____商户费率_代理商分润
  20. 入侵防御系统 IPS

热门文章

  1. ContOS网络连接及简单的ssh Xshell连接!
  2. (总结5)H5中新增的功能性事件
  3. C++ 为什么要用覆盖(学习笔记)
  4. 一个Web开发的客户端基础技术测试Demo
  5. 浅谈V8引擎中的垃圾回收机制
  6. 容器编排技术 -- Kubernetes 为 Namespace 配置Pod配额
  7. ORA-19809: limit exceeded for recovery files问题解决
  8. 使用Docker运行oracle11g企业版和简单配置
  9. 启动/关闭数据库、实例及服务
  10. H5新增特性之语义化标签