前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何利用pytesseract库识别图形验证码 【python爬虫入门进阶】(15)

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

作者头像
码农飞哥
发布2022-03-31 20:05:13
1.2K0
发布2022-03-31 20:05:13
举报
文章被收录于专栏:好好学习好好学习

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 的可执行文件。然后,一直点击下一步进行安装,不过需要注意的是安装的路径要放在不需要权限的英文路径下。

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

下载并配置训练数据

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

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

linux下安装

安装tesseract

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

代码语言:javascript
复制
sudo apt install tesseract-ocr

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

mac下安装

安装tesseract

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

代码语言:javascript
复制
brew install tesseract

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

下载训练数据

数据文件可以通过下面

代码语言:javascript
复制
brew install tesseract-lang

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

在命令行中使用tesseract

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

纯英文识别

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

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

识别的结果如下图所示:

中文识别

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

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

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

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

安装依赖

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

代码语言:javascript
复制
pip install pytesseract

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

代码语言:javascript
复制
pip install pillow

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

简单的使用

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

代码语言:javascript
复制
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()

运行后的打印的结果是:

识别拉钩网的图形验证码

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

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

代码语言:javascript
复制
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()

运行十次的结果是:

除个别的图形验证码识别不正确。其余的都识别正确了。 不过需要注意的是,针对有干扰线的图形验证码,比如下面这种。

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

总结

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农飞哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • tesseract库介绍
  • tesseract的安装
    • windows下安装
      • 安装tesseract
      • 下载并配置训练数据
    • linux下安装
      • 安装tesseract
    • mac下安装
      • 安装tesseract
      • 下载训练数据
  • 在命令行中使用tesseract
    • 纯英文识别
      • 中文识别
      • 通过Python代码来识别图片验证码
        • 安装依赖
          • 简单的使用
            • 识别拉钩网的图形验证码
            • 总结
            相关产品与服务
            文字识别
            文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档