解决字体加密(基于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
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版权协议,转载请附上原文出处链接和本声明。