# Skin Lesion Classifier：基于深度学习的皮肤病变自动识别系统

> 这是一个基于 Flask 和 TensorFlow/Keras 的深度学习 Web 应用，能够自动将皮肤病变图像分类为7种类型，包括黑色素瘤等恶性病变。系统提供用户认证、图像上传分析、AI 分类预测、结果仪表板和 PDF 报告生成等功能，为皮肤病变筛查提供智能化辅助工具。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-05T07:16:13.000Z
- 最近活动: 2026-06-05T07:24:30.245Z
- 热度: 150.9
- 关键词: 深度学习, 皮肤病变分类, TensorFlow, Flask, 卷积神经网络, 医疗AI, 黑色素瘤检测, CNN
- 页面链接: https://www.zingnex.cn/forum/thread/skin-lesion-classifier
- Canonical: https://www.zingnex.cn/forum/thread/skin-lesion-classifier
- Markdown 来源: ingested_event

---

# Skin Lesion Classifier：基于深度学习的皮肤病变自动识别系统

皮肤癌是全球最常见的癌症类型之一，早期发现和诊断对于提高治愈率至关重要。随着深度学习技术的发展，计算机辅助诊断系统在皮肤病学领域展现出巨大潜力。本文介绍的开源项目 skin 是一个基于 Flask 的 Web 应用，利用 TensorFlow/Keras 深度学习框架实现皮肤病变的自动分类。

## 原作者与来源

- **原作者/维护者**：alokrk04
- **来源平台**：GitHub
- **原文标题**：skin
- **原文链接**：https://github.com/alokrk04/skin
- **发布时间**：2026-06-05
- **数据集**：HAM10000、HMNIST

## 项目概述

Skin Lesion Classifier 是一个完整的 Web 应用程序，旨在帮助医疗专业人员和研究人员对皮肤病变图像进行自动分类。该系统基于卷积神经网络（CNN）技术，能够将皮肤病变分为7个不同的类别，包括良性和恶性病变。

### 核心功能

该应用提供了一套完整的功能体系：

- **用户认证系统**：安全的登录和注册机制，确保数据隐私
- **图像上传与分析**：支持上传皮肤病变图像进行分类
- **AI 驱动的分类**：使用预训练的深度学习模型进行准确预测
- **结果仪表板**：可视化展示分类结果和置信度分数
- **检测历史记录**：追踪和回顾以往的检测结果
- **PDF 报告生成**：生成可下载的 PDF 检测报告
- **数据库集成**：使用 SQLite 数据库持久化用户和检测数据

## 支持的病变分类

系统能够将皮肤病变分为以下7个类别：

### 1. 日光性角化病和表皮内癌（AKIEC）

日光性角化病是一种由长期日晒引起的癌前病变，可能发展为鳞状细胞癌。早期识别对于预防恶性转化至关重要。

### 2. 基底细胞癌（BCC）

基底细胞癌是最常见的皮肤癌类型，虽然恶性程度较低，但如果不及时治疗，可能造成局部组织破坏。

### 3. 良性角化病样病变（BKL）

包括脂溢性角化病、日光性雀斑样痣等良性病变，通常不需要治疗，但需要与恶性病变进行鉴别。

### 4. 皮肤纤维瘤（DF）

一种常见的良性皮肤肿瘤，通常表现为坚实的结节，颜色从褐色到紫色不等。

### 5. 黑色素细胞痣（NV）

俗称"痣"，是黑色素细胞良性增生的结果。大多数痣是无害的，但某些特征变化可能提示恶变风险。

### 6. 化脓性肉芽肿和出血（VASC）

包括血管性病变如化脓性肉芽肿和出血性病变，通常表现为红色或紫色的丘疹或结节。

### 7. 黑色素瘤（MEL）

黑色素瘤是最危险的皮肤癌类型，具有高度恶性，早期发现和治疗对于提高生存率至关重要。

## 技术架构

### 后端框架

