舌诊情绪识别_技术选型.md 11 KB

舌诊 & 情绪识别 — 技术选型报告

基于项目 cfc-langgraph(FastAPI + LangGraph + ChromaDB,端口 9000)+ cfc-backend(Spring Boot)现有架构,面向微信小程序用户场景。


一、舌诊(Tongue Diagnosis)

1.1 推荐方案对比

维度 A. TongueDiagnosis.AI(开箱即用) B. TOM 分割 + ResNet50(自训) C. MMIR-TCM + Qwen3-VL(MLLM)
核心模型 YOLOv5 + SAM + ResNet50 + Deepseek SAM 微调(TOM)+ U2Net-MT 分割 + ViT 分类 Memory-SAM + Qwen3-VL fine-tune
输出维度 4 维:舌色/苔色/苔厚/苔腻 20 类病理标签(TMC-Tongue)+ 11 类舌象特征 结构化诊断报告 + 处方建议
模型总大小 ~1.2 GB(含 SAM + ResNet50 + YOLO) ~200 MB(U2Net-MT + ViT) ~28 GB(Qwen3-VL 需 GPU)
推理延迟(GPU) 0.8–2.0s/张 0.3–0.8s/张 3–8s/张(含 LLM 生成)
推理延迟(CPU) 4–8s/张(SAM 推理慢) 1–2s/张 不可行(模型太大)
准确率 舌色分类 ~86%,苔色 ~84% 舌色 ROC-AUC 0.89–0.99,裂纹 0.97 超 GPT-4o / Gemini 2.5 Flash
许可 AGPL-3.0 ⚠️ Apache 2.0 / MIT MIT
部署复杂度 中(需管理多个模型) 高(需 LLM 服务 + RAG)
集成难度到 LangGraph 低(已有 pipeline 脚本) 中(需适配输入输出) 高(需 fine-tune Qwen3-VL)
适用阶段 快速 MVP 验证 中长期自研 长期终极方案

1.2 推荐选型结论

短期 MVP(2–4 周):方案 A(TongueDiagnosis.AI)

  • 模型已在 GitHub 提供预训练权重,可直接下载
  • 流水线清晰:YOLOv5 定位 → SAM 分割 → ResNet50 分类 → LLM 诊断
  • 注意:AGPL-3.0 商用需评估;或自行替换 SAM 为 U2Net-MT(论文开源)
  • 集成方式:将 Python 推理脚本封装为 LangGraph 节点

中期(3–6 月):方案 B(TOM 分割 + 自训分类器)

  • 分割用 TOM(论文 arxiv 2508.14932,已部署于 itongue.cn)
  • 数据用 TMC-Tongue(6719 张,20 类,含 COCO/XML/YOLO 标注)
  • 分类用 ResNet50 或 ViT,在 TMC-Tongue 上 fine-tune
  • 授权干净,无 GPL 限制

长期:方案 C(MMIR-TCM)

  • 需 Qwen3-VL(多模态 LLM)+ RAG(已有 ChromaDB)
  • 当前论文代码未完全开源(Coming Soon),可关注

1.3 关键模型性能参数

模型 参数量 模型文件大小 推理延迟(GPU T4) 推理延迟(CPU)
YOLOv5s(定位) 7.2M 14 MB 8 ms 25 ms
SAM ViT-B(分割) 353M 605 MB 150 ms 2–4 s
U2Net(分割) 17.8M 35 MB 45 ms 200 ms
TOM 学生模型(分割) ~1.5M 6 MB 15 ms 60 ms
ResNet50(分类) 25.6M 98 MB 25 ms 120 ms
ViT-Base(分类) 86.5M 334 MB 40 ms 300 ms
MobileNetV3-Small(轻量分类) 2.5M 10 MB 12 ms 50 ms

1.4 推荐架构(LangGraph 集成)

[小程序上传舌象]
      ↓
[cfc-backend POST /api/tongue/upload]
      ↓
[AiGateway 路由]
      ↓
