爬虫(14)图形验证码识别tesseract工具

文章目录

  • 图形识别
  • 1.图形验证码识别工具tesseract的使用
  • 2. 代码中使用tesseract识别图象
    • 2.1 首先在本地操作
    • 2.2 操作在线的图像

图形识别

作为反爬的机制,图形验证码非常常见。

1.图形验证码识别工具tesseract的使用

tesseract是一种能够将图片翻译成文字的技术。是目前公认的最优秀,最准确的开源OCR库。需要安装tessrract工具,在安装前,先安装调用的工具包。pip install pytesseract 然后安装下载好的tesseract。安装完成后,要想在命令中使用,应该设置环境变量,把tesseract的文件路径添加到path环境变量里面。
爬虫(14)图形验证码识别tesseract工具_第1张图片

除了这一个,还需要把训练数据的路径添加到环境变量中。这个只需要添加到用户变量中,不必添加到path变量中。
爬虫(14)图形验证码识别tesseract工具_第2张图片
···········································································································
在我的“E:\BaiduNetdiskDownload\爬虫课Jerry版\20210111-第十四讲-线程上\上课代码\上课代码\demo.jpg”这个文件夹路径里有一个示例图片demo.jpg。打开是一个验证码图片,是这样子的:
爬虫(14)图形验证码识别tesseract工具_第3张图片

我们可以操作一下,调用命令窗口win+r,首先看我们有没有安装成功tesseract工具,在命令行中输入tessract。出现如下提示,说明安装成功:
爬虫(14)图形验证码识别tesseract工具_第4张图片
然后切换盘符输入E:回车,在E:\下输入"cd BaiduNetdiskDownload\爬虫课Jerry版\20210111-第十四讲-线程上\上课代码\上课代码,到示例图片所在的文件夹":
爬虫(14)图形验证码识别tesseract工具_第5张图片
然后输入:

tesseract demo.jpg demo  # 回车

如图:
爬虫(14)图形验证码识别tesseract工具_第6张图片

然后E:\BaiduNetdiskDownload\爬虫课Jerry版\20210111-第十四讲-线程上\上课代码\上课代码>文件夹中出现了同名的txt文件:
爬虫(14)图形验证码识别tesseract工具_第7张图片
打开可以看到刚才识别成功的图片,已经转化为文字:
爬虫(14)图形验证码识别tesseract工具_第8张图片

已经识别成功。后续可以代码操作读取文字信息就可以了。tesseract对图形的识别成功率不是很高。如果想更好的识别,可以使用打码平台。当然也可以刷新,直到一个比较容易识别的验证码出现。可以写一个循环,直到识别成功。

2. 代码中使用tesseract识别图象

下面我们在python代码中操作一下。

2.1 首先在本地操作

注意看注释:

import pytesseract  # 引用工具
from PIL import Image  # python图象处理库
# 指定tesseract的驱动
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'
# 指定tesseract的训练数据路径
tessdata_dir_config = r'--tessdata-dir "C:\Program Files (x86)\Tesseract-OCR\tessdata"'
# 打开图象
image = Image.open('demo.jpg')
# 打印图像
# 传入的参数依次是:图片片转化为文字的方法,图片对象,语言(英语),训练数据路径
print(pytesseract.image_to_string(image,lang='eng',config=tessdata_dir_config))
'''
Traceback (most recent call last):
  File "D:/work/爬虫/Day14/my_code/code_1_teseract.py", line 12, in 
    image = Image.open('demo.jpg')
  File "D:\Python38\lib\site-packages\PIL\Image.py", line 2904, in open
    fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'demo.jpg'
说找不到这个图片demo.jpg,忘记把图片复制到代码所在文件夹了。复制一下。
'''

输出结果:

7 3 6 4

识别成功。

2.2 操作在线的图像

图形url:

url = 'https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891'

下面仔细看一下代码中的注释:

# @Time    : 2021/1/29 10:38
# @Author  : Guanghui Li
# @File    : tesseract_image_online.py
# @Software: PyCharm
import pytesseract
from PIL import Image
from urllib import request # 这里我们导入了urilib中的request模块,里面一个request.urlretrieve(1,2)方法比较好用,1位置传入的是图形的url,2位置传入的是得到图形新建的文件名
# 指定tesseract的驱动
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files (x86)\Tesseract-OCR\tesseract.exe'
# 指定tesseract的训练数据路径
tessdata_dir_config = r'--tessdata-dir "C:\Program Files (x86)\Tesseract-OCR\tessdata"'
# 验证码url
url = 'https://passport.lagou.com/vcode/create?from=register&refresh=1513081451891'
# 请求图像
request.urlretrieve(url,'text.png')
# 打开图形
image = Image.open('text.png')
# 图形识别与转换
result = pytesseract.image_to_string(image,lang='eng',config=tessdata_dir_config)
print(result)

识别成功
爬虫(14)图形验证码识别tesseract工具_第9张图片
再运行一次:
爬虫(14)图形验证码识别tesseract工具_第10张图片
仍然是正确的。核心的逻辑是我们要加载出它的驱动以及训练路径,第9行和11行代码。

你可能感兴趣的:(爬虫)