背景
需求是要爬取某网站的数据, 已有账号密码, 但这个网站需要登录, 登录需要输入验证码
验证码样式如下
调研了Tesseract框架, 识别效果不佳. 后来使用ddddocr, 能正确识别.
https://github.com/sml2h3/ddddocr
代码如下
def ocr():
response = requests.get('http://xxx/getimg')
data = response.json()
# 提取Base64图片字符串
base64_image = data['data']['img']
#base64_image = "data:image/png;base64,iVBORw0KGgxxxxx"
image_data = base64.b64decode(base64_image.split(',')[1])
ocr = ddddocr.DdddOcr()
result = ocr.classification(image_data)
# 打印识别结果
print(result)
# Press the green button in the gutter to run the script.
if __name__ == '__main__':
ocr()
由于是为了爬取数据, 验证码是从接口取的. 返回的是一个base64. 示例代码里是将base64转成字节数组进行识别. ddddocr官方示例有直接通过图片(xx.jpg)识别的, 可以直接参照github官方.
遇到的坑
- 提示AttributeError: module ‘ddddocr’ has no attribute ‘DdddOcr’
原因是我示例的python文件名字就是ddddocr.py. 和包冲突了, 改了即可. - 出现:AttributeError: module ‘PIL.Image’ has no attribute ‘ANTIALIAS’
降级Pillow的版本,比如使用9.5.0版本(先卸载,再重新安装)
pip uninstall -y Pillow
pip install Pillow==9.5.0
两个坑都是在github issues中找到的答案.