爬虫从入门到精通(21) |字体加密通杀方案

news2024/11/15 19:47:07

文章目录

  • 一、了解什么是字体加密
  • 二、Python打开字体加密文件
  • 三、字体加密的通杀
    • 1.静态的字体文件+固定顺序的字体
    • 2.其他动态变化情况

一、了解什么是字体加密

字体加密是页面和前端字体文件想配合完成的一个反爬策略。通过css对其中一些重要数据进行加密,使我们在代码获取的和在页面上看到的数据是不同的。

在这里插入图片描述

前端人员通过使用font-face来达到这个目的,font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中。而font-face的格式为:

@font-face {
	font-family: <FontName>;      # 定义字体的名称。             
	src: <source> [<format>][,<source> [<format>]]*;  # 定义该字体下载的网址,包括ttf,eof,woff格式等
}

我们要打开ttf,eof,woff这些格式的字体文件有两种方式:

  • FontCreator工具:https://www.high-logic.com/font-editor/fontcreator
  • 在线FontEditor工具:http://fontstore.baidu.com/static/editor/index.html

我们抓包一个字体文件,在Font那一列,复制这个url到浏览器就可以下载下来

在这里插入图片描述
下载下来后,我们使用FontCreator打开

在这里插入图片描述

对应页面的数字。页面源码的字符前缀是&#x,woff文件的前缀是uni
在这里插入图片描述

二、Python打开字体加密文件

刚才是直观的看到我们的对应关系,但是我们主要是通过python代码,自动的替换加密字体。这个时候就需要借助其他模块来实现。

pip install fontTools

然后一些常见方法见 https://blog.csdn.net/weixin_43411585/article/details/103484643

这里我们演示打开woff格式的文件。文件下载地址

https://www.python-spider.com/static/font/challenge12/aiding.woff

演示代码

from fontTools.ttLib import TTFont


# 加载字体文件
font = TTFont('local.woff')

# 保存为xml文件
font.saveXML('local.xml')

# 获取各节点名称,返回为列表
print(font.keys())
# ['GlyphOrder', 'head', 'hhea', 'maxp', 'OS/2', 'hmtx', 'cmap', 'loca', 'glyf', 'name', 'post', 'GSUB']

# 获取getGlyphOrder节点的name值,返回为列表
print(
    font.getGlyphOrder())  # ['glyph00000', 'x', 'uniF013', 'uniF4D4', 'uniEE40', 'uniF7E1', 'uniF34B', 'uniE1A0', 'uniF1BE', 'uniE91E', 'uniF16F', 'uniF724']
print(
    font.getGlyphNames())  # ['glyph00000', 'uniE1A0', 'uniE91E', 'uniEE40', 'uniF013', 'uniF16F', 'uniF1BE', 'uniF34B', 'uniF4D4', 'uniF724', 'uniF7E1', 'x']

# 获取cmap节点code与name值映射, 返回为字典
print(
    font.getBestCmap())  # {120: 'x', 57760: 'uniE1A0', 59678: 'uniE91E', 60992: 'uniEE40', 61459: 'uniF013', 61807: 'uniF16F', 61886: 'uniF1BE', 62283: 'uniF34B', 62676: 'uniF4D4', 63268: 'uniF724', 63457: 'uniF7E1'}

# 获取glyf节点TTGlyph字体xy坐标信息
print(font['glyf'][
          'uniE1A0'].coordinates)  # GlyphCoordinates([(50, 335),(50, 468),(76, 544),(95, 638),(148, 676),(202, 710),(282, 710),(402, 710),(459, 617),(487, 574),(504, 501),(520, 437),(519, 335),(520, 271),(508, 166),(494, 126),(466, 46),(362, -39),(282, -49),(176, -35),(115, 37),(43, 121),(43, 335),(135, 335),(135, 154),(177, 95),(229, 35),(282, 35),(343, 35),(385, 107),(428, 155),(428, 339),(428, 515),(385, 576),(344, 635),(286, 635),(218, 635),(179, 583),(135, 506)])

# 获取glyf节点TTGlyph字体xMin,yMin,xMax,yMax坐标信息
print(font['glyf']['uniE1A0'].xMin, font['glyf']['uniE1A0'].yMin,
      font['glyf']['uniE1A0'].xMax, font['glyf']['uniE1A0'].yMax)  # 0 -49 521 711

# 获取glyf节点TTGlyph字体on信息
print(font['glyf'][
          'uniE1A0'].flags)  # array('B', [1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0])

# 获取GlyphOrder节点GlyphID的id信息, 返回int型
print(font.getGlyphID('uniE1A0'))  # 7

生成的xml文件
在这里插入图片描述

三、字体加密的通杀

1.静态的字体文件+固定顺序的字体

这类就是字体文件是固定的,而且坐标不变,字体的顺序也是不变的。这一类我们直接找到映射关系后可以直接写死替换,一劳永逸,也是最简单的字体反爬。

例如从这个网站下载woff文件:https://www.python-spider.com/static/font/challenge12/aiding.woff
,下载完打开woff
在这里插入图片描述
python解析出映射关系,直接replace替换字典

from fontTools.ttLib import TTFont

font = TTFont('./aiding.woff')
font.saveXML('./aiding.xml')
font_names = font.getGlyphOrder()
print(font_names)
woff_dict = {}
for name in font_names[1:]:
    woff_dict[name.replace('uni', '&#x')] = font.getGlyphID(name) if font.getGlyphID(name) != 10 else 0
