利用Tesseract来识别验证码

概述

我们在写爬虫脚本时,经常会遇到验证码阻碍我们的道路。特别是这个网站的资料又非常重要,所以不得不研究一下怎么让机器自动识别。对于一些不太复杂的验证码,我们可以直接用现成的开源引擎Tesseract识别。

如下面的图片,数字还是很清晰,也没有什么偏转,字母粘连也不是很严重。在实际测试中,基本50%以上的验证码可以一次通过。

verif


Tesseract就是开源引擎里的执牛耳项目。起源于惠普实验室并在1984-1994年间大力发展的Tesseract,曾一度可与商业OCR软件比肩。2005年,HP在GoogleCode上将Tesseract开源,2006年开始由谷歌赞助,并由Ray Smith负责该项目。

Tesseract支持的语言非常多,每种语言有相应的语言包可以下载。但是从中文的情况来看,貌似效果不是太好,识别率几乎不可商用。相关论文中提到中文的准确率在95%以上,不知道实际的测试样本是怎么样的。英文准确率还不错,可以直接拿来用。这也是为什么这篇文章只能用于简单的中英文验证码。


Tesseract 环境搭建

在Ubuntu下,你可以直接用 sudo apt-get install tesseract 来安装。也可以按照这里的步骤编译安装。【tesseract compiling】语言包一般放在 /usr/local/share/tessdata 或者 /usr/share/tessdata 中。比如 eng.traineddata 或者 chi-sim.traineddata,也可以到这里下载 【Tessdata】


预处理

下下来的图片一般是不能直接拿来识别的,因为引擎只认识灰度图。所以我们要先预处理一下下。

转换格式

imagemagick 转换图片格式 sudo apt-get install imagemagick 如要把一张 vcode.gif 的图片转化成 png,则 mogrify -format png vcode.gif 这里 mogrifyconvert 命令其实是一样的,只不过 mogrify 会覆盖源文件罢了。(文档里是这么说的,我也不知道为啥要有两个命令,捂脸~)

但是我们仍然得到的是彩色图片,其实 imagemagick 还可以做更多,就像命令行的 photoshop 一样,参考他的文档,http://www.imagemagick.org/script/mogrify.php


OpenCV

但是介于对opencv很了解,我们这里为了方便,直接用opencv来处理后面的预处理工作。opencv要做的有三件事,转化成灰度图,二值化,裁剪。直接贴代码吧!

#!/usr/bin/env python
# coding=utf-8
import cv2
import sys

if __name__ == '__main__':
    img = cv2.imread(sys.argv[1], 0)    # 读取参数作为文件名
    adaptive = cv2.adaptiveThreshold(img, 255, 
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)   # 自适应二值化
    adaptive = adaptive[3:-3, 3:-3]     # 去掉周围的一点点边界
    cv2.imwrite('test.png', adaptive)   # 存起来

识别

用命令行 tesseract test.png output 执行,结果会放在 output.txt 的文本中。当然,介于我们用了这么多工具才能识别出来,最好用 shell 来组织一下,才能批量化工作。 各位读者根据自己的需求取用吧!

参考资料:
1. Tesseract 在 googlecode上的项目,已停止更新,有一些资料,但是还是建议转github
【http://tesseract-ocr.googlecode.com/】
2. Tesseract 在 GITHUB 上的项目
【https://github.com/tesseract-ocr/tesseract】
3. 如何编译自己的Tesseract项目
【https://github.com/tesseract-ocr/tesseract/wiki/Compiling】
4. 各种语言的训练包,直接拿来用
【https://github.com/tesseract-ocr/tessdata】
5. 现在Tesseract负责人Ray Smith 的介绍论文
【https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf】
6. wiki上的简介
【https://en.wikipedia.org/wiki/Tesseract_(software)】

你可能感兴趣的:(机器学习)