项目基于 Flask 3.1.0 构建，这是一个轻量级的 Python Web 框架，具有以下特点：

- **简洁灵活**：核心设计简洁，易于扩展和定制
- **丰富的生态系统**：拥有大量的扩展库支持
- **开发效率高**：适合快速原型开发和迭代

### 深度学习框架

系统使用 TensorFlow 2.20.0 和 Keras 3.12.0 作为深度学习后端：

- **TensorFlow**：Google 开发的开源机器学习框架，提供强大的计算图优化能力
- **Keras**：高级神经网络 API，提供简洁的模型构建接口
- **模型格式**：使用 HDF5 格式存储预训练模型权重

### 数据库设计

应用使用 SQLAlchemy ORM 进行数据库操作，主要包含两个核心数据模型：

#### 用户模型（User）

- `id`：主键
- `username`：唯一用户名
- `password`：哈希加密后的密码
- `tests`：与检测记录的关系

#### 检测记录模型（Test）

- `id`：主键
- `image_filename`：上传图像的文件名
- `result`：分类结果
- `patient_name`：患者姓名
- `user_id`：外键关联用户
- `upload_date`：检测日期
- `accuracy`：预测置信度分数
- `pdf_filename`：生成的 PDF 报告文件名

### 前端技术栈

前端界面使用 Bootstrap 等现代 CSS 框架构建，提供响应式设计和良好的用户体验：

- **HTML 模板**：使用 Jinja2 模板引擎
- **CSS 框架**：Bootstrap 提供美观的 UI 组件
- **JavaScript**：实现动态交互功能

## 模型技术细节

### 输入预处理

系统对上传的图像进行以下预处理：

1. **格式验证**：仅支持 PNG、JPG、JPEG 格式
2. **大小限制**：单文件最大 16MB
3. **尺寸调整**：统一调整为 224x224 像素的 RGB 图像
4. **归一化**：将像素值归一化到合适的范围

### 模型架构

系统使用卷积神经网络（CNN）进行分类：

- **输入层**：接收 224x224x3 的 RGB 图像
- **卷积层**：提取图像的层次化特征
- **池化层**：降低特征维度，增强平移不变性
- **全连接层**：进行最终的分类决策
- **输出层**：7 类分类，输出各类别的概率分布

### 评估指标

模型使用 AUC-ROC（曲线下面积）作为主要评估指标，这是医学影像分类任务中的标准指标，能够综合评估模型在不同阈值下的性能。

## 数据集来源

项目使用了两个知名的皮肤病变数据集：

### HAM10000 数据集

HAM10000（Human Against Machine with 10000 training images）是一个大规模的多源皮肤镜图像数据集，包含：

- **图像数量**：超过 10,000 张皮肤镜图像
- **病变类型**：涵盖多种良性和恶性皮肤病变
- **多样性**：来自不同人群、不同设备和不同部位的图像
- **标注质量**：经过皮肤科专家验证的诊断标签

### HMNIST 数据集

HMNIST（Harvard Medical School skin lesion dataset）是哈佛医学院提供的皮肤病变数据集，提供了标准化的图像格式和标签。

## 部署与使用

### 环境要求

- Python 3.10 或更高版本
- 支持的依赖包（见 requirements.txt）

### 安装步骤

1. 克隆仓库并进入项目目录
2. 创建虚拟环境并激活
3. 安装依赖包
4. 配置安全密钥和 API 密钥
5. 运行应用

### 主要路由

| 路由 | 方法 | 描述 |
|------|------|------|
| /first | GET | 着陆页 |
| /login | GET, POST | 用户登录 |
| /register | GET, POST | 用户注册 |
| /index | GET | 主页（需登录） |
| /prediction | GET, POST | 图像上传和预测 |
| /results | POST | 显示预测结果 |
| /previous_tests | GET | 查看检测历史 |
| /predict | POST | 预测 API 端点（JSON） |
| /logout | GET | 用户登出 |

### 使用流程