print(woff_dict)

在这里插入图片描述

2.其他动态变化情况

这里把不是第一种的统一看成其他

  • 动态字体文件+固定字体顺序
  • 动态字体文件+动态编码+固定字体信息
  • 动态字体文件+动态编码+固定字体信息
  • 动态字体文件+动态编码+动态字体信息

这些的解决办法我们现在有一种大佬想的新方案:

传统的方式就是找到目标ttf 文件,人为得映射乱码和真实字符。但是当ttf更新频繁时,人为对照成本就很高了。针对上面的痛点,想了一种成本较低得方法来解决这个问题。通过调研发现Python 的image类是可以加载字体文件的,那结合机器学习文字识别那就可以很轻松的拿到乱码和字体的映射。现在问题是找到一个靠谱的汉字识别模型。对比市面上的汉字识别模型, 最终采用了cnocr 模型。当然使用模型是有准确率的,最终的结果最好还是自己验证一次。

环境安装:

python : 3.8.8

安装cnocr: pip install cnocr
如果报错 :
	 ERROR: Failed building wheel for Polygon3
直接通过whl 安装Polygon3
     https://www.lfd.uci.edu/~gohlke/pythonlibs/#polygon
即在上述链接中 选择 Polygon3-3.0.9.1-cp38-cp38-win_amd64.whl 下载安装即可

在实际执行中发现 cv2找不到 某个函数,不要犹豫,大概率是opencv-python 的差异
建议直接升级到最高版本
pip install --user opencv-python --upgrade

代码演示:

import os
from PIL import ImageFont, Image, ImageDraw

from cnocr import CnOcr
import numpy as np
from fontTools.ttLib import TTFont
import requests
from io import BytesIO


