Python_PaddleOCR识别网站登录验证码

简述

有个需求用python去登录某网站,登录时需要识别图片验证码。之前尝试过用不同的像素去除图片中的干扰像素,建立每个字母的库 去比对,发现效果很差。
经同事提醒 用PaddleOCR完成的验证码识别,成功率60%左右,使用起来很简单,特此记录一下。

网站验证码示例如下:

PaddleOCR

PaddleOCR的github仓库地址
PaddleOCR的官方快速开始文档
官方的快速开始文档已经将使用方法介绍的很详细了。

安装

此处安装的cpu版本,详细介绍请查看官方的快速开始文档:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/windows-pip.html

要求:
python版本: 3.6/3.7/3.8/3.9/3.10
pip版本: 20.2.2 或更高版本

1
2
3
4
5
#安装PaddlePaddle CPU版本
python -m pip install paddlepaddle==2.4.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

#安装PaddleOCR whl包
pip install "paddleocr>=2.0.1" # 推荐使用2.0.1+版本

使用

执行示例代码,即可获取到图片识别到的内容,img_path为图片路径

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from paddleocr import PaddleOCR, draw_ocr


def codeConvert():
# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch") # need to run only once to download and load model into memory
img_path = './img/code.png'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
res = result[idx]
for line in res:
return (line[-1][0])

# 显示结果
# 如果本地没有simfang.ttf,可以在doc/fonts目录下下载
from PIL import Image
result = result[0]
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result.jpg')

print(codeConvert())

结果如下:


Python_PaddleOCR识别网站登录验证码
https://imwang77.github.io/2023/03/21/Python_PaddleOCR识别网站登录验证码/
作者
imwang77
发布于
2023年3月21日
更新于
2023年3月21日
许可协议