OncoVision 是一个前后端分离的医学图像分析演示系统。用户上传病变图像后,Spring Boot 服务负责文件校验与存储,并调用通义千问视觉模型生成结构化观察结果;Vue 前端提供图像预览、结果展示和 PDF 报告导出。
本项目用于软件工程与多模态模型接入演示,不具备医疗器械资质,输出内容不能用于诊断、治疗或临床决策。
| 模块 | 功能 |
|---|---|
| 访问控制 | 账号登录、JWT 签发与接口鉴权 |
| 图像上传 | 图片类型校验、本地存储和浏览器预览 |
| 多模态分析 | 调用 DashScope qwen-vl-plus 分析病变图像 |
| 结果展示 | 展示模型生成的病变观察、风险提示与就医建议 |
| 报告导出 | 将原始图像、分析文本和免责声明生成 PDF |
| 配置管理 | API Key、账号、JWT 密钥和存储路径均通过环境变量注入 |
flowchart LR
A["用户登录"] --> B["Vue 3 前端"]
B --> C["上传病变图像"]
C --> D["Spring Boot API"]
D --> E["文件校验与本地存储"]
E --> F["通义千问视觉模型"]
F --> G["结构化分析文本"]
G --> B
G --> H["iText PDF 报告"]
- 前端:Vue 3、Vue Router、Vite
- 后端:Java 8、Spring Boot 2.7、Spring MVC
- 模型服务:阿里云 DashScope、Qwen-VL Plus
- 身份认证:JWT
- 报告生成:iText 5、iText Asian
- 构建工具:Maven Wrapper、npm
tumor-ai-analysis-system/
├─ src/main/java/com/example/demo/
│ ├─ LoginController.java # 登录与 JWT 签发
│ ├─ TumorAnalysisController.java # 图像分析与报告接口
│ ├─ AliyunAIUtil.java # 视觉模型适配器
│ ├─ PdfExportUtil.java # PDF 报告生成
│ └─ JwtUtil.java # JWT 生成与校验
├─ src/test/java/com/example/demo/ # JUnit/Mockito 后端测试
├─ src/main/resources/
│ └─ application.properties # 环境变量映射
├─ bioagent-frontend/
│ ├─ src/views/Login.vue
│ ├─ src/views/TumorAnalysis.vue
│ ├─ src/views/__tests__/ # Vitest 组件测试
│ ├─ e2e/ # Playwright 端到端测试
│ └─ .env.example
├─ docs/testing/ # 测试计划、用例、风险与面试提纲
├─ .github/workflows/test.yml # 持续集成
├─ pom.xml
└─ README.md
- JDK 8 或更高版本
- Node.js 20 或更高版本(测试工具链要求)
- 有效的 DashScope API Key
在 PowerShell 中设置运行时环境变量:
$env:DASHSCOPE_API_KEY = "replace-with-your-key"
$env:APP_ADMIN_USERNAME = "admin"
$env:APP_ADMIN_PASSWORD = "replace-with-a-strong-password"
$env:APP_JWT_SECRET = "replace-with-at-least-32-characters"可选配置:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
SERVER_PORT |
8080 |
后端端口 |
FILE_UPLOAD_PATH |
./data/uploads/ |
上传图像目录 |
FILE_PDF_PATH |
./data/reports/ |
PDF 报告目录 |
启动后端:
.\mvnw.cmd spring-boot:runcd bioagent-frontend
Copy-Item .env.example .env.local
npm install
npm run dev默认访问地址为 http://localhost:5173,前端默认连接 http://localhost:8080。
项目包含可直接演示的分层测试体系:
| 层级 | 工具 | 覆盖内容 |
|---|---|---|
| 后端单元/组件 | JUnit 5、Mockito、JaCoCo | 登录、JWT、上传、AI 响应解析、PDF 与异常分支 |
| 前端组件 | Vitest、Vue Test Utils | 表单、请求、会话、页面状态和下载行为 |
| 端到端 | Playwright、Chromium | 登录 → 上传 → 展示分析结果的核心路径 |
| 持续集成 | GitHub Actions | 后端、前端、E2E 并行回归与报告归档 |
后端测试:
.\mvnw.cmd test
# 生成覆盖率报告
.\mvnw.cmd -Pcoverage test前端组件与 E2E 测试:
cd bioagent-frontend
npm ci
npm run test:coverage
npx playwright install chromium # 首次执行需要
npm run test:e2e详细资料:
| 方法 | 路径 | 认证 | 说明 |
|---|---|---|---|
| POST | /api/login |
否 | 校验账号并签发 JWT |
| POST | /analyze-tumor |
Bearer JWT | 上传图像并调用视觉模型 |
| POST | /export-pdf |
Bearer JWT | 生成并下载分析报告 |
- 不要将 API Key、密码或 JWT 密钥提交到 Git。
.env.local、上传图像、PDF 报告和构建产物默认不进入版本控制。- 演示时使用去标识化或公开授权的图像,不要上传真实患者身份信息。
- 当前认证模块用于单用户演示;面向真实用户部署时应增加密码哈希、数据库用户体系、权限控制、审计日志和 HTTPS。
- 使用的是通用视觉语言模型,不是经过临床验证的专病模型。
- 当前实现处理普通图像上传,不包含 DICOM、PACS 或影像设备协议。
- 尚未完成真实标注数据集上的敏感度、特异度、AUC 和外部验证。
- PDF 仅用于保存演示结果,不是正式医疗报告。
- 增加统一的模型适配接口和模拟模型,支持无云端 Key 演示。
- 增加对象存储、任务队列、数据库记录和分析历史。
- 增加文件魔数校验、速率限制、操作审计和自动清理策略。
- 使用公开医学图像数据集建立可复现评估流程。
- 增加真实模型按需集成测试、跨浏览器测试和并发性能基线。