基于项目
cfc-langgraph(FastAPI + LangGraph + ChromaDB,端口 9000)+cfc-backend(Spring Boot)现有架构,面向微信小程序用户场景。
| 维度 | 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 验证 | 中长期自研 | 长期终极方案 |
短期 MVP(2–4 周):方案 A(TongueDiagnosis.AI)
YOLOv5 定位 → SAM 分割 → ResNet50 分类 → LLM 诊断中期(3–6 月):方案 B(TOM 分割 + 自训分类器)
长期:方案 C(MMIR-TCM)
| 模型 | 参数量 | 模型文件大小 | 推理延迟(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 |
[小程序上传舌象]
↓
[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 总延迟
| 维度 | 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) |
方案 B 最适配本项目的微信小程序场景(隐私友好 + 端侧推理),但考虑到:
wx.createTensorFlowLiteModel 或第三方插件,文档有限建议分阶段:
cfc-langgraph 服务 → DeepFace analyze() → 返回情绪@tensorflow/tfjs-wechat 或自定义原生插件集成| 模型 | 参数 | 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 |
# 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']
[小程序拍摄/上传人脸照片]
↓
[cfc-backend POST /api/emotion/analyze]
↓
[AiGateway 路由]
↓
[LangGraph EmotionGraph]
├── Node 1: ImagePreprocessor (缩放 + 归一化)
└── Node 2: EmotionClassifier (DeepFace, mediapipe 后端, ~30ms)
↓
[返回 JSON: 主导情绪 + 各情绪概率]
↓
[可选: Node 3 → 情绪日记记录 / Node 4 → LLM 建议生成]
| 接口 | 免费额度 | 单价 |
|---|---|---|
| 人脸属性分析(含情绪) | 企业认证 2QPS/1万次/月 | 按次计费,见文档 |
| 对话情绪识别(文本) | 50万次/天 | 2.5 元/千次 |
| QPS 扩充 | 10 QPS 起购 | 270 元/月/QPS |
| 接口 | 免费额度 | 单价 |
|---|---|---|
| 人脸检测与属性分析(含表情) | 25万次/月 | 2.5 元/千次 |
| 人脸检测 + 属性(表情) | 10万次/月 | 2.5 元/千次 |
| 接口 | 免费额度 | 单价 |
|---|---|---|
| 人脸检测 + 属性分析(含表情) | 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(减小程序端推理体积)
└── 减少服务端依赖,提升隐私保护