小智AI设备实现繁体中文显示

想象一下这样的场景:你买了一台小智AI设备,但是发现它只能显示简体中文。对于习惯使用繁体中文的用户来说,这就像买了一台只能显示英文的手机一样,使用起来很不方便。

具体问题

  • 设备收到LLM返回的简体中文消息,但用户希望看到繁体中文
  • 用户的语音输入被显示为简体中文,但希望显示为繁体中文
  • 系统提示信息都是简体中文,不符合用户习惯

为什么会有这个问题?

技术原因

  1. ESP32芯片限制:这是一个嵌入式设备,内存和存储空间都很有限
  2. 原始设计:开发时主要考虑简体中文用户,没有内置繁体支持
  3. 字体问题:即使有繁体字体,也需要解决文字转换的问题

用户需求

  • 台湾、香港、澳门等地区的用户习惯繁体中文
  • 海外华人社区普遍使用繁体中文

解决思路

在小智AI的屏幕上显示的文字可以分为三大类:

  • 系统UI
  • 用户语音输入经ASR(Automatic Speech Recognition,自动语音识别)转换得到的文字
  • LLM(Large Language Model,大型语言模型)的响应文字

对于系统UI,只需要将系统语言通过 idf.py menuconfig 切换为繁体中文即可。
对于ASR和LLM输出的文字,有以下两种解决方案。

方案对比

方案1:云端转换

  • 将LLM和ASR配置为以繁体中文输出
  • 或者不修改LLM和ASR的配置,使其仍以简体中文输出,在服务器转换为繁体中文后返回给小智
  • 优点:转换准确,支持多种语言
  • 缺点:需要网络连接,有延迟,可能泄露隐私

方案2:本地转换

  • 在设备内部直接转换,不需要网络
  • 优点:速度快,无延迟,保护隐私
  • 缺点:需要占用一些存储空间

我们选择了方案2,因为我们没有权限修改服务器,ESP32虽然资源有限,但存储空间还是够用的。

核心思路

简单来说:我们准备一本"简繁对照字典",设备收到简体中文时,就查这本字典,找到对应的繁体中文显示出来。

具体实现

  1. 收集大量的简繁对照数据(比如"计算机"对应"計算機")
  2. 把这些数据转换成设备能快速查找的格式
  3. 在设备显示文字之前,先查字典转换
  4. 转换完成后,显示繁体中文

技术实现

第一步:准备"字典"

我们需要一个包含大量简繁对照的数据库。幸运的是,开源项目OpenCC已经帮我们整理好了这些数据,包括:

  • 单字对照:如"发"对应"發"
  • 短语对照:如"鼠标"对应"滑鼠"

第二步:制作"电子字典"

原始数据是文本格式,设备查找起来很慢。我们需要:

  1. 把文本数据转换成数组格式
  2. 按照查找效率优化数据结构
  3. 生成设备能直接使用的代码文件

关键优化

  • 按首字母建立索引,就像字典的字母索引一样
  • 短语按长度排序,优先匹配长短语(比如"中华人民共和国"比"中国"优先级高)
  • 使用二分查找,快速定位目标数据

第三步:编写"查字典"程序

设备需要知道如何查字典,我们实现了:

  1. UTF-8解码:把输入的中文字符转换成数字编码
  2. 短语查找:先尝试找最长的匹配短语
  3. 单字回退:如果找不到短语,就查单个字
  4. UTF-8编码:把转换结果重新编码成字符

查找策略

  • 优先尝试短语匹配,因为"计算机→計算機"比"计→計"+"算→算"+"机→機"的转换效率更高
  • 如果短语匹配失败,再逐个字符转换
  • 这样既保证了准确性,又提高了效率

第四步:解决字体问题

关键发现:即使文字转换成功了,还有一个重要问题需要解决——字体文件!

字体问题分析

  • 设备原本使用的字体文件 font_puhui_14_1.c 只包含简体中文字符
  • 很多繁体字在字体文件中是缺失的
  • 即使转换成功,缺失的繁体字仍然无法正常显示,会显示为方框或空白

字体文件结构

// font_puhui_14_1.c 文件包含:
// 1. 英文字符(ASCII 32-127)
// 2. 简体中文字符(常用汉字)
// 3. 标点符号和数字
// 4. 但缺少大部分繁体字符

字体解决方案

  1. 字体文件分析:检查现有字体文件包含哪些字符
  2. 缺失字符统计:找出哪些繁体字在字体中缺失
  3. 字体补全:使用字体工具(如LVGL字体转换器)添加缺失的繁体字符
  4. 字体优化:确保字体文件大小在可接受范围内

具体操作
使用LVGL字体转换器添加繁体字符,重新生成并替换原始的font_puhui_14_1.c 文件

posted @ 2025-08-16 17:17  icuic  阅读(178)  评论(0)    收藏  举报