[LangGraph TongueDiagnosis Graph]
  ├── Node 1: ImagePreprocessor (颜色校正 + 尺寸归一化)
  ├── Node 2: TongueSegmenter (U2Net-MT,GPU T4 约 50ms)
  ├── Node 3: CoatingSeparator (Gated-SCNN 分离苔/体,约 30ms)
  ├── Node 4: FeatureClassifier (ResNet50 多分类,约 25ms)
  └── Node 5: HealthReportGenerator (Deepseek LLM + ChromaDB RAG)
      ↓
[返回 JSON: 舌色/苔色/体质倾向/健康建议]

预计单次推理总耗时:50–200ms(分割+分类)+ LLM 生成 2–5s = ~5s 总延迟


二、情绪识别(Emotion Recognition)

2.1 推荐方案对比

维度 A. DeepFace(服务端) B. TFLite MobileNetV3(端侧) C. 百度/阿里 API(商业) D. MediaPipe + SVM(轻量端侧)
识别类别 7 类(angry/fear/happy/sad/surprise/disgust/neutral) 7–8 类 7 类(百度) 7 类
模型大小 ~10 MB(FER2013 CNN) 2–10 MB(TFLite) 无需本地模型 ~3 MB
推理延迟(CPU) 30–80 ms/张 15–50 ms/张(手机) 网络延迟 ~500ms–2s 20–40 ms/张
推理延迟(GPU) 5–15 ms/张 N/A 网络延迟为主 N/A
准确率 ~80%(FER2013 测试集) 65–75%(优化后 MobileNetV3) 80–85% ~70%
部署方式 Docker / Gunicorn / Flask TFLite 嵌入小程序(需插件) HTTP 调用 TFLite / MediaPipe JS
隐私 图片需上传服务端 纯端侧,图片不出设备 ✅ 图片上传第三方 纯端侧 ✅
开发成本 低(pip install deepface) 中(需训练 + 转换 + 集成) 最低(调 API)
许可 MIT ✅ Apache 2.0 / MIT ✅ 需注册开发者账号 Apache 2.0 ✅
小程序支持 ❌(需服务端转发) ⚠️(需专用 AI 插件) ⚠️(需服务端转发) ✅(wx.createWorker + MediaPipe)

2.2 推荐选型结论

方案 B 最适配本项目的微信小程序场景(隐私友好 + 端侧推理),但考虑到:

  1. 小程序端 TFLite 集成需要 wx.createTensorFlowLiteModel 或第三方插件,文档有限
  2. DeepFace 集成到 LangGraph 最快

建议分阶段

阶段 1(MVP):DeepFace 服务端方案

  • 图片上传到 cfc-langgraph 服务 → DeepFace analyze() → 返回情绪
  • 隐私风险可接受(小程序用户主动上传或拍脸),符合现有 LangGraph 架构
  • 1 天内可跑通

阶段 2(可选):端侧 TFLite

  • MobileNetV3-Small 1.0x 量化后 ~2–3 MB,Moto G6 手机端 45ms
  • 小程序通过 @tensorflow/tfjs-wechat 或自定义原生插件集成
  • 若用户量大,端侧推理可省带宽和服务端成本

2.3 关键模型性能参数

模型 参数 FP32 延迟 INT8 量化延迟 模型大小(FP32) 模型大小(INT8)
DeepFace FER CNN 0.7M ~10 MB ~3 MB
MobileNetV3-Small 1.0x 2.5M 15.8ms 15.5ms 10 MB 2.5 MB
MobileNetV3-Small 0.75x 2.0M 12.8ms 12.2ms 8 MB 2 MB
MobileNetV3-Large 1.0x 5.4M 51.2ms 44ms 35 MB 9 MB
MobileNetV3-Small(优化后) 2.5M 12.8ms 5.6ms 10 MB 2.5 MB

2.4 DeepFace 集成代码示例

# cfc-langgraph/nodes/emotion_node.py
from deepface import DeepFace

