本地部署 + 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 配置已整理,欢迎留言交流!


欢迎点赞、收藏、评论!

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

相关推荐
John_ToDebug3 小时前
2025年度个人总结:在技术深海中锚定价值,于时代浪潮中重塑自我
人工智能·程序人生
自可乐4 小时前
n8n全面学习教程:从入门到精通的自动化工作流引擎实践指南
运维·人工智能·学习·自动化
king of code porter4 小时前
百宝箱企业版搭建智能体应用-创建应用
人工智能·大模型·智能体
HDO清风4 小时前
CASIA-HWDB2.x 数据集DGRL文件解析(python)
开发语言·人工智能·pytorch·python·目标检测·计算机视觉·restful
策知道4 小时前
依托政府工作报告准备省考【经验贴】
大数据·数据库·人工智能·搜索引擎·政务
工程师老罗4 小时前
Pytorch如何加载和读取VOC数据集用来做目标检测?
人工智能·pytorch·目标检测
测试_AI_一辰4 小时前
Agent & RAG 测试工程05:把 RAG 的检索过程跑清楚:chunk 是什么、怎么来的、怎么被命中的
开发语言·人工智能·功能测试·自动化·ai编程
Henry-SAP4 小时前
SAP(ERP) 组织结构业务视角解析
大数据·人工智能·sap·erp·sap pp
龙腾亚太4 小时前
航空零部件加工变形难题破解:数字孪生 + 深度学习的精度控制实战
人工智能·深度学习·数字孪生·ai工程师·ai证书·转型ai