训练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,加油!

Python机器学习:训练Tesseract相关推荐

  1. python划分训练集和测试集_杨涛的Python机器学习3:单特征与多特征、训练集与测试集,杨桃...

    本人CSDN博客专栏:https://blog.csdn.net/yty_7 Github地址:https://github.com/yot777/ 单特征与多特征 在上一节标签和特征的示例中,我们使 ...

  2. python训练过程是什么_学了这么久,你知道Python机器学习全流程是怎样的么?

    今天呢,小编就带大家了解一下Python机器学习全流程 首先介绍一下机器学习的概念和地位,和其他的区别是? 机器学习的核心任务是? 机器学习的全流程是? 我们将上述流程拆解出来看: 1.需求来源是?需 ...

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

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

  4. python 训练识别验证码_用Python机器学习搞定验证码

    原标题:用Python机器学习搞定验证码 写爬虫有一个绕不过去的问题就是验证码,现在验证码分类大概有4种: 图像类 滑动类 点击类 语音类 今天先来看看图像类,这类验证码大多是数字.字母的组合,国内也 ...

  5. python机器学习 train_test_split()函数用法解析及示例 划分训练集和测试集 以鸢尾数据为例 入门级讲解

    文章目录 train_test_split()用法 获取数据 划分训练集和测试集 完整代码脚手架 train_test_split()用法 python机器学习中常用 train_test_split ...

  6. 杨桃的Python机器学习3——单特征与多特征、训练集与测试集

    本人CSDN博客专栏:https://blog.csdn.net/yty_7 Github地址:https://github.com/yot777/ 单特征与多特征 在上一节标签和特征的示例中,我们使 ...

  7. 入行AI,你需要一本Python机器学习入门

    ​ 目前机器学习红遍全球.男女老少都在学机器学习模型,分类器,神经网络和吴恩达.你也想成为一份子,但你该如何开始? 今天小编推荐这本<Python机器学习>教你快速入门. ​ 01什么是机 ...

  8. Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

    Python机器学习实践指南 目 录  第1章Python机器学习的生态系统 1  1.1 数据科学/机器学习的工作  流程 2  1.1.1 获取 2  1.1.2 检查和探索 2  1.1.3 清 ...

  9. 资源 | 吴恩达《机器学习训练秘籍》中文版58章节完整开源

    整理 | Jane 出品 | AI科技大本营(ID:rgznai100) 一年前,吴恩达老师的<Machine Learning Yearning>(机器学习训练秘籍)中文版正式发布,经过 ...

最新文章

  1. ubuntu服务器在虚拟机中的配置
  2. 【做题记录】AtCoder AGC做题记录
  3. (九十三)蓝牙的基本使用
  4. 麻瓜编程python爬虫微专业_网易微专业麻瓜编程Python Web开发工程师教程
  5. 数学计算机小论文范文,数学与生活论文范文
  6. matlab傅里叶反变换举例,matlab傅里叶正逆变换详细说明+图例
  7. java实现pdf转图片
  8. 华为服务器系统日志,服务器操作系统日志
  9. 微信企业号服务器搭建,微信企业号开发之如何建立连接
  10. ps如何把自己的图与样机结合_Ps如何套用样机图?
  11. 电子健康档案在国外的一些实践
  12. 想知道视频水印怎么去?推荐几个去视频水印的方法
  13. 兼容exe的linux系统,国产操作系统下想运行EXE?你何不虚拟个电脑系统出来
  14. Secure Socket Tunneling Protocol Service服务无法启动(win7)
  15. 与迭代次数有关的一种差值结构
  16. linux下的挂载点和分区是什么关系(详解挂载点)
  17. Kubernetes 之 二进制安装(二) 证书详解
  18. 定义一个类,并且在测试类中使用
  19. 发布产品并了解用户行为(1)
  20. 微信小程序跨域问题 post 403 Invalid CORS request 后台

热门文章

  1. ubuntu 修改时区、时间、同步网络时间、将时间写入硬件
  2. OpenCV 笔记(09)— 常用的数据结构和函数(Vec、Point、Scalar、Size、Rect、cvtColor)
  3. 利用exchangelib快速上手使用python发邮件
  4. 关于二叉树的层次遍历的花样(c++实现)
  5. line_profile逐行代码分析
  6. LeetCode简单题之最小绝对差
  7. LeetCode简单题之图像渲染
  8. 点击事件如何传递到Activity中
  9. PHP算法题:如何实现冒泡排序
  10. [JAVAEE] Thymeleaf 基本语法: 迭代循环