本地部署 + Docker 容器化实战:中医舌诊 AI 项目 TongueDiagnosis 部署全记录-九五小庞

作者 :[很多人叫我庞工]
平台 :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 配置已整理,欢迎留言交流!


欢迎点赞、收藏、评论!

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

相关推荐
yuanmazhiwu20 分钟前
计算机毕业设计:Python全国空气质量与气象监测平台 Flask框架 可视化 数据分析 机器学习 天气 深度学习 AI 空气质量分析(建议收藏)✅
人工智能·python·深度学习·数据挖掘·flask·汽车·课程设计
Fleshy数模22 分钟前
基于机器学习的实时手势识别系统实现
人工智能·机器学习
龙侠九重天22 分钟前
C# 机器学习数据处理
开发语言·人工智能·机器学习·ai·c#
China_Yanhy7 小时前
动手学大模型第一篇学习总结
人工智能
空间机器人8 小时前
自动驾驶 ADAS 器件选型:算力只是门票,系统才是生死线
人工智能·机器学习·自动驾驶
C+++Python8 小时前
提示词、Agent、MCP、Skill 到底是什么?
人工智能
小松要进步8 小时前
机器学习1
人工智能·机器学习
泰恒8 小时前
openclaw近期怎么样了?
人工智能·深度学习·机器学习
KaneLogger8 小时前
从传统笔记到 LLM 驱动的结构化 Wiki
人工智能·程序员·架构
tinygone8 小时前
OpenClaw之Memory配置成本地模式,Ubuntu+CUDA+cuDNN+llama.cpp
人工智能·ubuntu·llama