从零部署脊柱侧弯 AI 系统到腾讯云
踩坑 10 次后的完整记录

2026 年 7 月 1 日 · 辰辰

最近完成了一个脊柱侧弯智能分析系统——用 YOLOv8 检测 X 光片上的 18 个椎体,计算 Cobb 角等临床参数,再调用 DeepSeek 生成医学报告。在本地跑得好好的,但部署到腾讯云时踩了一堆坑。这篇文章把整个过程记录下来,方便以后回顾,也希望帮到遇到类似问题的人。

项目做了什么

简单说,你上传一张脊柱 X 光片,系统会:

  1. 用 YOLOv8-Pose 检测 C7 到 L5 共 18 个椎体
  2. 计算胸椎/腰椎 Cobb 角、C7 铅垂线偏移、T1 倾斜角
  3. 可选调用 DeepSeek 或豆包大模型,生成结构化医学报告

技术栈:Flask + YOLOv8 + Matplotlib + DeepSeek API,前端是一个深色主题的单页应用。训练用了 1078 张标注的 X 光片,200 个 epoch。

环境准备

服务器是腾讯云轻量云,OpenCloudOS 系统,宝塔面板管理。关键配置:

提示:如果你也用宝塔,建议先装好 Python项目管理器Nginx 两个插件。

部署步骤

1. 上传项目

把整个项目文件夹传到 /www/wwwroot/spine/web/,宝塔文件管理器拖拽上传就行。

2. 配置 API Key

千万别把 Key 写死在代码里。项目用了 .env 文件管理敏感信息:

cd /www/wwwroot/spine/web
cp .env.example .env
nano .env    # 填入你的 Key

另外在宝塔 Python 项目管理器的「环境变量」里也加上同样的 Key,双保险。

3. 创建虚拟环境

这一步花了我最多时间。核心教训是:用精确版本号,别用最新版

python3 -m venv venv
source venv/bin/activate

pip install "numpy==1.26.4"
pip install "torch==2.1.2" "torchvision==0.16.2"
pip install "ultralytics==8.0.200"
pip install "matplotlib==3.8.5"
pip install "scipy==1.11.4"
pip install "opencv-python-headless==4.9.0.80"
pip install flask pillow openai python-dotenv volcengine-python-sdk

4. 宝塔配置反向代理

Python 项目管理器跑 Flask(端口 5000),然后新建一个「反向代理」站点,把 80 端口请求转发到 5000。注意:选项目类型时选「反向代理」,不要选「Python 项目」——Python 项目已经在管理器里跑了。

踩过的坑

以下每个问题都折腾了好一阵,按出现顺序排列:

坑 1:libGL.so.1 缺失 云服务器最小化安装,OpenCV 需要这个系统库。
dnf install -y mesa-libGL
坑 2:PyTorch 2.6 的 weights_only 限制 新版 PyTorch 默认不允许加载旧模型。
→ 启动时加 TORCH_FORCE_WEIGHTS_ONLY_LOAD=0
坑 3:ultralytics 版本不兼容 模型是用 8.0.x 训练的,新版移除了 PoseModel 类。
pip install ultralytics==8.0.200
坑 4:NumPy 1.x 和 2.x 的连锁崩溃 降级 ultralytics 后 NumPy 版本冲突,matplotlib 和 opencv 全崩。
→ 重建虚拟环境,全部精确锁版本(见上面第 3 步)
坑 5:AI 报告没有生成,但也没有报错 表面一切正常,但报告是模板生成的——因为 openai 包没装,llm_client 初始化静默失败了。
pip install openai(DeepSeek)和 pip install volcengine-python-sdk(豆包)
坑 6:检测结果图中文全是方块 matplotlib 默认写的都是 Windows 字体名,Linux 上没有。
dnf install -y google-noto-sans-cjk-fonts + 删除 matplotlib 缓存。同时改代码自动检测可用字体。

最终效果

部署完成后访问地址:caibingchen.site/spine/。域名刚注册好,SSL 也已配置。

整体流程走下来,最大的感受是:Python 依赖管理是部署中最容易出问题的一环。锁定版本号、重建虚拟环境这两招,几乎解决了 80% 的问题。另外,像 API Key 这种敏感信息,环境变量管理是最低成本的正确做法。

一个小建议:如果以后要在宝塔上部署 AI 项目,务必先在终端手动跑通,确认没问题了再用 Python 项目管理器接管。管理器里的日志不够详细,排查问题很痛苦。

以上就是这次部署的全过程。后面打算给系统加上 DICOM 格式支持和患者历史记录功能。
有问题可以邮件交流:2383489382@qq.com