使用python内置库pytesseract实现图片验证码的识别
环境准备:
1、
git文档地址:https://digi.bib.uni-mannheim.de/tesseract/
下载后就是一个exe安装包,直接右击安装即可,安装完成之后,配置一下环境变量,编辑 系统变量里面 path,添加下面的安装路径:
2、
3、配置环境变量:
编辑 系统变量里面 path,添加下面的安装路径:C:\Program Files (x86)\Tesseract-OCR
cmd命令模式下测试是否安装成功:
tesseract test.jpg text -l chi_sim
4、安装python的第三方库:
pip install pillow #一个python的图像处理库,pytesseract依赖
pip install pytesseract
5、找到pytesseract的安装包,C:\Python34\Lib\site-packages\pytesseract,编辑pytesseract.py文件(此步骤必须做,否则运行代码时会报错):
tesseract_cmd = 'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'
代码实例:
简单验证码代码:
1 import requests 2 from PIL import Image 3 import pytesseract 4 5 ''' 6 简单验证码 7 ''' 8 # 验证码地址 9 url = "https://www.renrendai.com/passport/index/captcha?time=1551682134111" 10 response = requests.get(url).content 11 12 #将图片写入文件 13 with open('yzm.png','wb') as f: 14 f.write(response) 15 f.close() 16 17 '''识别验证码''' 18 #第一步:通过内置模块PIL打开文件 19 pic = Image.open('yzm.png') 20 #第二步:识别图片中的内容 21 pic_str = pytesseract.image_to_string(pic) 22 print("验证码识别结果为:",pic_str)
百度文库图片文档的识别:
1 #下载图片 2 baidu_url = "https://wkretype.bdimg.com/retype/zoom/4127ed79a26925c52cc5bf99?pn=2&o=jpg_6&md5sum=9cdc209bc34a40ed774f7e14c0be59c4&sign=5dbcb28bf1&png=11238-22475&jpg=41808-117940" 3 baidu_pic = requests.get(baidu_url).content 4 5 #图片写入文件 6 with open('baidu_pic.jpg','wb') as f: 7 f.write(baidu_pic) 8 f.close() 9 10 #识别验证码 11 baidu_img = Image.open('baidu_pic.jpg') 12 baidu_img_str = pytesseract.image_to_string(baidu_img,lang="chi_sim") 13 print('百度文库图片内容为:',baidu_img_str)
复杂的验证码,直接识别不了,可以使用超级鹰的第三方接口,如有需要,自己进行账号的注册,这里直接贴代码喽:
1 from chaojiying import Chaojiying 2 3 chaojiying_url= "http://www.chaojiying.com/include/code/code.php?u=1" 4 response = requests.get(chaojiying_url).content 5 6 with open('rryz.png','wb') as f: 7 f.write(response) 8 f.close() 9 10 #读取文件内容 11 with open('rryz.png','rb') as f: 12 pic1 = f.read() 13 14 #调用第三方打码平台接口识别验证码 15 yz = Chaojiying(username='*****', password='****', soft_id='****') 16 17 res = yz.post_pic(pic1,codetype='1902').get('pic_str') #1902 验证码类型 18 print('识别的结果:',res)