小智 assets.bin打包分析
- 打包流程
这个项目使用 ESP32 的 memory-mapped assets 机制来打包资源文件。主要涉及以下脚本:
主要打包脚本:
- scripts/spiffs_assets/build.py - 主打包脚本
- scripts/spiffs_assets/spiffs_assets_gen.py - 底层打包工具
- scripts/build_default_assets.py - 根据 sdkconfig 自动构建资源
打包步骤:
1. 收集资源文件到 build/assets/ 目录
2. 生成 index.json(描述资源清单)
3. 打包成 assets.bin
- Assets.bin 包含的内容
根据代码分析,assets.bin 可以包含以下资源:
a) 语音识别模型 (srmodels.bin)
- 唤醒词模型 (wakenet_model) - 例如 “你好小智”
- 多网络模型 (multinet_model) - 用于语音命令识别
- 位置:从 managed_components/espressif__esp-sr/model/ 打包而来
b) 字体文件
- 文本字体 (text_font) - .bin 格式
- 例如:font_puhui_common_20_4.bin
- 位置:从 managed_components/78__xiaozhi-fonts/cbin/ 目录
c) 表情/图标集合
- emoji_collection - 表情动画文件(.eaf, .bin, .png 格式)
- icon_collection - 图标文件
- 位置:从配置的表情目录,例如 emote 动画文件
d) 布局配置
- layout.json - 屏幕元素布局配置
- 包含位置、对齐方式、尺寸等信息
e) 索引文件
- index.json - 资源清单文件
- 版本号
- 各资源文件名映射
- 配置信息
- Assets.bin 二进制格式
根据 assets.cc:44-101 和 spiffs_assets_gen.py,二进制格式如下:
[Header - 12 bytes]
+0x00: uint32_t - 文件数量
+0x04: uint32_t - 校验和 (16-bit checksum)
+0x08: uint32_t - 数据长度
[File Table]
每个文件条目 (44 bytes):
+0x00: char[32] - 文件名 (固定32字节)
+0x20: uint32_t - 文件大小
+0x24: uint32_t - 文件偏移
+0x28: uint16_t - 宽度 (如果是图片)
+0x2A: uint16_t - 高度 (如果是图片)
[File Data]
每个文件数据:
0x5A 0x5A (magic header)
-
运行时加载流程 (assets.cc)
-
InitializePartition() - 查找 “assets” 分区
-
esp_partition_mmap() - 内存映射整个分区
-
验证校验和
-
解析文件表,建立文件名到偏移的映射
-
Apply() - 应用资源:
- 加载语音模型
- 设置字体
- 加载表情集合
- 应用布局配置
-
如何手动打包
以下是手动打包命令示例:
cd /data/moyo_2.0.3/scripts/spiffs_assets
方法1: 使用 build.py
python3 build.py
–wakenet_model …/…/managed_components/espressif__esp-sr/model/wakenet_model/wn9_nihaoxiaozhi
–text_font …/…/managed_components/78__xiaozhi-fonts/cbin/font_puhui_common_20_4.bin
–res_path <emote资源路径>
–target_board <板子配置路径>
方法2: 使用 build_default_assets.py (自动从sdkconfig读取)
python3 …/build_default_assets.py
–sdkconfig …/…/sdkconfig
–builtin_text_font font_puhui_basic_16_4
–emoji_collection emojis_64
–output build/assets.bin
生成的 assets.bin 将包含所有打包的资源,需要烧录到 ESP32 的 “assets” 分区。
- 当前项目包含的资源
根据选择(index.json line 106),这个项目的 assets.bin 至少包含:
- index.json - 资源索引
- 可能还有字体、表情、语音模型等(取决于构建配置)
更多推荐


所有评论(0)