最近研究了一下验证码识别的技术,基本上都是在做图像的识别,具体一点来说就是文字的识别。比较流行的就是使用Google的Tesseract OCR引擎来做支撑,识别图像中的文字。本文主要讲解如何利用Tesseract OCR识别最简单的验证码和文章内容。
安装Tesseract OCR引擎
关于Windows下如何安装Tesseract OCR引擎的文章实在是太多了,我就不赘述了,这里重点讲一下如何在macOS中安装Tesseract OCR引擎,答案是Homebrew
或MacPorts
。
Homebrew安装
使用Homebrew安装只需要运行以下代码即可:
1 | brew install tesseract |
MacPorts安装
使用MacPorts安装只需要运行一下代码即可:
1 | sudo port install tesseract |
安装PIL和Pytesseract
需要安装Python3的图像处理库和Tesseract包装类。
1 | pip3 install Pillow |
安装完毕以后基本上就可以用来识别一些简单的图片验证码啦,还有一些比较清晰的文字。
简单验证码识别实例
我们以一些简单的图片为例演示一下如何使用Python3来识别验证码或图片文字。以下面的一个验证码为例:
可以通过Pytersseract来识别:
1 | import pytesseract |
结果如下:
1 | 7025 |
另外在data
目录下我们还可以看到一张二值化后的图片:
能够非常准确滴将这种简单的验证码识别出来。
标准文字图片实例
这一节我们以CNN网站上的新闻文字为例,截取了一张CNN的新闻文字图片,如下:
我们看一下它的识别效果如何?看一下运行结果:
1 | The President‘s own lies and distortions, which are key |
基本上没有什么错误地识别出来了。
关于Tesseract OCR其它语言包以及复杂验证码问题
本文主要讨论的是如何利用Tesseract OCR引擎解决简单验证码和图片文字识别的问题。但是验证码可能会比较复杂,比如说加了干扰线等等。另外,Tesseract OCR用来识别中文会如何?这一些问题都是值得好好研究的。
Tesseract OCR其它语言包的问题
在这个页面下可以看到很全的语言包信息。https://github.com/tesseract-ocr/tesseract/wiki/Data-Files
大家可以下载对应的包去处理对应的文字信息。关于如何使用这些包,我以中文为例演示一下,首先在刚刚的网址下载一个中文的包,我们可以先看一下自己的tesseract-ocr版本是多少?
1 | $ tesseract --version |
所以,我们下载3.05版本的中文包,点我下载。
把这个包加载到一个名叫lang
的目录下,名字可以随便定,但是lang
这个包要和我们的代码在同一个目录。一下面这幅图为例:
1 | import pytesseract |
结果如下:
1 | 这是习近立总书记在新进口央委员会的委员` 候补委员和省部级三要领导二部学 |
可以看到中文的效果不是很理想,后面再进一步研究如何改进这种情况。
复杂验证码的问题
复杂验证码的情况比如字体变形了,或者是字体上加了很多干扰线,这种情况下仅仅tesseract-ocr是做不到的。需要前期做大量的预处理,比如去噪,二值化等等,这个也需要后面再进一步研究研究。面对更复杂的验证码就有可能需要使用机器学习的方式了。
总结
本文主要是介绍了如何使用Tesseract-OCR引擎并结合Python3来实现对简单验证码和普通文本的识别工作。目前这个引擎对英文的识别度非常理想,基本上可以用作商业用途了,而针对中文的识别效果则非常不理想,基本上不怎么可用,后面需要针对这个问题进一步研究,改进相关的模型和研究方法。