用Python识别简单验证码

前言闲扯

标题虽然是识别验证码,但实际上本文讲的是OCR(Optical Character Recognition,光学字符识别)。
用到三个模块:

  • PIL
  • tesseract-oc
  • pytesseract

简单介绍下:
1. PIL (Python Imaging Library)是 Python 中最常用的图像处理库;
2. tesseract-oc是HP的一个文字识别项目,后来交给google做了开源;
3. pytesseract是基于tesseract-oc的python封装。

识别

pytesseract的使用十分简单,当然tesseract-oc本身的命令行调用也很简单,基于它的封装用起来也只有一行代码:

from PIL import Image
import pytesseract

im = Image.open("captcha.jpg")
vcode = pytesseract.image_to_string(im)
print(vcode)

运行后不出意外会报错:FileNotFoundError: [WinError 2] 系统找不到指定的文件
方法1: 将tesseract.exe的安装目录添加到PATH环境变量中;
方法2: 修改pytesseract.py文件,指定tesseract.exe安装路径tesseract_cmd = 'D:\\Tesseract-OCR\\tesseract
方法3: 在实际运行代码中指定pytesseract.pytesseract.tesseract_cmd = 'D:\\Tesseract-OCR\\tesseract.exe'

当你觉得万事俱备,信心满满再次运行代码后,它报了另外一个错:
pytesseract.pytesseract.TesseractError: (1, 'Error opening data file \\Tesseract-OCR\\tessdata/eng.traineddata')
方法1: 将/tesseract-ocr/tessdata目录添加到TESSDATA_PREFIX环境变量中;
方法2: 指定tessdata-dir:tessdata_dir_config = '--tessdata-dir "D:\\Tesseract-OCR\\tessdata"'
所以,最后代码变成了这样:

from PIL import Image
import pytesseract

im = Image.open("captcha.jpg")
tessdata_dir_config = '--tessdata-dir "D:\\Tesseract-OCR\\tessdata"'
vcode=pytesseract.image_to_string(im,config=tessdata_dir_config)
print(vcode)

运行成功!

运行结果

我采用的验证码是来自直播平台斗鱼的举报系统,这个神奇的举报系统永远都输不对验证码,大概是斗鱼压根就不让你们举报,只是做做样子忽悠忽悠屁民罢了。
附:Request URL:https://www.douyu.com/member/report/captcha
这里写图片描述——>{887
唔,不是很令人满意的结果。
其实,这也在情理之中。tesseract-oc是做图片文字识别的,斗鱼这个验证码带了一点噪点,识别容易出误差。实际上也没有人直接用tesseract-oc来破解验证码,一般都需要做二值化、降噪、分割的处理。这样一套流程下来,识别的成功率就会变地非常高。
就会像这样这里写图片描述——>这里写图片描述——>3061

后话

本来写这篇文章,是起源于在知乎看到一篇教程以及在实验楼的一个课程,用Python的基本库PIL来实现验证码的识别。实操下来因本人对图像处理的认识比较浅薄,一些颜色直方图、调色板类的概念不是特别明确,并且教程里有讨巧的成分(降噪是选取已知图片的两种颜色来做二值化)遂放弃转而直接调用第三方库。
总结来说,这是一篇工具使用篇,并没有多少python知识,就当我水了一篇吧,啊哈哈哈。
有缘我们再来讲中文识别以及字库训练,会发挥出tesseract-oc更完整强大的实力。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值