那么与其他验证码比较,究竟是什么让这个验证码更随意马虎被人类和机器读懂呢?
字母没有相互叠加在一起,在水平方向上也没有彼此交叉。也便是说,可以在每一个字 母表面画一个方框,而不会重叠在一起。图片没有背景色、线条或其他对 OCR 程序产生滋扰的噪点。虽然不能因一个图片下定论,但是这个验证码用的字体种类很少,而且用的是 sans-serif 字体(像“4”和“M”)和一种手写形式的字体(像“m”“C”和“3”)。白色背景色与深色字母之间的比拟度很高。这个验证码只做了一点点改变,就让 OCR 程序很难识别。
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 0 M 38 13 67 45 0 m 79 15 101 26 0 C 111 33 136 60 0 3 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 文件用了你 好几个小时的韶光,来之不易,稳妥一点儿总没错。此外,能够抓取一个满是编译数据的 混乱目录,然后再考试测验一次,总是好的。