# coding=utf-8
from fontTools.ttLib import TTFont
from PIL import Image, ImageDraw, ImageFont  #绘制图片
import numpy, os, platform
import pytesseract #文字识别库,这个包的安装还需要安装tesseract.exe,可以网上搜教程# coding=utf-8
import requests, base64, re
# from urllib import parseclass Image_Rec_G:def __init__(self):self.filepath = ''# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------self.client_id = 'fGoDxz' # API Keyself.client_secret = 'AzoegouQlzPI' # Secret Keyself.at_header = {'Content-type': 'application/json; charset=UTF-8','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}self.access_token_url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + self.client_id + '&client_secret=' + self.client_secret# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------self.ia_header = {'Content-type': 'application/x-www-form-urlencoded','User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'}self.ia_data ={'image': ''}self.api_url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token='def get_access_token(self):'''1.  鉴权使用的 Access_token:return:'''acc = requests.post(url=self.access_token_url, headers=self.at_header)access_token_result = eval(acc.content.decode())    # eval  字符串转成字典return access_token_result['access_token']def image_option(self):'''图片地址base64编码:return:'''with open(self.filepath, 'rb') as fp:picture = fp.read()base_picture = base64.b64encode(picture)str_base_picture = str(base_picture, encoding='utf-8')return str_base_picturedef get_image_data(self, filepath):self.filepath = filepathself.api_url = self.api_url + self.get_access_token()self.ia_data['image'] = self.image_option()response = requests.post(url=self.api_url, headers=self.ia_header, data=self.ia_data)image_rec_result = eval(response.content.decode())   # 字符串转成字典return image_rec_resultdef ttfont_to_img(fontPath, imgname):'''出入字体文件名解析字体文件,绘制出文本类型图片并保存到本地:param fontPath::return:'''# fontPath = '447d767f.woff'font = TTFont(fontPath)  # 打开文件codeList = font.getGlyphOrder()[2:] # 因为开头两个并不是我们所需要的,所以从2开始取im = Image.new("RGB", (1800, 1000), (255, 255, 255))dr = ImageDraw.Draw(im)  # v#创建绘制对象font = ImageFont.truetype(fontPath, 40)  # #绘制文本count = 15arrayList = numpy.array_split(codeList, count)  # 将列表切分成15份,以便于在图片上分行显示for t in range(count):newList = [i.replace("uni", "\\u") for i in arrayList[t]]text = "".join(newList)text = text.encode('utf-8').decode('unicode_escape')dr.text((0, 50 * t), text, font=font, fill="#000000")im.save(imgname)def parse_ttfont(fontname, imgname):# 字体文件转化为图片ttfont_to_img(fontname, imgname)# 图片文字识别if (platform.system() == 'Windows'):filepath = os.getcwd().replace('\\', '\\\\') + '\\\\%s' % imgnameelif(platform.system() == 'Linux'):filepath = os.getcwd().replace('\\', '/') + '/%s' % imgnameim = Image_Rec_G()result = im.get_image_data(filepath)if 'words_result' in result.keys() and result['words_result'] != []:datas = ''.join([i['words'] for i in result['words_result']])return dataselse:return 'error'if __name__ == '__main__':'''读取自定义字体文件解析成人眼可识别正常文字'''fontname = '447d767f.woff'imgname = 'sssss.jpg'print(parse_ttfont(fontname, imgname))## result = pytesseract.image_to_string(imgname, lang="chi_sim")# result = result.replace(" ", "").replace("\n", "")# codeList = [i.replace("uni", "&#x") + ";" for i in codeList]# print(result)

思路:

获取到woff字体文件,保存到本地,然后同TTfont模块读取字体文件,pil模块保存为文本类型图片,最后用ocr识别图片。

参考:https://blog.csdn.net/weixin_43752839/article/details/98314821#commentBox

多谢大老

本代码里使用 百度文字识别接口,另;还可以用pytesseract模块来识别

