python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python识别GIF验证码

python实现动态GIF英数验证码识别示例

作者:爬虫45度

这篇文章主要为大家介绍了python实现动态GIF英数验证码识别示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

有哪些特征

识别思路

分帧

随便挑几张下载下来的gif样本,来判断下有多少帧

from io import BytesIO
from PIL import Image
def get_frame_number(binary):
    img = Image.open(BytesIO(binary))
    _num = 0
    while True:
        try:
            a = img.tell()
            _num += 1
            img.seek(a + 1)
        except EOFError:
            break
    print(f'当前gif有{_num}帧')
    return _num
with open('../error_images/08e3e54f0febfe40f314b6f4a07de6b8.gif', 'rb') as f:
    binary = f.read()
get_frame_number(binary)

       经过测试,该类型gif图有25帧,也就是说,可以拆分成25张图片,对于静态的图片,识别起来就轻松多了

收集样本及整理字符集

from io import BytesIO
from PIL import Image
def seek_img(img_name):
    img = Image.open(r'F:\code\hg_gifs\' + img_name)  # F:\code\hg_imgs1\ 是gif图的路径
    for i in range(25):
        try:
            b = BytesIO()
            img.save(b, format='png')
            _bytes = b.getvalue()
            img = cv2.imdecode(np.array(bytearray(_bytes), dtype='uint8'), cv2.IMREAD_UNCHANGED)
            png_name = img_name.split('_')[0] + '_' + str(i) + '.png'
            cv2.imwrite(r'F:\code\hg_pngs\{}'.format(png_name), img)  # F:\code\hg_pngs\ 是静态图保存路径
            img.seek(img.tell() + 1)
        except EOFError:
            pass
rows = os.listdir(r'F:\code\hg_gifs')  # F:\code\hg_imgs1\ 是gif图的路径
for row in rows:
    seek_img(row)

训练与识别

训练过程就是把上面切下来的静态图,直接无脑dddd_trainer 训练即可

这里提一句,如果数据集质量还可以的话,识别的时候实际上没有必要一张gif图去识别25次,这里我是step为3一共识别了9次,感觉已经够了

训练完之后小测1000次,成功967次,其中18次是代理超时,967/982≈98.47%,正确率在98%上下,够用了

以上就是python实现动态GIF英数验证码识别示例的详细内容,更多关于python识别GIF验证码的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文