作者:[很多人叫我庞工]
平台: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 需配置反向代理 /apibackend:5000
  • config.py 中,OLLAMA_PATH 应设为 http://ollama:11434/api/chat(容器间通信)。

5. 启动服务

docker-compose up --build

访问 http://localhost 即可看到完整的 Web 应用!


四、遇到的问题与解决方案

  1. Ollama 在 Docker 中无法访问宿主机模型?
    → 使用单独的 ollama 服务容器,并挂载数据卷持久化模型。

  2. 前端请求跨域?
    → Nginx 配置反向代理,统一入口避免跨域。

  3. 模型权重过大,构建镜像太慢?
    → 可将权重放在 volume 或通过 init container 加载,避免每次 rebuild。

  4. 中文提示乱码?
    → 确保 Docker 容器内 locale 设置正确,或前端强制 UTF-8。


五、总结

通过本次实践,我成功将 TongueDiagnosis 项目从源码部署到 Docker 容器化运行,实现了:

  • 一键启动(docker-compose up
  • 环境隔离
  • 易于分享与部署

该项目不仅展示了 AI 在传统医学中的创新应用,也为多模态(图像 + LLM)系统提供了优秀范例。如果你对中医 AI、Web 应用容器化或 Ollama 集成感兴趣,强烈推荐尝试!

GitHub 项目地址https://github.com/TonguePicture-SKaRD/TongueDiagnosis
我的 Docker 配置已整理,欢迎留言交流!


欢迎点赞、收藏、评论!
如果你也部署成功了,或者有更好的优化方案,欢迎在评论区分享~

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