def analyze_emotion(image_path: str) -> dict:
    result = DeepFace.analyze(
        img_path=image_path,
        actions=['emotion'],
        detector_backend='mediapipe',  # 比 opencv 快 3x
        enforce_detection=False
    )
    # result = [{'emotion': {'angry': 0.02, 'disgust': 0.01, 'fear': 0.03,
    #                 'happy': 0.85, 'sad': 0.05, 'surprise': 0.01, 'neutral': 0.03}}]
    return result[0]['emotion']

2.5 推荐架构(LangGraph 集成)

[小程序拍摄/上传人脸照片]
      ↓
[cfc-backend POST /api/emotion/analyze]
      ↓
[AiGateway 路由]
      ↓
[LangGraph EmotionGraph]
  ├── Node 1: ImagePreprocessor (缩放 + 归一化)
  └── Node 2: EmotionClassifier (DeepFace, mediapipe 后端, ~30ms)
      ↓
[返回 JSON: 主导情绪 + 各情绪概率]
      ↓
[可选: Node 3 → 情绪日记记录 / Node 4 → LLM 建议生成]

三、商业 API 参考报价

3.1 百度 AI — 情绪识别

接口 免费额度 单价
人脸属性分析(含情绪) 企业认证 2QPS/1万次/月 按次计费,见文档
对话情绪识别(文本) 50万次/天 2.5 元/千次
QPS 扩充 10 QPS 起购 270 元/月/QPS

3.2 腾讯 AI — 人脸识别(含情绪)

接口 免费额度 单价
人脸检测与属性分析(含表情) 25万次/月 2.5 元/千次
人脸检测 + 属性(表情) 10万次/月 2.5 元/千次

3.3 阿里云 — 人脸人体

接口 免费额度 单价
人脸检测 + 属性分析(含表情) 1万次/月 2.5 元/千次

注:商业 API 价格可能变动,以官方最新为准。


四、总体架构决策矩阵

需求 舌诊 情绪识别
推荐方案 A. TongueDiagnosis.AI(MVP)→ B. 自训(中长期) A. DeepFace 服务端(MVP)→ B. TFLite 端侧(可选)
核心模型 SAM/U2Net-MT + ResNet50/ViT DeepFace FER CNN(7类情绪)
推理设备 服务端 GPU(T4 或同档) DeepFace: 服务端 CPU/GPU;TFLite: 手机端
延迟预算 < 5s(含 LLM 报告生成) < 100ms(服务端)/ < 50ms(端侧)
模型大小预算 < 500 MB(服务端存储可接受) < 15 MB(服务端)/ < 5 MB(端侧)
隐私风险 中等(舌象不含敏感生物特征) 高(人脸照片,需用户明示同意)
合规要点 定位为"健康参考",非医疗诊断 需用户明示授权,遵守个保法,未成年人数据保护
集成到 LangGraph 已有 Python 脚本,直接封装为节点 DeepFace 有 pip 包,封装为节点
预估开发周期 2–4 周(含模型调优) 1 周(DeepFace)/ 4–8 周(TFLite 端侧)

五、实施路径建议

Phase 1(2 周): 情绪识别 MVP
  ├── 接入 DeepFace 到 cfc-langgraph
  ├── 定义 /api/emotion/analyze 接口
  ├── 小程序前端拍摄 → 调用接口 → 展示情绪结果
  └── 用户授权 + 隐私协议

Phase 2(4 周): 舌诊 MVP
  ├── 下载 TongueDiagnosis.AI 预训练模型
  ├── 封装为 LangGraph 节点
  ├── 定义 /api/tongue/diagnose 接口
  ├── 小程序前端拍照 → 上传 → 等待 → 展示报告
  └── 结合现有 RAG(ChromaDB)生成中医体质建议

Phase 3(可选): 端侧优化
  ├── 情绪识别 TFLite 化
  ├── 舌诊分割模型替换为 TOM(减小程序端推理体积)
  └── 减少服务端依赖,提升隐私保护

六、参考资源

舌诊

情绪识别

部署优化