0
点赞
收藏
分享

微信扫一扫

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)


文章目录

  • ​​tesseract库介绍​​
  • ​​tesseract的安装​​
  • ​​windows下安装​​
  • ​​安装tesseract​​
  • ​​下载并配置训练数据​​
  • ​​linux下安装​​
  • ​​安装tesseract​​
  • ​​mac下安装​​
  • ​​安装tesseract​​
  • ​​下载训练数据​​
  • ​​在命令行中使用tesseract​​
  • ​​纯英文识别​​
  • ​​中文识别​​
  • ​​通过Python代码来识别图片验证码​​
  • ​​安装依赖​​
  • ​​简单的使用​​
  • ​​识别拉钩网的图形验证码​​
  • ​​总结​​
  • ​​粉丝专属福利​​

tesseract库介绍

能提取图片中的文字的技术,将图片翻译成文字的技术一般被称为光学文字识别(Optical Character Recognition) 简写为OCR。而tesseract是一个OCR库,由谷歌赞助,是一个比较优秀的图像识别开源库。它具有很高的识别度,也具有很高的灵活性,可以通过训练识别任何字体。
​​​tesseract库的官方文档​​

tesseract的安装

windows下安装

安装tesseract

windows下装装tesseract库只需要在 ​​https://sourceforge.net/projects/tesseract-ocr-alt/files/​​ 下载名为 tesseract-ocr-setup-3.02.02.exe 的可执行文件。然后,一直点击下一步进行安装,不过需要注意的是安装的路径要放在不需要权限的英文路径下。

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_爬虫


安装完成之后就是设置环境变量了。在Windows 下把tesseract.exe所在的路径添加到PATH环境变量中。

下载并配置训练数据

默认情况下tesseract只支持英文的识别,如果要想支持中文的识别的话,需要配置中文的训练数据 chi_sim.traineddata。文件的下载地址是:​​https://github.com/tesseract-ocr/tessdata​​

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_验证码_02


下载好之后就是将数据文件配置到环境变量中。就是在环境变量中新建一个环境变量比如这样: ​​TESSDATA_PREFIX=D:\teseractdata​​ ,这里的​​D:\teseractdata​​ 需要改成你实际的数据文件的地址。

linux下安装

安装tesseract

在Ubuntu系统中可以通过apt包管理工具进行安装

sudo apt install

安装完成之后就已经配置好了环境变量。

mac下安装

安装tesseract

在mac下可以通过Homebrew来进行安装

brew install

安装完成之后就已经配置好了环境变量。

下载训练数据

数据文件可以通过下面

brew install

命令下载全部的训练数据,下载完成之后的数据文件放在了​​/usr/local/share/tessdata/​​ 目录下。当然,你可以只下载chi_sim.traineddata 训练数据。

在命令行中使用tesseract

安装好tesseract库之后,我们就可以在命令行中使用tesseract库了。这里我找了两个图片进行测试。

纯英文识别

这里我在国外技术网上上截取了一个图片。将图片命名为 test1.png

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_java_03


我们可以通过tesseract来进行识别。首先,跳转到图片所在的目录,然后输入命令:​​tesseract test1.png test1​​。最后一个test1表示识别后的文本的存放地址,不需要加后缀名。执行该命令之后,tesseract会在图片所在的目录下生成一个test1.txt的文本文件。

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_爬虫_04


识别的结果如下图所示:

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_爬虫_05

中文识别

识别包含中文的图片需要事先下载中文训练数据chi_sim.traineddata。在输入命令时需要指定语言是:chi_sim。同样的,这里我也截取了一个中文图片。将该图片命名为:csdn.png。

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_爬虫_06


同样的跳转到图片所在的目录,然后输入命令:​​tesseract csdn.png csdn -l chi_sim​​ 通过-l 来指定识别的语言。执行该命令之后会在图片所在的目录下生成一个名为csdn.txt的文本文件。识别的结果如下图所示:

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_java_07


查看tesseract的命令参数可以通过​​tesseract -h​​ 来进行查看

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_数据_08

通过Python代码来识别图片验证码

安装依赖

在Python代码中操作tesseract。需要安装一个库,叫做pytesseract。通过pip的方式即可安装:

pip install

并且,需要读取图片,需要借助一个第三方库叫做PIL。PIL库的详细使用方法参见此文 ❤️【Python从入门到精通】(二十六)用Python的PIL库(Pillow)处理图像真的得心应手❤️。通过pip的方式安装:

pip install

安装完成之后就可以愉快的使用tesseract库了。

简单的使用

这里还是以csdn.png图片为例进行说明。

from PIL import Image
import pytesseract
def main():
image = Image.open("test_png/csdn.png")
text = pytesseract.image_to_string(image,lang='chi_sim')
print(text)
if __name__ == '__main__':
main()

运行后的打印的结果是:

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_数据_09

识别拉钩网的图形验证码

拉钩网图片验证码的生成接口是:​​https://passport.lagou.com/vcode/create?from=register​​。直接调用该接口返回的是一个包含四位随机字母的图形验证码的图片。每调用一次会变一次。

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_python_10


这里通过urllib的request请求类的urlretrieve方法来请求图形验证码,该方法可以将请求结果直接保存为​​captcha.png​​ 图片。

from urllib.request import HTTPSHandler

from PIL import Image
import pytesseract
from urllib import request
import ssl

context = ssl._create_unverified_context()

def main():
captchaUrl = r'https://passport.lagou.com/vcode/create?from=register'
https_handler = HTTPSHandler(context=context)
opener = request.build_opener(https_handler)
opener.addheaders = [('User-agent',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36')]

request.install_opener(opener)
request.urlretrieve(captchaUrl, 'captcha.png')

image = Image.open("captcha.png")
image.show()
text = pytesseract.image_to_string(image)
print(text)

if __name__ == '__main__':
for i in range(10):
main()

运行十次的结果是:

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_数据_11


除个别的图形验证码识别不正确。其余的都识别正确了。

不过需要注意的是,针对有干扰线的图形验证码,比如下面这种。

如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)_数据_12


tesseract 是无能为力的,即不能识别包含干扰线的图形验证码。

总结

本文详细介绍了tesseract库的使用,整体来说tesseract库是一款优秀的OCR库。识别一些简单的图形验证码还是绰绰有余的。

粉丝专属福利

软考资料:​​实用软考资料​​

面试题:​​5G 的Java高频面试题​​

学习资料:​​50G的各类学习资料​​

并发编程:回复【并发编程】


举报

相关推荐

0 条评论