用Python识别简单验证码
2018-01-18 18:50
393 查看
前言闲扯
标题虽然是识别验证码,但实际上本文讲的是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更完整强大的实力。
相关文章推荐
- 利用Python进行简单的验证码识别步骤
- python验证码简单识别
- 基于Python使用SVM识别简单的字符验证码的完整代码开源分享
- Python2.7+pytesser简单验证码的识别
- Python2.7+pytesser简单验证码的识别
- Python验证码识别:利用pytesser识别简单图形验证码
- 利用Python进行简单的图像识别(验证码)
- 使用python以及工具包进行简单的验证码识别
- Python2.7+pytesser实现简单验证码的识别方法
- python 验证码识别示例(一) 某个网站验证码的简单识别
- 用Python进行简单图像识别(验证码)
- pytesseract的简单验证码的识别-python
- 基于python的验证码生成与识别1—生成简单的验证码
- 使用python及工具包进行简单的验证码识别
- Python验证码识别:利用pytesser识别简单图形验证码
- Python简单的验证码识别
- Python验证码识别:利用pytesser识别简单图形验证码
- Python验证码识别:利用pytesser识别简单图形验证码
- Python验证码识别:利用pytesser识别简单图形验证码
- python 批量获取验证码图片 简单案例