自定义字体文件解析成人眼可识别文字相关推荐

  1. woff字体图元结构剖析,自定义字体的制作与匹配和识别

    前面我在<2万字硬核剖析网页自定义字体解析>一文中,讲解了通过图像识别来解析自定义字体,但是图像识别的缺点在于准确率并不能达到100%,还需要二次修改. 前面将字体的称为点阵图,其实根据T ...

  2. java引入外部字体_Java中如何自定义字体文件(引用外部字体)?-字体文件

    图源来自网络 有时候我们在程序中,会使用到Java字体,但不是所有的字体系统中都会有,我们就可能会使用外部自定义字体,这样在程序迁移部署中就会少些工作,最近在一个项目中使用到了自定义字体文件,理顺了, ...

  3. java加载字体文件_Java的加载自定义字体文件(.TTF)

    我在下面这段代码中使用,并将其与该堆栈跟踪出现:Java的加载自定义字体文件(.TTF) java.io.FileNotFoundException: font.ttf (No such file o ...

  4. 前端React项目的Next.js项目通过CSS引入自定义字体文件

    最近在Web3的项目,需要引入自定义字体,做下记录: 1. 如果是下载的字体文件,直接能使用的就不需要转换,如果是TTF格式则需要转换成eot.svg.woff.woff2,这里提供一个网站Font ...

  5. 猫眼电影爬取(woff 字体文件解析)

    猫眼电影网站,中电影评分在网页显示正常但是检查网页源码会发现,评分所在位置是一串迷之字符串根本认不出,原因是使用了自定义字体代码 <span class="stonefont" ...

  6. mot文件解析成bin

    mot固件文件转成bin文件 mot文件介绍 开始解析 mot文件介绍 mot s19 bin hex都可以用于固件文件的存储,其中bin文件就是固件原始数据,只记录固件的二进制数据流,mot文件实际 ...

  7. java 文件解析成JSON数据(其三)

    个人用途,用于将数据解析成json格式使用 import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; ...

  8. vue 引入 自定义字体文件

    1. 将字体文件放在对应的目录下面 2.新建引入文件如下图 3.main.js引入 4.调用:

  9. Android实例-使用自定义字体文件(XE8+小米2)

    结果: 1.需要修改DELPHI自身的FMX.FontGlyphs.Android.pas,复制到程序的根目录下(红色部分为修改过的). 2.字体文件从 C:\Windows\Fonts 直接拷贝到A ...

最新文章

  1. 小米手机无法连接eclipse调试案例
  2. 模拟宽度自适应的输入框
  3. as3绕过策略文件给视频截图
  4. EMW 性能优化二之---并发配置
  5. 分享26个关于Java开发视频教程(免费下载)
  6. Android应用权限管理总结
  7. Keepalived简介
  8. ORACLE PL/SQL编程之八: 把触发器说透
  9. JavaScript 匿名函数与闭包
  10. css 行内水平均等排布方式
  11. django的配置文件字符串是怎么导入的?
  12. 基本数据类型范围大小字节大小
  13. Nginx configure
  14. 从零基础入门Tensorflow2.0 ----二、5.3 实战sklearn超参数搜索
  15. 【软件测试】软件测试学习笔记(三)
  16. 三极管构成的流水灯电路分析
  17. Hacker(15)----嗅探原理
  18. DeepCTR-Torch 如何使用【案例(Criteo、Movielens)演示、特征(SparseFeat、DenseFeat、VarLenSparseFeat)参数含义】
  19. 亚洲的音乐史料及其历史研究状况
  20. 数睿数据2022新年致辞:小荷才露尖尖角,早有蜻蜓立上头

热门文章

  1. pi/4dqpsk的matlab及FPGA仿真
  2. stl格式文件导入Unity
  3. python网络爬虫学习的汇总
  4. vivo刷入鸿蒙,vivo鸿蒙系统刷机包
  5. 【RFC6582 TCP快速恢复算法的NewReno修改】(翻译)
  6. 没有一个真正歌手的时代,没有一首好歌的年代
  7. 新机器导致显示器发黄的问题
  8. torch之optimizer.step() 和loss.backward()和scheduler.step()的关系与区别
  9. Scala为什么是大数据第一高薪语言
  10. 寝室卫生问题的博弈分析及其解决方案