from PIL import Image
im = Image.open('captcha.png').convert('L')
print(pytesseract.image_to_string(im))
后台每天多出两百多条垃圾注册,抓了验证码图片下来跑 tesseract,四位纯数字的识别率 78%,加上一次重试,几乎每次都能过。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。
追下去是这么回事:验证码只有四位数字,没有干扰线、噪点和扭曲,字符边缘干净,OCR 训练集里这种样本最多。字体固定,切图之后模板匹配也能过。
围绕「验证码 OCR」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
处理上按这个顺序:改成四位以上混合字母,去掉容易混淆的 0、O、1、l;加随机旋转、干扰线和背景噪点,字符不要贴边;用同一套 OCR 脚本重跑一百张,识别率压到 5% 以下再上线。
确认没问题再收工,同一批验证码 OCR 识别率降到 5% 以下,垃圾注册当天少八成。
