Python 光学文字识别

x33g5p2x  于2021-09-19 转载在 Python  
字(1.2k)|赞(0)|评价(0)|浏览(203)

easyocr

光学文字识别主要应用于文字验证码、滑块等类型的登录验证。

首先需要的是第三方库 easyocr(有点大1.5G左右)。

安装导入后使用:

reader = easyocr.Reader(['ch_sim','en'],gpu = False)
print(reader.readtext('file/IDcard.jpg',detail = 0))

列表中参数表示可识别文字语言种类。///‘ch_sim’ - 简体中文 ‘en’ - 英文///

页面抠图

导包

from PIL import Image as img
from PIL.Image import Image
# from PIL.ImageFilter import Filter #使用滤镜处理图片
image = img.open('file/IDcard.jpg')   #type:Image 声明类型为了有代码提示
print(image.size)   #图片大小
head = image.crop((320,50,460,235))  #抠图裁剪位置
# head.show() #显示图片
head.save('file/head.jpg')  #保存图片

抠图前:

抠图后:

阿里云邮箱登录验证

这个邮箱页面登录框嵌套了两次,所以需要获取两次iframe标签以切换到到登录框获取到输入框以及验证码。

切换到登录框

iframe = browser.find_element_by_css_selector('.login_panel_iframe')
browser.switch_to.frame(iframe)

切换到邮箱登录

iframe_mail = browser.find_element_by_css_selector('#ding-login-iframe')
browser.switch_to.frame(iframe_mail)

现在就可以获取到输入框了,解析现在的网页就可以拿到输入框了。输入用户名密码后才会显示验证码。验证码位置就是登录框、邮箱登录框、验证码框三者横纵坐标的和(因为他们之间都是相对位置)。通过location获取到的位置都是左上角的坐标。再通过size获取到验证码大小就可以对截到的整个图进行裁剪工作了。

屏幕截图:

存为文件:

browser.get_screenshot_as_file('file/aliyun.png')

截取整个窗口的图片获得二进制数据

image_data = browser.get_screenshot_as_png()
browser_image = Image.open(io.BytesIO(image_data))

最后裁剪就能得到完整的验证码了。值得注意的是,windows系统需要将电脑页面设置为100%(默认为125%),若不修改需要在裁剪坐标处乘1.25(125%)、或乘1.5(150%)。

相关文章