test
基于我们完整的讨论,以下是最终版技术文档。
项目技术任务说明(完整版 v3.0)
一、项目概述
开发一套头显下半脸面部追踪系统,包含训练软件和产品软件两个独立程序。硬件已确定:头显挂载摄像头,支持1080p MJPEG硬件输出,通过UVC协议连接头显,经5GHz Wi-Fi以UDP/RTP协议推送视频流至PC端进行推理。
核心目标
| 维度 | 目标 |
|---|---|
| 追踪精度 | 嘴部动作连续值回归,对标顶级动画公司面捕标准 |
| 输出标准 | 严格对齐Unified Expressions标准(127个参数完整输出框架) |
| 硬件范围 | 只输出下半脸相关参数(42个Base Shapes + 43个Blended Shapes) |
| 开放生态 | 不输出眼动相关参数,主动兼容其他品牌眼动追踪设备,合并为完整127维输出 |
| 延迟 | 端到端 < 15ms(v1.0),< 10ms(v2.0) |
| 分辨率优势 | 1080p采集(竞品QVGA),像素数27倍优势 |
| 目标用户 | VRChat玩家 + 虚拟直播 + 专业动画制作 |
二、核心竞争力
1080p高清采集:竞品仅支持QVGA(320×240),像素数27倍,能捕捉微表情和肌肉纹理细节
连续值回归:输出为[0-1]连续强度值,可驱动专业级3D角色
Unified Expressions全标准合规:127个参数框架完整覆盖,消费端无任何妥协
标注效率创新:带原点滚动条设计,标注效率提升2倍,左右对称天然保证
开放硬件生态:不输出眼动参数,主动兼容其他品牌眼动追踪设备,自动合并为完整面捕方案
OTA升级潜力:当前降采样推理保证速度,未来可切换高分辨率推理
三、技术理论基础
3.1 FACS(面部动作编码系统)
FACS是科学描述面部肌肉运动的标准,将表情拆解为动作单元(AU),每个AU的强度在A-E(或0-1)连续尺度上量化。
3.2 Blendshape(混合变形)
CG行业实现FACS的标准技术。每个Blendshape代表一个局部动作的“极值”形态,最终表情由所有Blendshape系数(0-1)加权组合。
3.3 Unified Expressions
VRChat面捕生态的事实标准,由VRCFaceTracking等工具广泛采用。共包含84个Base Shapes和43个Blended Shapes,总计127个参数。
3.4 三者关系
FACS(科学理论)
↓ 工程实现
Blendshape(CG技术)
↓ VRChat生态具体化
Unified Expressions(行业标准)四、硬件范围界定:你输出什么,不输出什么
4.1 你的摄像头能看到什么
下半脸1080p摄像头覆盖范围:嘴部、下巴、脸颊、舌头、部分鼻子(鼻孔边缘)
4.2 你的产品输出的参数(42个Base Shapes)
| 类别 | Base Shapes | 数量 |
|---|---|---|
| 下颌系列 | JawOpen, JawRight, JawLeft, JawForward, JawBackward | 5 |
| 嘴部动作系列 | MouthUpperUpRight, MouthUpperUpLeft, MouthLowerDownRight, MouthLowerDownLeft, MouthCornerPullRight, MouthCornerPullLeft, MouthFrownRight, MouthFrownLeft, MouthStretchRight, MouthStretchLeft, MouthDimpleRight, MouthDimpleLeft, MouthUpperDeepenRight, MouthUpperDeepenLeft, MouthPressRight, MouthPressLeft, MouthTightenerRight, MouthTightenerLeft | 18 |
| 唇部系列 | LipSuckCornerRight, LipSuckCornerLeft, LipSuckUpperRight, LipSuckUpperLeft, LipSuckLowerRight, LipSuckLowerLeft, LipPuckerUpperRight, LipPuckerUpperLeft, LipPuckerLowerRight, LipPuckerLowerLeft | 10 |
| 舌头系列 | TongueOut, TongueUp, TongueDown, TongueRight, TongueLeft, TongueRoll, TongueFlat | 7 |
| 脸颊系列 | CheekPuffRight, CheekPuffLeft | 2 |
| 合计 | 42 |
4.3 你的产品不输出的参数(让给眼动追踪设备)
| 类别 | Base Shapes | 数量 |
|---|---|---|
| 眼部系列 | EyeLookOutRight, EyeLookInRight, EyeLookUpRight, EyeLookDownRight, EyeLookOutLeft, EyeLookInLeft, EyeLookUpLeft, EyeLookDownLeft, EyeClosedRight, EyeClosedLeft, EyeSquintRight, EyeSquintLeft, EyeWideRight, EyeWideLeft, EyeDilationRight, EyeDilationLeft, EyeConstrictRight, EyeConstrictLeft | 18 |
| 眉毛系列 | BrowPinchRight, BrowPinchLeft, BrowLowererRight, BrowLowererLeft, BrowInnerUpRight, BrowInnerUpLeft, BrowOuterUpRight, BrowOuterUpLeft | 8 |
| 鼻子系列(部分) | NoseSneerRight, NoseSneerLeft, NasalDilationRight, NasalDilationLeft, NasalConstrictRight, NasalConstrictLeft | 6 |
| 合计 | 32 |
4.4 Blended Shapes的处理方式
所有43个Blended Shapes不经过模型预测,由产品软件层根据42个Base Shapes的值数学计算得出(参照Unified Expressions官方文档的Basis映射关系)。
五、训练软件需求(离线侧)
5.1 开发环境
| 项目 | 规格 |
|---|---|
| 语言 | Python 3.8+ |
| 框架 | PyTorch 或 TensorFlow |
| 硬件 | NVIDIA GPU(CUDA支持) |
| 依赖库 | OpenCV、Albumentations、ONNX、TensorBoard、NumPy |
5.2 数据管理
输入:下半脸裁剪图片(112×112×3,RGB),从1080p采集视频中抽帧获得。
5.3 标注方案:带原点滚动条(核心创新)
设计原则:不是标注42个独立参数,而是标注约20个「带原点的滚动条」,软件自动拆分为42个Unified Expressions。
标注控件类型:
| 控件类型 | 标注员操作 | 软件自动拆分为 |
|---|---|---|
| 强度滑块 + 左右偏移 | 拖动强度 + 拖动偏移原点 | *Right = max(0, 强度 + 偏移) × 0.5;*Left = max(0, 强度 - 偏移) × 0.5 |
| 强度滑块(无偏移) | 拖动强度 | 直接赋值(如JawOpen = 强度) |
| 二维方向拖拽 | 在平面拖拽方向点 | 映射到TongueUp/Down/Right/Left |
标注控件完整列表:
| # | 控件名称 | 控件类型 | 拆分为(Unified Expressions) |
|---|---|---|---|
| 1 | 下颌张合 | 强度滑块(无偏移) | JawOpen |
| 2 | 下颌左右移动 | 强度+偏移 | JawRight, JawLeft |
| 3 | 下颌前后移动 | 强度滑块(无偏移) | JawForward, JawBackward |
| 4 | 嘴角上扬 | 强度+偏移 | MouthCornerPullRight, MouthCornerPullLeft |
| 5 | 嘴角下压 | 强度+偏移 | MouthFrownRight, MouthFrownLeft |
| 6 | 嘴角外拉 | 强度+偏移 | MouthStretchRight, MouthStretchLeft |
| 7 | 上唇上提 | 强度+偏移 | MouthUpperUpRight, MouthUpperUpLeft |
| 8 | 下唇下压 | 强度+偏移 | MouthLowerDownRight, MouthLowerDownLeft |
| 9 | 唇部内吸 | 强度+偏移 | LipSuckCorner/Upper/Lower R/L(2个控件:上唇+下唇) |
| 10 | 噘嘴 | 强度+偏移 | LipPuckerUpper/Lower R/L(2个控件:上唇+下唇) |
| 11 | 舌头伸出 | 强度滑块(无偏移) | TongueOut |
| 12 | 舌头方向 | 二维方向拖拽 | TongueUp/Down/Right/Left |
| 13 | 舌头卷曲 | 强度滑块 | TongueRoll |
| 14 | 舌头平展 | 强度滑块 | TongueFlat |
| 15 | 鼓腮 | 强度+偏移 | CheekPuffRight, CheekPuffLeft |
| 16 | 唇部加深 | 强度+偏移 | MouthUpperDeepenRight, MouthUpperDeepenLeft |
| 17 | 唇部压紧 | 强度+偏移 | MouthPressRight, MouthPressLeft |
| 18 | 唇部收紧 | 强度+偏移 | MouthTightenerRight, MouthTightenerLeft |
| 19 | 酒窝 | 强度+偏移 | MouthDimpleRight, MouthDimpleLeft |
标注效率提升:
传统方式:42个独立滑块
你的方式:19个组合控件
标注效率提升:2.2倍
左右对称一致性:软件自动保证
5.4 标注存储格式
每张图片的标注存储为JSON:
{
"image_id": "frame_0001.jpg",
"annotations": {
"JawOpen": 0.72,
"JawRight": 0.0,
"JawLeft": 0.0,
"JawForward": 0.10,
"JawBackward": 0.0,
"MouthCornerPullRight": 0.88,
"MouthCornerPullLeft": 0.85,
"MouthFrownRight": 0.02,
"MouthFrownLeft": 0.01,
// ... 全部42个Base Shapes
},
"meta": {
"annotator": "user_01",
"timestamp": 1234567890,
"confidence": 0.95
}
}5.5 数据集采集
采集设备:产品硬件本身(头显挂载1080p摄像头)
采集人数:至少50人(不同性别、年龄、脸型),每人完成全套动作
采集动作序列(引导式录制程序):
| 步骤 | 动作 | 时长 | 目的 |
|---|---|---|---|
| 1 | 中性脸(自然状态) | 5秒 | 基线参照 |
| 2 | 张嘴→闭嘴循环(慢→快) | 15秒 | JawOpen覆盖 |
| 3 | 微笑→大笑→收回 | 15秒 | 嘴角上扬覆盖 |
| 4 | 悲伤/撇嘴→收回 | 15秒 | 嘴角下压覆盖 |
| 5 | 歪嘴(左→右交替) | 15秒 | Jaw左右覆盖 |
| 6 | 噘嘴→放松→噘嘴 | 15秒 | LipPucker覆盖 |
| 7 | 唇内吸(各种角度) | 15秒 | LipSuck覆盖 |
| 8 | 吐舌(正中→左→右→上→下) | 20秒 | 舌头全方向覆盖 |
| 9 | 舌头卷曲/平展 | 10秒 | TongueRoll/Flat覆盖 |
| 10 | 鼓腮→泄气循环 | 15秒 | CheekPuff覆盖 |
| 11 | 自由表情组合(自然说话) | 30秒 | 自然状态组合 |
5.6 模型架构(多输出回归)
┌─────────────────────────────────────┐
│ 输入:112×112×3 RGB │
└─────────────────┬───────────────────┘
▼
┌─────────────────────────────────────┐
│ 骨干网络:EfficientNet-Lite │
│ (预训练权重,ImageNet) │
└─────────────────┬───────────────────┘
▼
┌─────────────────────────────────────┐
│ 全局平均池化 → 1280维特征 │
└─────────────────┬───────────────────┘
▼
┌─────────────────────────────────────┐
│ 全连接层 → 256维 + ReLU + Dropout │
└─────────────────┬───────────────────┘
▼
┌─────────────────────────────────────┐
│ 输出层:42维线性输出 │
│ 激活函数:Sigmoid(严格[0-1]) │
└─────────────────────────────────────┘5.7 训练策略
损失函数:组合损失
Loss = MSE(pred, target)
+ 0.1 * 相关系数损失(保证参数间自然相关性)
+ 0.05 * 边界惩罚(强制输出在[0,1]区间)两阶段训练:
| 阶段 | 操作 | 学习率 | Epochs |
|---|---|---|---|
| 阶段一 | 冻结骨干网络,只训练全连接+输出层 | 0.001 | 30-50 |
| 阶段二 | 解冻骨干网络最后5层,全模型微调 | 0.0001 | 15-25 |
优化器:AdamW 批大小:32 早停策略:验证集损失连续5个epoch不下降则停止
5.8 评估指标
| 指标 | 说明 | v1.0目标 |
|---|---|---|
| MSE | 均方误差 | < 0.01 |
| MAE | 平均绝对误差 | < 0.08 |
| Pearson r | 预测值与真值的相关性 | > 0.85 |
| 单帧推理延迟 | 模型推理耗时 | < 5ms |
5.9 导出物
release_vX.Y.Z/
├── model_vX.Y.Z.onnx # 标准ONNX模型(明文,内部使用)
├── config.yaml # 输入尺寸、归一化参数
├── unified_expressions_42.json # 42个Base Shapes名称+索引映射
├── blended_shapes_formulas.json # 43个Blended Shapes计算公式
├── validation_report.html # 测试集评估报告
└── training_curves.png # 训练损失曲线六、产品软件需求(在线侧)
6.1 开发环境
| 项目 | 规格 |
|---|---|
| 语言 | C++17 |
| 推理引擎 | TensorRT(NVIDIA GPU) |
| 图像处理 | libjpeg-turbo + OpenCV |
| 网络 | Socket编程(UDP/RTP) |
| 构建工具 | CMake |
| 目标平台 | Windows 10/11 |
6.2 核心流程
UDP/RTP接收MJPEG流
→ JPEG解码(libjpeg-turbo)
→ BGR→RGB转换
→ 下半脸ROI裁剪
→ 缩放到112×112
→ 归一化
→ TensorRT推理(输出42维)
→ 软件计算43个Blended Shapes
→ 检测其他眼动设备(通过共享内存)
→ 合并数据为127维完整Unified Expressions
→ API输出6.3 视频接收模块
| 项目 | 规格 |
|---|---|
| 协议 | UDP + RTP(MJPEG-RTP标准流) |
| 默认端口 | 5000(可配置) |
| 接收线程 | 独立线程,非阻塞 |
| 缓冲策略 | 环形缓冲区缓存最近3-5帧 |
| 目标帧率 | 30fps |
| 超时处理 | 5秒无数据触发重连 |
6.4 预处理模块
| 步骤 | 技术方案 | 性能目标 |
|---|---|---|
| JPEG解码 | libjpeg-turbo(硬件加速) | < 2ms |
| 颜色转换 | OpenCV cvtColor | < 0.5ms |
| ROI裁剪 | 固定比例裁剪下半脸 | < 0.5ms |
| 缩放 | 双线性插值至112×112 | < 1ms |
| 归一化 | (pixel/255 - mean)/std | < 0.5ms |
| 合计 | < 5ms |
6.5 推理引擎模块
| 项目 | 规格 |
|---|---|
| 推理引擎 | TensorRT |
| 精度模式 | FP16 |
| 批处理 | batch_size = 1 |
| 输入尺寸 | 3×112×112 |
| 输出维度 | 42维(下半脸Base Shapes) |
| 推理延迟目标 | < 5ms |
| GPU显存占用 | < 500MB |
模型加载安全流程:
读取加密模型(.enc) → AES-256-GCM内存解密 → 加载至TensorRT Engine → 创建推理上下文 → 预热 → 主循环6.6 Blended Shapes计算层
43个Blended Shapes由软件层根据42个Base Shapes计算得出,不经过模型。
计算逻辑示例:
// 示例:MouthSmile = (MouthCornerPullRight + MouthCornerPullLeft) / 2
float MouthSmile = (params["MouthCornerPullRight"] + params["MouthCornerPullLeft"]) * 0.5f;
// 示例:MouthOpen = JawOpen
float MouthOpen = params["JawOpen"];
// 示例:CheekPuff = (CheekPuffRight + CheekPuffLeft) / 2
float CheekPuff = (params["CheekPuffRight"] + params["CheekPuffLeft"]) * 0.5f;完整43个Blended Shapes的计算公式,严格参照Unified Expressions官方文档的Basis列。
6.7 设备发现与数据合并模块(核心创新)
设计目标:自动检测系统中其他面捕设备,合并数据为完整127维Unified Expressions。
设备发现机制:
| 发现方式 | 检测内容 | 优先级 |
|---|---|---|
| VRCFaceTracking共享内存扫描 | 检测是否有其他设备已写入眼动参数 | 高 |
| Windows设备枚举 | 检测USB/蓝牙连接的已知眼动设备 | 中 |
| 配置文件手动指定 | 用户手动添加设备IP/端口 | 低(兜底) |
数据合并逻辑:
// 伪代码
UnifiedOutput MergeData(
YourDeviceOutput下半脸, // 42个Base Shapes + 43个Blended
OtherDeviceOutput上半脸 // 眼动设备输出的Eye+Brow参数
) {
UnifiedOutput result;
// 1. 所有参数初始化为默认值0
result.InitAllZero();
// 2. 填充你产品的下半脸数据(覆盖所有嘴部/下巴/脸颊/舌头参数)
result.Merge(下半脸, OverwriteStrategy.PREFER_YOUR_DEVICE);
// 3. 检测可用的眼动设备
auto eyeTracker = DetectEyeTracker();
if (eyeTracker.available) {
// 合并眼动数据(只填充Eye和Brow系列)
result.Merge(eyeTracker.data, OverwriteStrategy.PREFER_EYE_TRACKER);
result.meta.eye_tracker_detected = true;
result.meta.eye_tracker_name = eyeTracker.name;
} else {
result.meta.eye_tracker_detected = false;
// 眼动参数保持0值
}
// 4. 时间戳对齐
result.timestamp = AlignTimestamps(下半脸.timestamp, eyeTracker.timestamp);
// 5. 计算整体置信度
result.confidence = ComputeConfidence(下半脸, eyeTracker);
return result;
}6.8 输出接口
最终输出:严格对齐Unified Expressions标准,127个参数完整输出框架。
| 参数来源 | 数量 | 说明 |
|---|---|---|
| 你的产品直接预测 | 42个Base Shapes | 下半脸 |
| 软件层计算 | 43个Blended Shapes | 由Base Shapes推导 |
| 眼动设备提供 | 32个Base Shapes | Eye+Brow系列(如无则置0) |
| 合计 | 127个 | 完整Unified Expressions |
本地API(共享内存,供VRCFaceTracking调用):
共享内存名称: Local\FacialTracking_Unified
数据结构:
struct UnifiedOutput {
double timestamp;
float values[127]; // 完整127维Unified Expressions
uint8_t valid_count; // 有效参数数量
float confidence; // 整体置信度
uint8_t eye_tracker_present; // 是否有眼动设备
char eye_tracker_name[64]; // 眼动设备名称
};网络回调(HTTP/WebSocket):
POST /api/facial_output
{
"timestamp": 1234567890.123,
"standard": "unified_expressions",
"version": "5.0",
"values": {
// 127个参数完整输出
"JawOpen": 0.72,
"MouthCornerPullRight": 0.88,
// ... (全部127个)
},
"meta": {
"total_params": 127,
"params_from_your_device": 42,
"params_blended_calculated": 43,
"params_from_eye_tracker": 32,
"eye_tracker_detected": true,
"eye_tracker_name": "OtherBrand EyeTracker Pro",
"confidence": 0.94
}
}6.9 安全防护
| 防护措施 | 实现方式 | 触发时机 |
|---|---|---|
| 模型加密 | AES-256-GCM内存解密加载 | 模型加载时 |
| 代码混淆 | Chakravyuha/OaaS | 编译阶段 |
| 完整性校验 | 启动时校验自身二进制SHA256 | 程序启动 |
| 反调试 | 检测ptrace/IsDebuggerPresent | 启动+周期性检查 |
| 内存保护 | 推理完成后清零模型权重内存页 | 每次推理结束 |
七、技术架构总览图
┌─────────────────────────────────────────────────────────────────────────────┐
│ 完整技术架构 │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 训练软件(离线) │ │
│ │ │ │
│ │ 数据采集(1080p录制)→ 标注(19个带原点滚动条)→ 训练 → 导出ONNX │ │
│ │ │ │
│ │ 标注效率:2.2倍提升 模型输出:42维Base Shapes │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 产品软件(在线) │ │
│ │ │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ UDP/RTP │→ │ 预处理 │→ │ TensorRT │→ │ Base │ │ │
│ │ │ 接收MJPEG │ │ (解码+裁切)│ │ 推理 │ │ Shapes │ │ │
│ │ │ │ │ │ │ 42维输出 │ │ (42个) │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ └─────┬──────┘ │ │
│ │ │ │ │
│ │ ┌────────────────────────────────────────┼────┐ │ │
│ │ │ ▼ │ │ │
│ │ │ ┌────────────────────────────────────────┐ │ │ │
│ │ │ │ Blended Shapes计算层 │ │ │ │
│ │ ┌──────────────┤ │ 42个Base → 43个Blended(软件计算) │ │ │ │
│ │ │ │ └────────────────────────────────────────┘ │ │ │
│ │ │ │ ▼ │ │ │
│ │ │ │ ┌────────────────────────────────────────┐ │ │ │
│ │ │ │ │ 设备发现与数据合并层 │ │ │ │
│ │ │ │ │ • 检测眼动设备(共享内存扫描) │ │ │ │
│ │ │ │ │ • 合并下半脸+上半脸 │ │ │ │
│ │ │ │ │ • 输出127维完整Unified Expressions │ │ │ │
│ │ │ │ └────────────────────────────────────────┘ │ │ │
│ │ │ │ ▼ │ │ │
│ │ └──────────────┼─── ┌────────────────────────────────────────┐ │ │
│ │ │ │ API输出层 │ │ │
│ │ │ │ • 共享内存(VRCFaceTracking) │ │ │
│ │ │ │ • HTTP/WebSocket │ │ │
│ │ │ └────────────────────────────────────────┘ │ │
│ │ │ │ │
│ └──────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────────────────┐ │
│ │ 外部生态(可选) │ │
│ │ │ │
│ │ ┌─────────────────┐ ┌──────────────────────────────┐ │ │
│ │ │ 其他品牌眼动设备 │ ──合并─→│ VRCFaceTracking / VRChat │ │ │
│ │ │ (Eye+Brow参数) │ │ 127维Unified Expressions │ │ │
│ │ └─────────────────┘ └──────────────────────────────┘ │ │
│ └──────────────────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘八、版本规划
v1.0(MVP,5-6周)
| 训练软件 | 产品软件 |
|---|---|
| 标注工具(带原点滚动条原型) | UDP接收 + libjpeg-turbo解码 |
| 42维Base Shapes回归模型 | TensorRT推理引擎(FP16) |
| EfficientNet-Lite迁移学习 | 42维Base Shapes输出 |
| 20,000张标注数据(50人×部分动作) | 43个Blended Shapes计算层 |
| 模型精度:MAE < 0.10 | 本地API(共享内存) |
| ONNX导出 | 设备发现(基础版) |
| 推理延迟:< 15ms |
v2.0(8-10周后)
| 训练软件 | 产品软件 |
|---|---|
| 数据集扩充至100,000张 | 完整数据合并层(含眼动设备适配) |
| 引入时序模型(LSTM/GRU) | 支持多品牌眼动设备自动识别 |
| 模型精度:MAE < 0.06 | 输出127维完整Unified Expressions |
| 支持TongueRoll/TongueFlat | HTTP/WebSocket扩展接口 |
| 推理延迟:< 10ms | |
| 安全防护完整版 |
v3.0(长期规划)
| 训练软件 | 产品软件 |
|---|---|
| 自监督学习 + 数据飞轮 | VRCFaceTracking v5.0深度集成 |
| 云端训练 + OTA推送 | 多设备时间戳精确同步 |
| 全量84个Base Shapes(含鼻子系列) | 实时参数平滑与预测 |
v3.0(长期规划)
| 云端训练 + OTA推送 | 多设备时间戳精确同步 |
| 全量84个Base Shapes(含鼻子系列) | 实时参数平滑与预测 |
九、接口契约(训练软件 ⇄ 产品软件)
| 项目 | 规格 |
|---|---|
| 模型输入 | 112 × 112 × 3(RGB),归一化值域[0-1] |
| 模型输出 | 42维浮点数数组,[0-1]连续值 |
| 输出顺序 | 按Unified Expressions官方Base Shapes顺序排列 |
| 配置文件 | config.yaml:包含inputmean、inputstd、输出维度 |
| 参数映射 | unified_expressions_42.json:索引→参数名称映射 |
| Blended计算 | blended_shapes_formulas.json:43个Blended计算公式 |
| 版本命名 | 语义化版本号(vX.Y.Z) |
| 模型文件 | model_{version}.enc(AES加密) |
十、开发阶段任务分解
| 周次 | 训练软件任务 | 产品软件任务 |
|---|---|---|
| 第1周 | 搭建Python环境,数据加载pipeline,标注工具原型开发 | 搭建C++工程(CMake),UDP/RTP接收模块 |
| 第2周 | EfficientNet-Lite模型搭建,公开数据集验证 | JPEG解码(libjpeg-turbo)+ 预处理pipeline |
| 第3周 | 数据采集启动(50人引导式录制),标注工具正式使用 | TensorRT集成,模型加载+推理循环(42维) |
| 第4周 | 首轮20,000张数据标注完成,正式训练启动 | Blended Shapes计算层实现 |
| 第5周 | 模型评估、导出ONNX、AES加密 | 设备发现模块开发,本地API(共享内存) |
| 第6周 | 交付v1.0模型 | 端到端联调,性能压测,v1.0发布 |
十一、注意事项
代码完全隔离:训练代码与产品代码完全分离,产品发布包不含明文模型
1080p数据保留:推理时降采样至112×112,原始1080p视频全部存档作为后续训练素材
标注工具是关键路径:带原点滚动条的标注工具直接决定数据质量和标注效率,建议优先开发
开放生态优先:主动兼容其他品牌眼动设备是核心卖点,设备发现与合并模块需提前设计
Unified Expressions全标准合规:127个参数框架完整输出,消费端无任何妥协
数据合规:面部视频涉及生物特征数据,采集需获得用户知情同意
这份文档涵盖了从技术选型到开发落地的完整路径,可直接作为团队开发指南和对外技术沟通文档。如需进一步细化某个模块,随时告诉我。