Skip to content

xiangxin1025/xiaozhi-assets-generator

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 

Repository files navigation

小智 AI 自定义 Assets 单页应用

应用目的

小智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

主题设计

Tab 1: 唤醒词配置

对于 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.pyshare/wakenet_model 下对应的模型目录打包成 srmodels.bin

Tab 2:字体配置

用户可以选择预设字体(位于 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

Tab 3:表情集合

一个常见的表情集合一共包含 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 表情来显示。

Tab 4:聊天背景

背景分为浅色模式和深色模式两种配置,默认为颜色配置

  • 默认浅色模式为 #ffffff,深色模式为 #121212

用户可以修改默认颜色,也可以加入静态图片作为背景。 静态图片可以为两张不一样的图片,也可以配置为一张图。 背景图片会自动适配屏幕分辨率的大小,格式通常为RGB565的位图,带64字节的header,内容为lv_image_dsc_t。

生成 assets.bin

用户在主题设计的过程中,可以随时点击右上角的生成按钮,通过弹窗的方式,显示要打包的资源清单。 用户点击“确定”后,开始等待生成,如果用户自定义了字体文件,则制作字体需要的时间会比较长,制作结果可以缓存起来,重新生成的时候速度更快。

现在已经实现了浏览器端本地生成 assets.bin 的功能,无需后端 API。

技术实现

浏览器端生成 assets.bin

项目现在使用完全基于浏览器的本地生成方案:

  1. WakenetModelPacker.js - 模仿 pack_model.py 的功能,在浏览器端打包唤醒词模型为 srmodels.bin
  2. SpiffsGenerator.js - 模仿 spiffs_assets_gen.py 的功能,生成最终的 assets.bin 文件
  3. AssetsBuilder.js - 协调各个模块,模仿 build.py 的资源处理流程

生成流程

  1. 加载用户配置
  2. 处理字体文件(预设字体或自定义字体转换)
  3. share/wakenet_model/ 加载并打包唤醒词模型
  4. 处理表情图片(预设或自定义)
  5. 处理背景图片并转换为RGB565格式
  6. 生成 index.json 索引文件
  7. 使用 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"
        },
        ...
    ]
}

About

自定义ASSET 教程 #1189

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • JavaScript 54.0%
  • Vue 45.7%
  • Other 0.3%