def font_to_img(code_list, filename, ignore_flag=True, score=0.95):
    normal_dict = {}
    be_padding_dict = {}
    ocr = CnOcr()
    """
        将字体画成图片
        code_list: 加密字符列表
        filename: 字体文件
        ignore_flag:是否忽视 sorce 返回结果
        score: 识别准确率默认 95%以上
    """
    for char_list in code_list:
        char_code = char_list.encode().decode()
        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))
        x, y = draw.textsize(char_code, font=font)
        draw.text(((img_size - x) // 2, (img_size - y) // 2), char_code, font=font, fill=0)
        # 将单通道 转为 三通道
        img = img.convert("RGB")
        # word = ocr.ocr_for_single_line("%s.jpg" % mame_ocr)
        word = ocr.ocr_for_single_line(np.array(img))
        if word["score"] >= score:
            # 处理重复名字
            # img.save("%s_%s.jpg" % (char_code, word["text"]))
            normal_dict[char_code] = word["text"]
        else:
            be_padding_dict[char_code] = word
            img.save("%s_%s_be_padding.jpg" % (char_code, word["text"]))
            if ignore_flag:
                normal_dict[char_code] = word["text"]
    return normal_dict, be_padding_dict


def ttf_parse(url, ttf_name):
    """
        根据url 获取返回值
    """
    response = requests.get(url).content
    font_parse = TTFont(BytesIO(response))
    font_parse.save(ttf_name)
    m_dict = font_parse.getBestCmap()
    unicode_list = []
    for key, _ in m_dict.items():
        unicode_list.append(key)
    # 获取需要判断的字符
    char_list = [chr(ch_unicode) for ch_unicode in unicode_list]
    normal_dict, error_dict = font_to_img(char_list, ttf_name)
    print(normal_dict)
    print(error_dict)
    # 删除字体文件
    os.remove(ttf_name)


if __name__ == '__main__':
    ttf_parse('https://s3plus.meituan.net/v1/mss_73a511b8f91f43d0bdae92584ea6330b/font/616c0c0d.woff', '1.jpg')

结果:

{'x': '', '\ue006': '其', '\ue00f': '町', '\ue03a': '觉', '\ue042': '意', '\ue055': '串', '\ue05e': '所', '\ue069': '气',
     '\ue07e': '3', '\ue083': '跟', '\ue084': '旅', '\ue08f': '际', '\ue0d1': '前', '\ue0dd': '费', '\ue0e5': '清',
     '\ue0ee': '成', '\ue0f8': '关', '\ue10b': '宾', '\ue10f': '苑', '\ue11c': '张长', '\ue11e': '楼', '\ue133': '5',
     '\ue143': '临', '\ue154': '笑', '\ue159': '凯', '\ue161': '色', '\ue16c': '拍', '\ue177': '少', '\ue17d': '座',
     '\ue189': '了', '\ue195': '差', '\ue19c': '房', '\ue1b7': '角', '\ue1be': '着', '\ue1d0': '的', '\ue1ea': '自',
     '\ue1ee': '也', '\ue1fc': '要', '\ue20a': '向', '\ue215': '没', '\ue216': '值', '\ue229': '客', '\ue22f': '金',
     '\ue236': '营', '\ue23b': '镇', '\ue247': '衣', '\ue24d': '度', '\ue257': '浦', '\ue26f': '啦', '\ue290': '餐',
     '\ue29f': '情', '\ue2a0': '让', '\ue2bb': '子', '\ue2c3': '纪', '\ue2d8': '于', '\ue2f3': '路', '\ue2f4': '机',
     '\ue2fa': '样', '\ue2fe': '宏', '\ue304': '宝', '\ue336': '横', '\ue337': '因', '\ue338': '人', '\ue33a': '京',
     '\ue34b': '找', '\ue34c': '线', '\ue358': '庆', '\ue36b': '真', '\ue374': '同', '\ue376': '排', '\ue379': '造',
     '\ue37c': '青', '\ue389': '馆', '\ue38e': '寓', '\ue390': '西', '\ue397': '总', '\ue3a0': '特', '\ue3a4': '带',
     '\ue3a7': '校', '\ue3ac': '光', '\ue3ae': '港', '\ue3cf': '春', '\ue3e4': '售', '\ue3f0': '正', '\ue402': '助',
     '\ue406': '香', '\ue40b': '适', '\ue416': '做', '\ue425': '容', '\ue42b': '余科', '\ue430': '讯', '\ue435': '面',
     '\ue440': '舟受', '\ue445': '锦', '\ue44e': '全', '\ue455': '惠', '\ue463': '玉', '\ue467': '窗', '\ue469': '员',
     '\ue487': '代', '\ue488': '学', '\ue492': '我', '\ue495': '都', '\ue498': '9', '\ue49b': '保', '\ue4a0': '铺',
     '\ue4a8': '巷', '\ue4ab': '饭', '\ue4ae': '顺', '\ue4b8': '8', '\ue4ba': '内', '\ue4c3': '栋', '\ue4ce': '发',
     '\ue4f3': '央', '\ue4f7': '器', '\ue4ff': '酸令', '\ue505': '用', '\ue508': '几', '\ue536': '在', '\ue537': '七',
     '\ue53c': '松', '\ue548': '2', '\ue553': '步', '\ue558': '卫', '\ue55e': '古', '\ue55f': '生', '\ue56c': '经',
     '\ue583': '杂', '\ue591': '店', '\ue597': '中', '\ue5b4': '嘉', '\ue5c2': '事', '\ue5c4': '庄', '\ue5c9': '艺',
     '\ue5d3': '无', '\ue5ec': '有', '\ue609': '然', '\ue60c': '谷', '\ue619': '社', '\ue61d': '专', '\ue634': '农',
     '\ue63b': '桌', '\ue63d': '能', '\ue640': '火', '\ue652': '品', '\ue656': '起', '\ue66a': '药', '\ue66b': '喝',
     '\ue66c': '每', '\ue673': '强', '\ue678': '公', '\ue688': '酱', '\ue697': '车', '\ue69b': '接', '\ue6a2': '富',
     '\ue6a7': '式', '\ue6a8': '江', '\ue6ac': '这', '\ue6ae': '美', '\ue6b4': '销', '\ue6b7': '算', '\ue6bd': '打',
     '\ue6e4': '景', '\ue6f2': '且', '\ue724': '材', '\ue730': '湾', '\ue744': '修', '\ue74c': '制', '\ue755': '文',
     '\ue756': '诚', '\ue758': '方', '\ue75a': '司', '\ue76e': '利', '\ue778': '泉', '\ue78d': '名', '\ue792': '东',
     '\ue795': '超', '\ue797': '底', '\ue7a0': '六', '\ue7ad': '字', '\ue7ba': '走', '\ue7be': '个', '\ue7c7': '钢',
     '\ue7d9': '是', '\ue7e4': '岭', '\ue7ff': '博', '\ue80d': '影', '\ue818': '完', '\ue829': '妆', '\ue831': '不',
     '\ue838': '更', '\ue848': '比', '\ue849': '赞', '\ue856': '候', '\ue85b': '安', '\ue85c': '院', '\ue85d': '便',
     '\ue862': '麻', '\ue864': '元', '\ue870': '坊', '\ue88c': '福', '\ue88d': '天', '\ue897': '心', '\ue89e': '太',
     '\ue8ad': '6', '\ue8b9': '与', '\ue8ce': '弄', '\ue8e2': '试', '\ue8ed': '限良', '\ue90d': '康', '\ue916': '省',
     '\ue917': '兴', '\ue91a': '管', '\ue920': '0', '\ue92a': '地', '\ue934': '银', '\ue941': '可', '\ue959': '时',
     '\ue967': '风', '\ue97e': '海', '\ue981': '但', '\ue989': '吉', '\ue990': '堂', '\ue996': '理', '\ue99e': '达',
     '\ue9a3': '胜', '\ue9b8': '年', '\ue9bb': '叉', '\ue9c0': '4', '\ue9ca': '网', '\ue9cc': '层', '\ue9de': '八',
     '\ue9e0': '粉', '\ue9e5': '上', '\ue9e6': '去', '\ue9ea': '处', '\ue9f1': '童', '\ue9fa': '性', '\uea01': '种',
     '\uea09': '量', '\uea0d': '彩', '\uea12': '健', '\uea27': '连', '\uea3b': '府', '\uea45': '湖', '\uea4f': '第',
     '\uea56': '厂', '\uea59': '较', '\uea6f': '贸', '\uea7c': '错', '\uea7f': '木', '\uea84': '段', '\uea98': '城',
     '\ueaa6': '门', '\ueaa7': '工', '\ueaab': '出', '\ueab1': '昌', '\ueabe': '重', '\ueac8': '日', '\uead0': '份',
     '\ueadc': '计', '\ueadd': '育', '\ueae2': '型', '\ueaf3': '矢口', '\ueafd': '三', '\ueb02': '产', '\ueb11': '泰',
     '\ueb1b': '停', '\ueb1d': '多', '\ueb3f': '汇', '\ueb49': '杨', '\ueb5a': '务', '\ueb64': '解', '\ueb67': '会',
     '\ueb6f': '斯', '\ueb75': '1', '\ueb8e': '果', '\uebb1': '训', '\uebbf': '部', '\uebfa': '振', '\uebfe': '汽',
     '\uec04': '贝', '\uec07': '盛', '\uec0b': '干', '\uec10': '沙', '\uec14': '放', '\uec1d': '奶', '\uec1f': '双',
     '\uec23': '维', '\uec29': '源', '\uec2f': '汉', '\uec4e': '武', '\uec54': '一', '\uec5d': '州', '\uec5e': '屋',
     '\uec6e': '养', '\uec6f': '选', '\uec83': '下', '\uec84': '和', '\uec9f': '边', '\ueca0': '星', '\uecb4': '开',
     '\uecbc': '买', '\uecbf': '瑞', '\uecce': '欢', '\uecd5': '石', '\uecd9': '医', '\uecda': '包', '\uecdd': '鑫',
     '\uecde': '爱', '\uece2': '以', '\ueceb': '家', '\uecf4': '迎', '\uecf6': '朝月', '\ued05': '很', '\ued09': '团',
     '\ued15': '饼', '\ued28': '快', '\ued2d': '明月', '\ued32': '祥', '\ued3b': '岗', '\ued4d': '周', '\ued6c': '活',
     '\ued7d': '服', '\ued89': '米', '\ued8a': '7', '\ued8e': '实', '\ued98': '四', '\ueda2': '马', '\uedb1': '鸡',
     '\uedc3': '桂', '\uedce': '作', '\uedd0': '棒', '\uedd8': '鞋', '\ueddd': '井', '\uede1': '记', '\uedf0': '微',
     '\uedf7': '黄', '\uedfb': '氏', '\uee16': '之', '\uee1a': '手', '\uee20': '还', '\uee24': '加', '\uee34': '尚',
     '\uee38': '力', '\uee44': '间', '\uee52': '才', '\uee56': '当', '\uee59': '评', '\uee73': '教', '\uee80': '境',
     '\uee81': '卖', '\uee9a': '近', '\uee9d': '酒', '\uee9e': '吧', '\ueeb0': '汤', '\ueebe': '头', '\ueec1': '鸿',
     '\ueec3': '室', '\ueec7': '世', '\ueecf': '德', '\ueed0': '热', '\ueef2': '看', '\uef13': '块', '\uef3c': '等',
     '\uef46': '龙', '\uef4b': '桥', '\uef57': '津', '\uef61': '滨', '\uef62': '局', '\uef64': '副', '\uef6f': '别',
     '\uef81': '旁', '\uef8b': '拉', '\uef8d': '体', '\uef8f': '万', '\uef90': '台', '\uefad': '十', '\uefae': '分',
     '\uefbd': '布', '\uefc4': '片牌', '\uefec': '办', '\uefee': '兰', '\ueff2': '山', '\ueff8': '单', '\uf00a': '料',
     '\uf01d': '回', '\uf01e': '园', '\uf020': '洗', '\uf034': '大', '\uf03f': '妇', '\uf042': '又', '\uf055': '蛋',
     '\uf05d': '烟', '\uf067': '行', '\uf069': '珠', '\uf081': '原', '\uf092': '南', '\uf0ab': '置', '\uf0b8': '后',
     '\uf0ba': '位', '\uf0bd': '配', '\uf0d0': '哈', '\uf0d4': '里', '\uf0d8': '丰', '\uf0dc': '皮', '\uf0e3': '想',
     '\uf0e4': '乡', '\uf0f9': '站', '\uf10a': '而', '\uf11c': '电', '\uf11e': '对', '\uf136': '峰', '\uf138': '云',
     '\uf14d': '凤', '\uf155': '厅', '\uf15a': '阿', '\uf15f': '刚', '\uf16a': '水', '\uf187': '丁', '\uf18a': '他',
     '\uf18c': '次', '\uf18e': '主', '\uf194': '来', '\uf199': '像', '\uf1af': '整', '\uf1b0': '道', '\uf1b1': '百',
     '\uf1ce': '区', '\uf1ee': '小', '\uf1f4': '铁', '\uf1fa': '培', '\uf20a': '环', '\uf211': '羊', '\uf22d': '感',
     '\uf237': '们', '\uf243': '那', '\uf244': '嫩', '\uf248': '点', '\uf250': '红', '\uf252': '购', '\uf261': '片',
     '\uf272': '批', '\uf282': '虾', '\uf289': '长', '\uf28d': '村', '\uf291': '果', '\uf29b': '如', '\uf2bc': '就',
     '\uf2c2': '信', '\uf2cb': '荣', '\uf2d3': '队人', '\uf2df': '塘', '\uf2ef': '紫', '\uf2fb': '糕', '\uf2fe': '虫工',
     '\uf309': '锅', '\uf30c': '口', '\uf31b': '味末', '\uf325': '过', '\uf329': '陵', '\uf32b': '饰', '\uf32d': '商',
     '\uf336': '食', '\uf33f': '甜', '\uf349': '态', '\uf34d': '友', '\uf35f': '女', '\uf362': '九', '\uf365': '货',
     '\uf36b': '合', '\uf373': '入', '\uf375': '幢童', '\uf393': '秀', '\uf396': '洲', '\uf3a1': '得', '\uf3a8': '绿',
     '\uf3bf': '永', '\uf3c1': '高', '\uf400': '价', '\uf41f': '五', '\uf422': '板', '\uf428': '挺', '\uf42d': '好',
     '\uf431': '老', '\uf438': '荐', '\uf443': '溪', '\uf45f': '业', '\uf462': '话', '\uf478': '术', '\uf49e': '二',
     '\uf4a0': '居', '\uf4a4': '科', '\uf4b0': '尔', '\uf4db': '街', '\uf4ec': '动', '\uf4fd': '市', '\uf50f': '佳',
     '\uf516': '非', '\uf51c': '厦', '\uf53d': '满', '\uf540': '塔', '\uf548': '幼', '\uf555': '政', '\uf55d': '本',
     '\uf57f': '些', '\uf590': '轩', '\uf594': '尝', '\uf5a2': '鱼', '\uf5ac': '最', '\uf5bd': '王', '\uf5c7': '定',
     '\uf5de': '附', '\uf5e8': '说', '\uf5ec': '联', '\uf5f4': '进', '\uf5f6': '技', '\uf5f7': '外', '\uf5f8': '华',
     '\uf5fa': '级', '\uf602': '沿', '\uf603': '安束', '\uf606': '济', '\uf630': '丽', '\uf632': '吃', '\uf63e': '烤',
     '\uf653': '期', '\uf655': '集', '\uf668': '牛', '\uf670': '岛', '\uf67c': '直', '\uf68d': '化', '\uf691': '北',
     '\uf698': '午', '\uf69d': '民', '\uf6b9': '鲜羊', '\uf6cd': '川', '\uf6d0': '油', '\uf6d8': '现', '\uf6f1': '隆',
     '\uf6f7': '己', '\uf6f8': '鸭', '\uf702': '田', '\uf712': '广', '\uf715': '柳', '\uf71d': '阿', '\uf722': '场',
     '\uf727': '花', '\uf72c': '甲', '\uf735': '调', '\uf746': '国', '\uf759': '肉', '\uf75f': '格', '\uf764': '精',
     '\uf778': '豆', '\uf779': '雅', '\uf780': '阳', '\uf78f': '师', '\uf7a7': '推', '\uf7ac': '为', '\uf7ad': '提',
     '\uf7b2': '旗', '\uf7b6': '建', '\uf7b7': '什', '\uf7c8': '平', '\uf7d0': '具', '\uf7d6': '号', '\uf7d7': '侧',
     '\uf7d9': '到', '\uf7e1': '梅', '\uf7f0': '茶', '\uf7f3': '设', '\uf7f6': '晚', '\uf803': '白', '\uf805': '莲',
     '\uf813': '只', '\uf814': '运', '\uf816': '给', '\uf821': '恒', '\uf824': '菜', '\uf838': '么', '\uf843': '足',
     '\uf84d': '你', '\uf853': '厨', '\uf85c': '烫', '\uf85f': '喜', '\uf867': '装', '\uf86c': '两', '\uf87d': '物',
     '\uf884': '河', '\uf888': '再', '\uf891': '交', '\uf89c': '朋', '\uf8c7': '常', '\uf8ca': '烧', '\uf8cf': '宁',
     '\uf8d7': '乐', '\uf8e1': '林', '\uf8ee': '通', '\uf8f9': '县', '\uf8fb': '儿', '\uf8fe': '新'}


以评分95% 做分割 ,下面是可能不对的,经过对比图片发现没有错误。只是评分较低。


    {'\ue05e': {'text': '所', 'score': 0.7101963758468628}, '\ue069': {'text': '气', 'score': 0.8201217651367188},
     '\ue07e': {'text': '3', 'score': 0.9448353052139282}, '\ue08f': {'text': '际', 'score': 0.8827687501907349},
     '\ue0dd': {'text': '费', 'score': 0.9348242282867432}, '\ue11c': {'text': '张长', 'score': 0.8512042164802551},
     '\ue133': {'text': '5', 'score': 0.8904429078102112}, '\ue154': {'text': '笑', 'score': 0.9278842210769653},
     '\ue159': {'text': '凯', 'score': 0.9020307064056396}, '\ue161': {'text': '色', 'score': 0.6160538196563721},
     '\ue17d': {'text': '座', 'score': 0.9377821683883667}, '\ue189': {'text': '了', 'score': 0.9472777843475342},
     '\ue1b7': {'text': '角', 'score': 0.9137881398200989}, '\ue1be': {'text': '着', 'score': 0.9061774611473083},
     '\ue29f': {'text': '情', 'score': 0.6765124201774597}, '\ue3f0': {'text': '正', 'score': 0.9489812254905701},
     '\ue406': {'text': '香', 'score': 0.9193495512008667}, '\ue42b': {'text': '余科', 'score': 0.31485822796821594},
     '\ue430': {'text': '讯', 'score': 0.7896761894226074}, '\ue440': {'text': '舟受', 'score': 0.4272177815437317},
     '\ue445': {'text': '锦', 'score': 0.93426513671875}, '\ue495': {'text': '都', 'score': 0.9491526484489441},
     '\ue498': {'text': '9', 'score': 0.9058276414871216}, '\ue4ae': {'text': '顺', 'score': 0.8457756638526917},
     '\ue4b8': {'text': '8', 'score': 0.745848536491394}, '\ue4ff': {'text': '酸令', 'score': 0.23059628903865814},
     '\ue536': {'text': '在', 'score': 0.9107916355133057}, '\ue53c': {'text': '松', 'score': 0.8348405957221985},
     '\ue548': {'text': '2', 'score': 0.7965168356895447}, '\ue5c2': {'text': '事', 'score': 0.9056740999221802},
     '\ue61d': {'text': '专', 'score': 0.780048131942749}, '\ue640': {'text': '火', 'score': 0.901986300945282},
     '\ue673': {'text': '强', 'score': 0.9025680422782898}, '\ue6a7': {'text': '式', 'score': 0.9470093846321106},
     '\ue6ae': {'text': '美', 'score': 0.9245206713676453}, '\ue6e4': {'text': '景', 'score': 0.5590194463729858},
     '\ue74c': {'text': '制', 'score': 0.7929206490516663}, '\ue755': {'text': '文', 'score': 0.9355360269546509},
     '\ue756': {'text': '诚', 'score': 0.9329637289047241}, '\ue758': {'text': '方', 'score': 0.9357324242591858},
     '\ue76e': {'text': '利', 'score': 0.7340298891067505}, '\ue7e4': {'text': '岭', 'score': 0.6351971626281738},
     '\ue7ff': {'text': '博', 'score': 0.9468564987182617}, '\ue848': {'text': '比', 'score': 0.8979260325431824},
     '\ue849': {'text': '赞', 'score': 0.8741719126701355}, '\ue856': {'text': '候', 'score': 0.7024070024490356},
     '\ue85d': {'text': '便', 'score': 0.61191725730896}, '\ue897': {'text': '心', 'score': 0.9427058100700378},
     '\ue8ad': {'text': '6', 'score': 0.7724475860595703}, '\ue8ed': {'text': '限良', 'score': 0.8311377763748169},
     '\ue920': {'text': '0', 'score': 0.5414958000183105}, '\ue92a': {'text': '地', 'score': 0.47658202052116394},
     '\ue967': {'text': '风', 'score': 0.9264501929283142}, '\ue9c0': {'text': '4', 'score': 0.8089628219604492},
     '\ue9de': {'text': '八', 'score': 0.4221823215484619}, '\ue9e6': {'text': '去', 'score': 0.9465771317481995},
     '\ue9ea': {'text': '处', 'score': 0.729453444480896}, '\ue9f1': {'text': '童', 'score': 0.8890518546104431},
     '\ue9fa': {'text': '性', 'score': 0.8406746983528137}, '\uea01': {'text': '种', 'score': 0.9463455677032471},
     '\uea0d': {'text': '彩', 'score': 0.9497383832931519}, '\uea56': {'text': '厂', 'score': 0.9360781311988831},
     '\ueaa6': {'text': '门', 'score': 0.9319864511489868}, '\ueab1': {'text': '昌', 'score': 0.8610723614692688},
     '\ueaf3': {'text': '矢口', 'score': 0.9479916095733643}, '\ueafd': {'text': '三', 'score': 0.9098818302154541},
     '\ueb1d': {'text': '多', 'score': 0.9341955780982971}, '\ueb3f': {'text': '汇', 'score': 0.926189661026001},
     '\ueb6f': {'text': '斯', 'score': 0.9391093254089355}, '\ueb8e': {'text': '果', 'score': 0.39117464423179626},
     '\uebb1': {'text': '训', 'score': 0.9340453743934631}, '\uec0b': {'text': '干', 'score': 0.5374392867088318},
     '\uec4e': {'text': '武', 'score': 0.9499560594558716}, '\uec54': {'text': '一', 'score': 0.8632733821868896},
     '\uec83': {'text': '下', 'score': 0.9410864114761353}, '\ueca0': {'text': '星', 'score': 0.9497742056846619},
     '\uecf6': {'text': '朝月', 'score': 0.8974940776824951}, '\ued2d': {'text': '明月', 'score': 0.5373875498771667},
     '\ued7d': {'text': '服', 'score': 0.4188182055950165}, '\ued8a': {'text': '7', 'score': 0.7986817359924316},
     '\uedb1': {'text': '鸡', 'score': 0.6929422616958618}, '\uedce': {'text': '作', 'score': 0.6247490644454956},
     '\ueddd': {'text': '井', 'score': 0.9002070426940918}, '\uee1a': {'text': '手', 'score': 0.9290779829025269},
     '\uee24': {'text': '加', 'score': 0.9063721895217896}, '\uee9e': {'text': '吧', 'score': 0.9220173358917236},
     '\ueec7': {'text': '世', 'score': 0.925752580165863}, '\ueecf': {'text': '德', 'score': 0.9239265322685242},
     '\uef64': {'text': '副', 'score': 0.9384047985076904}, '\uef6f': {'text': '别', 'score': 0.8920194506645203},
     '\uefad': {'text': '十', 'score': 0.8840975165367126}, '\uefc4': {'text': '片牌', 'score': 0.4957613945007324},
     '\uf03f': {'text': '妇', 'score': 0.8898952007293701}, '\uf042': {'text': '又', 'score': 0.8956716656684875},
     '\uf05d': {'text': '烟', 'score': 0.8573434948921204}, '\uf069': {'text': '珠', 'score': 0.75028395652771},
     '\uf0bd': {'text': '配', 'score': 0.7989603877067566}, '\uf0d8': {'text': '丰', 'score': 0.7629039883613586},
     '\uf0e4': {'text': '乡', 'score': 0.7125524878501892}, '\uf10a': {'text': '而', 'score': 0.9461195468902588},
     '\uf136': {'text': '峰', 'score': 0.9324420690536499}, '\uf14d': {'text': '凤', 'score': 0.8371238708496094},
     '\uf15f': {'text': '刚', 'score': 0.8563844561576843}, '\uf1ee': {'text': '小', 'score': 0.6941447257995605},
     '\uf20a': {'text': '环', 'score': 0.8093100786209106}, '\uf211': {'text': '羊', 'score': 0.817395806312561},
     '\uf22d': {'text': '感', 'score': 0.9368784427642822}, '\uf237': {'text': '们', 'score': 0.9287102818489075},
     '\uf244': {'text': '嫩', 'score': 0.7814606428146362}, '\uf29b': {'text': '如', 'score': 0.32676398754119873},
     '\uf2d3': {'text': '队人', 'score': 0.5490540862083435}, '\uf2fe': {'text': '虫工', 'score': 0.5634275674819946},
     '\uf309': {'text': '锅', 'score': 0.8993457555770874}, '\uf31b': {'text': '味末', 'score': 0.24660344421863556},
     '\uf32b': {'text': '饰', 'score': 0.6643277406692505}, '\uf375': {'text': '幢童', 'score': 0.3151859641075134},
     '\uf3a8': {'text': '绿', 'score': 0.7714439034461975}, '\uf42d': {'text': '好', 'score': 0.8344385027885437},
     '\uf45f': {'text': '业', 'score': 0.7493254542350769}, '\uf49e': {'text': '二', 'score': 0.8919293284416199},
     '\uf4ec': {'text': '动', 'score': 0.6594783663749695}, '\uf50f': {'text': '佳', 'score': 0.8723465204238892},
     '\uf516': {'text': '非', 'score': 0.9436918497085571}, '\uf5ec': {'text': '联', 'score': 0.5172083973884583},
     '\uf603': {'text': '安束', 'score': 0.613476037979126}, '\uf630': {'text': '丽', 'score': 0.9419771432876587},
     '\uf653': {'text': '期', 'score': 0.9299824237823486}, '\uf668': {'text': '牛', 'score': 0.643532931804657},
     '\uf67c': {'text': '直', 'score': 0.9217656850814819}, '\uf6b9': {'text': '鲜羊', 'score': 0.7307806015014648},
     '\uf6f8': {'text': '鸭', 'score': 0.7272024750709534}, '\uf712': {'text': '广', 'score': 0.9106811285018921},
     '\uf715': {'text': '柳', 'score': 0.8577496409416199}, '\uf722': {'text': '场', 'score': 0.6829107403755188},
     '\uf72c': {'text': '甲', 'score': 0.9237180948257446}, '\uf735': {'text': '调', 'score': 0.9441312551498413},
     '\uf78f': {'text': '师', 'score': 0.8918313980102539}, '\uf7b7': {'text': '什', 'score': 0.6794707179069519},
     '\uf803': {'text': '白', 'score': 0.949399471282959}, '\uf805': {'text': '莲', 'score': 0.939042866230011},
     '\uf814': {'text': '运', 'score': 0.9052926301956177}, '\uf838': {'text': '么', 'score': 0.9014909863471985},
     '\uf888': {'text': '再', 'score': 0.9475842714309692}, '\uf8fb': {'text': '儿', 'score': 0.8162266612052917}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1271199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习毕设项目 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&a…

CRM与ERP如何协同服务于企业

在当今的商业环境中&#xff0c;客户关系管理&#xff08;CRM&#xff09;和 Enterprise Resource Planning&#xff08;ERP&#xff09;是两个不可或缺的系统。它们各自独立&#xff0c;但也可以协同工作&#xff0c;以提供更高效、更全面的企业解决方案。这种协同作用可以在销…

使用功率MOSFET常见的一些问题(三)

使用功率MOSFET常见的一些问题&#xff08;三&#xff09; 1.体二极管2.封装和PCB布局注意事项3.MOS并联 1.体二极管 体二极管是 MOSFET 结构中的固有部分&#xff0c;由 p-body 层和 n-epi 层之间的 p-n 结形成&#xff0c;如图所示。功率MOSFET 是三端器件&#xff0c;其本体…

精进Linux运维:从基础到高级技巧

Linux基础 1. Linux操作系统概述 Linux是一个开源的操作系统内核&#xff0c;由Linus Torvalds在1991年创建。它的灵活性和强大性使其成为服务器和嵌入式设备上的首选操作系统。Linux有许多不同的发行版&#xff08;例如Ubuntu、CentOS、Debian等&#xff09;&#xff0c;每个…

vr智慧党建展厅超强参与感增强党员群众认同感、归属感

党建教育与VR虚拟现实技术的结合&#xff0c;是顺应现代信息化发展趋势的要求&#xff0c;不仅打破了传统党建教育的束缚&#xff0c;还丰富了党建宣传教育的渠道&#xff0c;党建教育VR云课堂平台是基于深圳华锐视点自主研发的VR云课堂平台中去体验各种VR党建教育软件或者视频…

音频修复和增强软件iZotope RX 10 mac特点介绍

iZotope RX 10 mac是一款音频修复和增强软件&#xff0c;主要特点包括&#xff1a; 声音修复&#xff1a;iZotope RX 10可以去除不良噪音、杂音、吱吱声等&#xff0c;使音频变得更加清晰干净。 音频增强&#xff1a;iZotope RX 10支持对音频进行音量调节、均衡器、压缩器、限…

改进LiteOS中物理内存分配算法

一、实验要求 优化TLSF算法&#xff0c;将Best-fit策略优化为Good-fit策略&#xff0c;进一步降低时间复杂度至O(1)。 优化思路&#xff1a; 1.初始化时预先为每个桶挂上若干空闲块&#xff0c;在实际分配时避免分割&#xff08;split&#xff09;操作&#xff0c;加速分配过…

免费使用GPT的网站

登录ChatGPT系统 登录ChatGPT系统 登录ChatGPT系统

使用VScode通过内网穿透在公网环境下远程连接进行开发

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

基础课15——语音合成

TTS是语音合成技术的简称&#xff0c;也称为文语转换或语音到文本。它是指将文本转换为语音信号&#xff0c;并通过语音合成器生成可听的语音。TTS技术可以用于多种应用&#xff0c;例如智能语音助手、语音邮件、语音新闻、有声读物等。 TTS技术通常包括以下步骤&#xff1a; …

ubuntu终端代理配置

ubuntu浏览器的无需手动设置,主要解决在终端中的配置问题,按照下面配置后可能会ping不通一些ip,但wget/git都是可以的,具体原因以后再分析 查找端口 首先要找到自己代理对应的HTTP端口,以QV2ray软件作为示例,我为8889 手动配置 # 配置系统proxy export http_proxy=1…

【腾讯云 HAI域探秘】使用高性能应用服务HAI快速开发一款赛博朋克风拼图游戏,化繁从简,低成本进入人工智能时代。

前言 人工智能&#xff08;AI&#xff09;是当今科技领域的热门话题&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;它可以让机器理解和生成自然语言。随着大型语言模型&#xff08;LLM&#xff09;的发展&#xff0c;如 GPT-3、DALL-E 等&#xf…

基于SSM医院住院管理系统

摘 要 随着时代的发展&#xff0c;医疗设备愈来愈完善&#xff0c;医院也变成人们生活中必不可少的场所。如今&#xff0c;已经2021年了&#xff0c;虽然医院的数量和设备愈加完善&#xff0c;但是老龄人口也越来越多。在如此大的人口压力下&#xff0c;医院住院就变成了一个问…

引领Serverless构建之路,亚马逊云科技re:Invent 2023首日主题演讲重磅发布

在每年的亚马逊云科技re:lnvent大会&#xff0c;由Peter DeSantis带来的《周一晚间直播》是re:lnvent大会的第一个并让人值得期待的主题演讲。作为亚马逊云科技高级副总裁&#xff0c;Peter发布了数据库和应用领域的三项Serverless创新&#xff0c;使客户能够更快、更轻松地扩展…

RT_Thread_msh_系统msh命令、使用msh时过滤ulog日志、添加msh命令(不带/带参)

1、msh配置 msh功能是自动开启的&#xff0c;配置如下&#xff0c;可以在“RT-Thread Settings”里去修改。 调试过程中遇到msh不能使用&#xff0c;理解msh也是一个线程&#xff0c;有自己的优先级20&#xff0c;高优先级的线程&#xff08;比如main是10&#xff09;如果一直…

自定义 element DatePicker组件指令 使选择器呈现为只读状态,用户无法直接编辑,但可以查看和选择日期

1.问题 现实中遇到列表的搜索条件使用DatePicker 组件进行开始结束时间筛选&#xff0c;但是手动修改input中的值&#xff0c;导致请求参数异常。比如讲clearable设置为false之后还是能手动清空输入框中的值。虽然组件提供了readonly 属性&#xff0c;但是也会让日期选择也无法…

java学习part22包装类

119-面向对象(高级)-包装类的理解_基本数据类型与包装类间的转换_哔哩哔哩_bilibili 1.包装类 2.基本转包装方式 2.1new方式 源码 2.2valueof&#xff08;&#xff09; 3.包装转基本 4.基本类型和包装类型的默认值不一样 比如boolean默认false Boolean默认null&#xff08;对…

电子学会 2023年9月 青少年软件编程Python编程等级考试二级真题解析(选择题+判断题+编程题)

青少年编程Python编程等级考试二级真题解析(选择题+判断题+编程题) 2023年9月 一、选择题(共25题,共50分) 以下代码运行结果是?( ) A. 宸宸 B. 杭杭 C. 玉玉 D. 州州 答案选:A 考点分析:考察python 列表操作 jxw=yyh[2][0],jxw的值是“拱宸桥”,jxw[1]的值是“宸”…

QT QGraphicsItem 图元覆盖导致鼠标点击事件不能传递到被覆盖图元

一、概述 在日常开发中&#xff0c;遇到这样一个问题&#xff0c;线图元和引脚图元重叠&#xff0c;导致点击引脚图元&#xff0c;没有进入引脚图元的鼠标点击事件中。 二、产生原因 如果您的 QGraphicsItem 上有一个图元覆盖了它&#xff0c;可能会导致鼠标事件无法正常触发…

软件设计之原型模式

原型模式是从一个对象再创建另一个可定制的对象&#xff0c;而且不需要知道任何创建的细节。拷贝分浅拷贝和深拷贝。浅拷贝无法拷贝引用对象。在面试的时候&#xff0c;我们会投多家公司&#xff0c;根据岗位的不同我们会适当调整。使用原型模式可以快速达到需求&#xff0c;下…