小智AI语音对话盒子的自定义主题(包括唤醒词模型、表情包、文本字体、聊天背景),在线生成和导出 assets.bin 文件。
用户要自定义一个 assets.bin 文件,分为 3 个步骤。
- Step 1:选择芯片型号,屏幕类型与分辨率
- Step 2:主题设计(使用多个tab来分别完成不同项目的配置)
- Step 3:待打包生成的内容清单以及生成按钮
给出一些常见的板子的快捷选择配置项,例如
- 立创·实战派 ESP32-S3,配置为 esp32s3,LCD 320x240,RGB565
- ESP-BOX-3,配置为 esp32s3,LCD 320x240,RGB565
- 无名科技·星智 1.54 TFT,配置为 esp32s3,LCD 240x240,RGB565
- Surfer C3 1.14 TFT,配置为 esp32c3,LCD 240x135,RGB565
也可以自定义芯片(可以选择 esp32s3,esp32c3,esp32p4,esp32c6),自定义分辨率大小,颜色目前只支持 16位的RGB565
对于 C3/C6 芯片,只支持 WakeNet9s 的唤醒词模型。 对于 S3/P4 芯片,只支持 WakeNet9 的唤醒词模型。
列表如下,第一列为唤醒词名称,其他列为值。
| wake words | WakeNet9s | WakeNet9 |
|---|---|---|
| Hi,乐鑫 | wn9s_hilexin | wn9_hilexin |
| Hi,ESP | wn9s_hiesp | wn9_hiesp |
| 你好小智 | wn9s_nihaoxiaozhi | wn9_nihaoxiaozhi_tts |
| Hi,Jason | wn9s_hijason_tts2 | wn9_hijason_tts2 |
| 你好喵伴 | wn9_nihaomiaoban_tts2 | |
| 小爱同学 | wn9_xiaoaitongxue | |
| Hi,M Five | wn9_himfive | |
| Alexa | wn9_alexa | |
| Jarvis | wn9_jarvis_tts | |
| Computer | wn9_computer_tts | |
| Hey,Willow | wn9_heywillow_tts | |
| Sophia | wn9_sophia_tts | |
| Mycroft | wn9_mycroft_tts | |
| Hey,Printer | wn9_heyprinter_tts | |
| Hi,Joy | wn9_hijoy_tts | |
| Hey,Wand | wn9_heywanda_tts | |
| Astrolabe | wn9_astrolabe_tts | |
| Hey,Ily | wn9_heyily_tts2 | |
| Hi,Jolly | wn9_hijolly_tts2 | |
| Hi,Fairy | wn9_hifairy_tts2 | |
| Blue Chip | wn9_bluechip_tts2 | |
| Hi,Andy | wn9_hiandy_tts2 | |
| Hi,Wall E/Hi,瓦力 | wn9_hiwalle_tts2 | |
| 你好小鑫 | wn9_nihaoxiaoxin_tts | |
| 小美同学 | wn9_xiaomeitongxue_tts | |
| Hi,小星 | wn9_hixiaoxing_tts | |
| 小龙小龙 | wn9_xiaolongxiaolong_tts | |
| 喵喵同学 | wn9_miaomiaotongxue_tts | |
| Hi,喵喵 | wn9_himiaomiao_tts | |
| Hi,Lily/Hi,莉莉 | wn9_hilili_tts | |
| Hi,Telly/Hi,泰力 | wn9_hitelly_tts | |
| 小滨小滨/小冰小冰 | wn9_xiaobinxiaobin_tts | |
| Hi,小巫 | wn9_haixiaowu_tts | |
| 小鸭小鸭 | wn9_xiaoyaxiaoya_tts2 | |
| 璃奈板 | wn9_linaiban_tts2 | |
| 小酥肉 | wn9_xiaosurou_tts2 | |
| 小宇同学 | wn9_xiaoyutongxue_tts2 | |
| 小明同学 | wn9_xiaomingtongxue_tts2 | |
| 小康同学 | wn9_xiaokangtongxue_tts2 | |
| 小箭小箭 | wn9_xiaojianxiaojian_tts2 | |
| 小特小特 | wn9_xiaotexiaote_tts2 | |
| 你好小益 | wn9_nihaoxiaoyi_tts2 | |
| 你好百应 | wn9_nihaobaiying_tts2 | |
| 小鹿小鹿 | wn9_xiaoluxiaolu_tts2 | |
| 你好东东 | wn9_nihaodongdong_tts2 | |
| 你好小安 | wn9_nihaoxiaoan_tts2 | |
| 你好小脉 | wn9_ni3hao3xiao3mai4_tts2 |
唤醒词参考 spiffs_assets/pack_model.py 把 share/wakenet_model 下对应的模型目录打包成 srmodels.bin
用户可以选择预设字体(位于 share/fonts 目录),无需字体制作过程,常用字体有:
- font_puhui_14_1:阿里巴巴普惠体,涵盖常用字7000个,字号14px,bpp1
- font_puhui_16_4:阿里巴巴普惠体,涵盖常用字7000个,字号16px,bpp4
- font_puhui_20_4:阿里巴巴普惠体,涵盖常用字7000个,字号20px,bpp4
- font_puhui_30_4:阿里巴巴普惠体,涵盖常用字7000个,字号30px,bpp4
用户也可以上传自定义字体:
- 需要选择本地字体文件,目前支持TTF与WOFF格式。
- 选择字号(范围限制在8-80之间,常用为14,16,20和30),选择bpp(范围为1,2,4)
- 选择字符集(GB2312 7445个字符、DeepSeek R1 7405个字符),默认选择 DeepSeek R1
自定义字体参考 lv_font_conv/lib/convert.js 转换成 cbin 格式,转换后的文件命名为 font_[字体名][字号][BPP].bin
一个常见的表情集合一共包含 21 张图片,其中一张为 neutral 默认表情,其余为表达不同情绪的表情。 不同表情对应的 Emoji 如下:
| 😶 | neutral | | 🙂 | happy | | 😆 | laughing | | 😂 | funny | | 😔 | sad | | 😠 | angry | | 😭 | crying | | 😍 | loving | | 😳 | embarrassed | | 😯 | surprised | | 😱 | shocked | | 🤔 | thinking | | 😉 | winking | | 😎 | cool | | 😌 | relaxed | | 🤤 | delicious | | 😘 | kissy | | 😏 | confident | | 😴 | sleepy | | 😜 | silly | | 🙄 | confused |
用户可以选择预设表情包,预设表情有:
- Twemoji 32x32 PNG (位于
share/twemoji32) - Twemoji 64x64 PNG (位于
share/twemoji64)
用户也可以自定义表情包:
- 需要设置一个统一的图片大小 width x height,不能大于屏幕分辨率。
- 选择动态图片(GIF)或静态透明背景图片(PNG)格式
- 必须要提供一张默认图片作为 neutral 表情(大小会自动适配为 widght x height)
- 其他表情为可选,如果用户不修改其他表情图片,则默认使用 neutral 表情来显示。
背景分为浅色模式和深色模式两种配置,默认为颜色配置
- 默认浅色模式为 #ffffff,深色模式为 #121212
用户可以修改默认颜色,也可以加入静态图片作为背景。 静态图片可以为两张不一样的图片,也可以配置为一张图。 背景图片会自动适配屏幕分辨率的大小,格式通常为RGB565的位图,带64字节的header,内容为lv_image_dsc_t。
用户在主题设计的过程中,可以随时点击右上角的生成按钮,通过弹窗的方式,显示要打包的资源清单。 用户点击“确定”后,开始等待生成,如果用户自定义了字体文件,则制作字体需要的时间会比较长,制作结果可以缓存起来,重新生成的时候速度更快。
现在已经实现了浏览器端本地生成 assets.bin 的功能,无需后端 API。
项目现在使用完全基于浏览器的本地生成方案:
- WakenetModelPacker.js - 模仿
pack_model.py的功能,在浏览器端打包唤醒词模型为 srmodels.bin - SpiffsGenerator.js - 模仿
spiffs_assets_gen.py的功能,生成最终的 assets.bin 文件 - AssetsBuilder.js - 协调各个模块,模仿
build.py的资源处理流程
- 加载用户配置
- 处理字体文件(预设字体或自定义字体转换)
- 从
share/wakenet_model/加载并打包唤醒词模型 - 处理表情图片(预设或自定义)
- 处理背景图片并转换为RGB565格式
- 生成 index.json 索引文件
- 使用 SPIFFS 格式打包所有文件为 assets.bin
生成的 assets.bin 包含索引文件 index.json,内容大概如下:
例子1:
{
"version": 1,
"chip_model": "esp32s3",
"display_config": {
"width": 320,
"height": 240,
"monochrome": false,
"color": "RGB565"
},
"srmodels": "srmodels.bin",
"text_font": "font_puhui_common_30_4.bin",
"skin": {
"light": {
"text_color": "#000000",
"background_color": "#FFFFFF",
"background_image": "background_light.raw"
},
"dark": {
"text_color": "#FFFFFF",
"background_color": "#121212",
"background_image": "background_dark.raw"
}
},
"emoji_collection": [
{
"name": "sleepy",
"file": "sleepy.png"
},
...
]
}例子2:
{
"version": 1,
"chip_model": "esp32c3",
"display_config": {
"width": 240,
"height": 240,
"monochrome": false,
"color": "RGB565"
},
"srmodels": "srmodels.bin",
"text_font": "font_puhui_common_16_4.bin",
"skin": {
"light": {
"text_color": "#000000",
"background_color": "#FFFFFF",
},
"dark": {
"text_color": "#FFFFFF",
"background_color": "#121212"
}
},
"emoji_collection": [
{
"name": "sleepy",
"file": "sleepy.png"
},
...
]
}