字体加密(基于ddddocr)

解决字体加密(基于ddddocr)

上个月著名网友sml2h3发布了自己的最新杰作ddddocr 1.3.0 版本项目源码https://github.com/sml2h3/ocr_api_server 欢迎点赞,基于几千万张图片机器学习训练的验证码识别第三方库,之前作者都是手敲映射关系,敲的我头都大了,想着拿ddddocr识别岂不是方便很多,而且准确很多。

1,先安装ddddocr

项目源码地址
https://github.com/sml2h3/ocr_api_server
建议python版本3.7-3.9 64位

pip install ddddocr

安装完后试一下简单的demo
aaa.png

import ddddocr
ocr = ddddocr.DdddOcr()
with open('aaa.png', 'rb') as f:
    img_bytes = f.read()
res = ocr.classification(img_bytes)
print(res)

2,用pil和fontTools库将字体文件转化为图片流解析出来映射对照

大家可以看到ddddocr的classification方法传入的参数是图片字节流的方式,所以我们将字体文件下载下来后,用TTFont解析然后用PIL画出来以下整体代码


from PIL import ImageFont, Image, ImageDraw
from io import BytesIO
import ddddocr,base64
from fontTools.ttLib import TTFont


def font_to_img(txt, filename):
    '''
    将字体画成图片
    :param txt:
    :param filename:
    :return:
    '''
    img_size = 1024
    img = Image.new('1', (img_size, img_size), 255)
    draw = ImageDraw.Draw(img)
    font = ImageFont.truetype(filename, int(img_size * 0.7))
    txt = chr(txt)
    x, y = draw.textsize(txt, font=font)
    draw.text(((img_size - x) // 2, (img_size - y) // 2), txt, font=font, fill=0)
    return img


def font_analysis(filename):
    '''
    传入字体文件名称就能直接出来映射对照
    :param filename:
    :return:
    '''
    analysis_res = []
    f = TTFont(filename)
    ocr = ddddocr.DdddOcr()
    for i, Glyphname in f.getBestCmap().items():
        pil = font_to_img(i, filename)
        # pil.save('aaa.png')
        bytes_io = BytesIO()
        pil.save(bytes_io, format="PNG")
        res = ocr.classification(bytes_io.getvalue())
        analysis_res.append({Glyphname:res})
    print(analysis_res)
    print(len(analysis_res))
    return analysis_res


if __name__ == '__main__':
    font_analysis('fd2ae831b35fda5e69097373b0dbf31de8d0bcbe.ttf')

好了本次分享就结束了,欢迎指正,如有侵权请联系作者立马删除


版权声明:本文为weixin_45304329原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。