1. 访问着陆页并注册账号
2. 使用凭据登录系统
3. 进入预测页面上传皮肤病变图像
4. 查看分类结果和置信度分数
5. 下载 PDF 检测报告
6. 在历史记录页面查看以往检测结果

## 安全考虑

### 生产环境部署建议

在部署到生产环境之前，需要采取以下安全措施：

- **密钥管理**：将 SECRET_KEY 设置为强随机值，并存放在环境变量中
- **数据库安全**：使用生产级数据库（如 PostgreSQL）替代 SQLite
- **HTTPS/SSL**：启用 HTTPS 加密通信
- **速率限制**：实现请求速率限制防止滥用
- **CSRF 保护**：启用跨站请求伪造保护
- **输入验证**：验证和清理所有用户输入
- **凭证存储**：将敏感凭证存储在环境变量中
- **WSGI 服务器**：使用 Gunicorn 等生产级 WSGI 服务器

### 数据隐私

系统处理的是敏感的医疗图像数据，需要特别注意：

- 用户认证和授权机制
- 图像数据的加密存储
- 访问日志的记录和审计
- 符合医疗数据保护法规（如 HIPAA、GDPR）

## 局限性与免责声明

### 重要声明

⚠️ **医疗免责声明**：本应用仅供教育和研究目的使用，**不应作为专业医疗诊断的替代品**。始终应咨询合格的皮肤科医生获取医疗建议。

### 系统局限性

1. **准确率依赖**：预测准确率取决于图像质量和光照条件
2. **首次加载延迟**：首次预测可能需要几秒钟加载模型到内存
3. **单图像处理**：当前版本主要支持单图像处理，批量处理功能待开发
4. **模型泛化**：模型性能可能因人群、设备和拍摄条件的差异而有所不同

## 未来发展方向

项目规划了以下增强功能：

### 短期目标

- **批量图像处理**：支持同时上传和分析多张图像
- **WebSocket 实时预测**：通过 WebSocket 实现实时模型预测
- **高级分析仪表板**：提供更丰富的数据可视化功能

### 中长期目标

- **模型可解释性**：集成 Grad-CAM 等可视化技术，展示模型关注的区域
- **移动应用**：开发 iOS 和 Android 原生应用
- **DICOM 集成**：支持医学影像标准 DICOM 格式
- **Docker 部署**：提供容器化部署方案
- **CI/CD 流水线**：建立持续集成和持续部署流程

## 技术意义与价值

### 对医疗领域的贡献

Skin Lesion Classifier 展示了人工智能在医疗诊断辅助领域的应用潜力：

1. **提高筛查效率**：自动化分类可以显著加快皮肤病变筛查速度
2. **降低误诊率**：作为第二意见系统，帮助医生减少漏诊和误诊
3. **医疗资源均衡**：使偏远地区也能获得高质量的皮肤病筛查服务
4. **早期发现**：提高黑色素瘤等恶性病变的早期发现率

### 对技术社区的价值

该项目为开发者提供了一个完整的医疗 AI 应用参考实现：

- **端到端示例**：从数据预处理到 Web 部署的完整流程
- **最佳实践**：展示了如何构建生产就绪的机器学习应用
- **可扩展架构**：模块化设计便于功能扩展和定制

## 总结与思考

Skin Lesion Classifier 是一个功能完善的开源项目，展示了如何将深度学习技术应用于医疗诊断领域。通过结合 Flask Web 框架和 TensorFlow/Keras 深度学习库，项目提供了一个用户友好的皮肤病变分类系统。

该项目不仅具有重要的临床意义，也为开发者学习医疗 AI 应用开发提供了优秀的参考。随着技术的不断进步和数据的持续积累，类似的 AI 辅助诊断系统将在医疗领域发挥越来越重要的作用。

然而，我们也需要清醒地认识到当前技术的局限性。AI 系统应该作为医生的辅助工具，而非替代品。在医疗诊断这样关乎生命健康的领域，人机协作才是最佳路径。
