【spider】Tesseract机器视觉实现验证码识别

mac2024-07-24  58

本文将重点介绍机器视觉的一个分支:文字识别,

介绍如何用一些 Python库来识别和使用在线图片中的文字

我们可以很轻松的阅读图片里的文字,但是机器阅读这些图片就会非常困难,利用这种人类用户可以正常读取但是大多数机器人都没法读取的图片,验证码 (CAPTCHA)就出现了

将图像翻译成文字一般被称为光学文字识别(Optical Character Recognition, OCR)

下载安装包,下载训练数据

https://github.com/tesseract-ocr/tesseract/wiki

https://github.com/tesseract-ocr/tesseract/wiki/Data-Files

 

import pytesseract import urllib.request from PIL import Image url = "https://so.gushiwen.org/RandCode.ashx?" urllib.request.urlretrieve(url,'./captcha.png') def cleanImage(path): image = Image.open(path) # 灰度化 image = image.convert('L') # 背景杂点删除 data = image.load()#返回图片的ndarray数据 w,h = image.size for i in range(w): for j in range(h): if data[i,j] >150: #阈值,估计的值 data[i,j] = 255 #纯白 else: data[i,j] = 0 #纯黑 image.save('clean_captcha.png') return image image = cleanImage('./captcha.png') image.show() result = pytesseract.image_to_string(image) # print(result)

古诗文网站使用selenium模拟登陆,识别验证码

from selenium import webdriver import pytesseract from PIL import Image import time url = 'https://so.gushiwen.org/user/login.aspx?from=http://so.gushiwen.org/user/collect.aspx' def get_captcha(): driver = webdriver.Chrome() driver.maximize_window() driver.implicitly_wait(10) driver.get(url) # 元素 img = driver.find_element_by_id('imgCode') driver.save_screenshot('./poem.png') image = Image.open('./poem.png') # 左上角坐标 loc = img.location print(loc) # 图片宽度高度 size = img.size print(size) # 矩形区域 # 160,260 # 234,291 rec = (loc['x']+100 , loc['y']+51, 554, 290) captcha = image.crop(rec) # 保存到文件中 captcha.save('./captcha.png') return driver def recognize_captcha(): captcha = Image.open('./captcha.png') gray = captcha.convert('L') data = gray.load() w,h = captcha.size for x in range(w): for y in range(h): # 0 ~ 255 0纯黑,255纯白 if data[x,y] < 140: data[x,y] = 0 else: data[x,y] = 255 code = pytesseract.image_to_string(gray) return code def login(drive,code): drive.find_element_by_id('email').send_keys('xxxxxxx@qq.com') drive.find_element_by_id('pwd').send_keys('xxxxabc') drive.find_element_by_id('code').send_keys(code) time.sleep(3) drive.find_element_by_id('denglu').click() if __name__ == '__main__': drive = get_captcha() # code验证码,有可能出错 code = recognize_captcha() # print('----------------',code) login(drive,code) drive.quit() 网络毒刘 认证博客专家 Python 公众号:刘旺学长 数据分析 因为同样的坑不想踩两次而写博客,也同样为了社会更好的进步... 其实 Python 已经是一个很老的编程语言了,到现在(2019年) Python 已经高龄 28 岁,比很多程序员的年龄都大。现在之所以这么流行和社区、人工智能AI的日益发展,有很大的关系。千里之行始于足下,还不开始学习 Python编程吗个人公众号:刘旺学长一名热爱分享技术的宝藏博主。公众号回复1024,有免费教程分享。
最新回复(0)