最近需要爆破一个后台,但是因为有验证码所以尝试了一下使用tesseract做ocr识别
0x1:环境搭建
https://digi.bib.uni-mannheim.de/tesseract/
翻到最下面,下载最新版本的tesseract,安装完成以后配置安装目录到环境变量中
pip安装库
pip install pytesseract
pip install pillow
pip install requests
目标验证码
import pytesseract
from PIL import Image
image = Image.open('./captcha1.png')
image = binaryzation(image)
result = pytesseract.image_to_string(image)
print(result)
少部分验证码可以直接识别出来,但是大部分倾斜变形比较严重的会识别不出来,判断为空
针对一些比较轻微的变形,通过一些预处理手段可以有效的提高识别率
#二值化函数
def binaryzation(image,threshold=150):
image = image.convert('L')
table = []
for i in range(256):
if i < threshold:
table.append(0)
else:
table.append(1)
image = image.point(table,"1")
return image
右图 为二值化处理以后的图像,去除了很多干扰像素点,可以一定程度上提升正确率
但是tesseract的识别能力还是很差,如果要追求更高的正确率必须进行训练
可以参考这篇文章
https://zhuanlan.zhihu.com/p/40178190
对于开源的cms,可以下载源码在源码里面找到验证码生成的程序,生成大量的识别样本,然后通过深度学习来进行识别
通过tensorflow训练dede的验证码识别,大概训练一万张验证码样本大概就能达到98%的识别率.
苏公网安备 32132202001088号
| Copyright 北极熊 北格技术 版权所有