作者 :[很多人叫我庞工]
平台 :CSDN
项目地址 :https://github.com/TonguePicture-SKaRD/TongueDiagnosis
发布时间:2026年1月31日
一、项目简介
最近在 GitHub 上发现了一个非常有意思的开源项目 ------ TongueDiagnosis ,这是一个基于深度学习的中医舌诊辅助系统。它通过上传舌象图片,自动完成舌体定位、分割、特征提取(如舌色、苔色、厚薄、润燥等),并结合大语言模型(LLM)生成个性化的健康建议,实现"AI 中医问诊"。
项目技术栈非常现代:
- 后端:Python + FastAPI
- 前端:Vue 3 + Vite
- 模型:YOLOv5(定位) + Segment Anything(分割) + ResNet50(分类)
- LLM 推理:Deepseek-r1-14B(通过 Ollama 调用)
- 数据库:SQLite
更棒的是,项目支持 Web 浏览器访问,也提供了 Electron 桌面版选项。作为一个对 AI+中医交叉领域感兴趣的技术爱好者,我决定将它部署到本地,并进一步容器化为 Docker 镜像,便于复现和分发。本文将完整记录这一过程。
二、本地环境部署(非 Docker)
1. 基础依赖
- Conda ≥ 23.10
- Python 3.9.21
- SQLite 3.35+
- Node.js(前端构建)
- Ollama(用于运行 Deepseek LLM)
2. 克隆项目
git clone https://github.com/TonguePicture-SKaRD/TongueDiagnosis.git
cd TongueDiagnosis
3. 后端环境配置
# 创建 Conda 环境
conda create -n tongueai python=3.9.21
conda activate tongueai
# 安装依赖
pip install -r requirements.txt
# 初始化数据库
sqlite3 AppDatabase.db < models/create_User.sql
sqlite3 AppDatabase.db < models/create_Session.sql
sqlite3 AppDatabase.db < models/create_TongueAnalysis.sql
sqlite3 AppDatabase.db < models/create_ChatRecord.sql
# 创建模型权重目录 & 图片存储目录
mkdir -p application/net/weights
mkdir -p frontend/public/tongue
4. 下载模型权重
项目需要 7 个预训练权重文件,包括 YOLOv5、SAM、ResNet 分类器等:
cd application/net/weights
wget https://github.com/TonguePicture-SKaRD/TongueDiagnosis/releases/download/V1.0_Beta/rot_and_greasy.pth
wget https://github.com/TonguePicture-SKaRD/TongueDiagnosis/releases/download/V1.0_Beta/thickness.pth
wget https://github.com/TonguePicture-SKaRD/TongueDiagnosis/releases/download/V1.0_Beta/tongue_coat_color.pth
wget https://github.com/TonguePicture-SKaRD/TongueDiagnosis/releases/download/V1.0_Beta/tongue_color.pth
wget https://github.com/TonguePicture-SKaRD/TongueDiagnosis/releases/download/V1.0_Beta/unet.pth
wget https://github.com/TonguePicture-SKaRD/TongueDiagnosis/releases/download/V1.0_Beta/yolov5.pt
wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth
⚠️ 注意:国内网络下载可能较慢,建议使用代理或手动下载后放入对应目录。
5. 配置 Ollama(运行 LLM)
安装 Ollama,然后拉取 Deepseek 模型:
ollama pull deepseek-r1:14b
修改 application/config/config.py 中的 LLM 配置:
OLLAMA_PATH = "http://host.docker.internal:11434/api/chat" # Docker 中需特殊处理
LLM_NAME = "deepseek-r1:14b"
SYSTEM_PROMPT = "You are now an AI traditional Chinese medicine doctor specializing in tongue diagnosis..."
6. 启动前后端
-
后端(端口 5000):
python run.py -
前端(开发模式,端口 5173):
cd frontend npm install npm run dev
浏览器访问 http://localhost:5173 即可使用!
三、Docker 容器化部署
为了便于迁移和部署,我将整个应用(后端 + 前端 + 模型)打包成 Docker 镜像。
1. 目录结构调整(便于 COPY)
确保模型权重已下载到 application/net/weights/,前端静态资源可构建。
2. 编写 Dockerfile(后端)
# application/Dockerfile
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# 创建必要目录
RUN mkdir -p /app/frontend/public/tongue
EXPOSE 5000
CMD ["python", "run.py"]
3. 构建前端静态资源(Vite build)
在 frontend/ 目录下执行:
npm run build
生成的 dist/ 目录即为静态网站。
💡 为了简化架构,我选择将前端静态资源由 Nginx 托管,后端 API 单独容器运行。
4. docker-compose.yml(推荐方式)
version: '3.8'
services:
backend:
build:
context: ./application
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- ./frontend/public/tongue:/app/frontend/public/tongue
environment:
- PYTHONUNBUFFERED=1
depends_on:
- ollama
ollama:
image: ollama/ollama:latest
ports:
- "11434:11434"
volumes:
- ollama_data:/root/.ollama
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./frontend/dist:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- backend
volumes:
ollama_data:
📌 注意:
- 若无 GPU,可移除
deploy部分。nginx.conf需配置反向代理/api到backend:5000。- 在
config.py中,OLLAMA_PATH应设为http://ollama:11434/api/chat(容器间通信)。
5. 启动服务
docker-compose up --build
访问 http://localhost 即可看到完整的 Web 应用!
四、遇到的问题与解决方案
-
Ollama 在 Docker 中无法访问宿主机模型?
→ 使用单独的
ollama服务容器,并挂载数据卷持久化模型。 -
前端请求跨域?
→ Nginx 配置反向代理,统一入口避免跨域。
-
模型权重过大,构建镜像太慢?
→ 可将权重放在 volume 或通过 init container 加载,避免每次 rebuild。
-
中文提示乱码?
→ 确保 Docker 容器内 locale 设置正确,或前端强制 UTF-8。
五、总结
通过本次实践,我成功将 TongueDiagnosis 项目从源码部署到 Docker 容器化运行,实现了:
- 一键启动(
docker-compose up) - 环境隔离
- 易于分享与部署
该项目不仅展示了 AI 在传统医学中的创新应用,也为多模态(图像 + LLM)系统提供了优秀范例。如果你对中医 AI、Web 应用容器化或 Ollama 集成感兴趣,强烈推荐尝试!
✅ GitHub 项目地址 :https://github.com/TonguePicture-SKaRD/TongueDiagnosis
✅ 我的 Docker 配置已整理,欢迎留言交流!
欢迎点赞、收藏、评论!
如果你也部署成功了,或者有更好的优化方案,欢迎在评论区分享~