​​​​​​1、项目背景

皮肤癌作为全球范围内最常见的癌症类型之一,其发病率呈现出逐年上升的趋势。早期发现与精准诊断对于皮肤癌患者的治疗和康复具有至关重要的意义。据统计,若能在早期阶段准确诊断并进行有效治疗,皮肤癌的治愈率可大幅提升。然而,皮肤病变的肉眼鉴别存在较大难度,非专业人士甚至普通医生往往难以凭借经验做出准确判断。在人工智能技术蓬勃发展的当下,深度学习在图像识别与分类领域展现出了卓越的性能。本项目正是基于此背景,致力于开发一款皮肤癌智能诊断系统。该系统依托深度学习算法,借助大规模的皮肤病变图像数据进行训练,旨在为医疗专业人员和患者提供一种高效、精准的皮肤病变初步筛查工具,助力皮肤癌的早期发现与诊断,弥补人工诊断的不足与局限,为临床诊断提供有力的辅助支持。

2、系统目标

本系统旨在实现以下几个主要目标:

1、多病变精准识别 :能够对包括黑色素瘤、基底细胞癌、鳞状细胞癌、良性角化病、皮脂腺囊肿、皮肤纤维瘤以及血管病变在内的 7 种常见皮肤病变类型进行精准识别与分类。通过对大量皮肤病变图像数据的学习与分析,利用深度学习模型提取病变特征,为每种病变类型提供详细的诊断信息,确保诊断结果的准确性和可靠性。

2、系统目标高效筛查辅助诊断:为医疗人员和患者打造高效筛查工具,快速分析大量皮肤病变图像,减轻医生初步筛查负担,让他们专注于复杂病例;同时,患者能及时了解皮肤状况,依据诊断结果采取医疗措施。通过智能皮肤病变诊断模块的图像上传与分析功能,系统快速给出诊断,实现高效筛查诊断。

3、智能诊断与建议生成:基于深度学习模型的诊断结果,系统不仅判断病变类型,还生成置信度分析,为临床决策提供参考。根据诊断结论,自动为患者提供个性化后续就医建议,如是否进一步检查、就诊科室推荐和治疗方案参考等。这借助智能皮肤病变诊断模块的医疗建议生成功能,以及 AI 医疗咨询模块的智能问答服务,为患者提供全方位智能诊断与建议。

4、综合功能一体化:集成智能问答、病历管理、治疗追踪、状态管理等功能,打造综合性皮肤癌诊断管理平台。通过与 DeepSeek API 对接,满足用户诊断中的各类需求,提升服务质量和用户体验。主要依靠患者病程管理模块和AI医疗咨询模块,实现病历档案管理、治疗进度追踪、患者状态管理等功能,同时提供皮肤健康咨询服务,满足用户多样化需求。

5、便捷的个性化体验与账户安全:为用户提供合理的个人中心模块,方便其查看和修改个人资料,保障账户安全,为用户提供更个性化的使用体验。依靠个人中心模块的用户资料管理功能,确保用户数据安全,提升系统使用的便捷性和安全性。

3、系统全景演示

项目系统视频演示:
【小白也能学会的深度学习应用:从算法设计到前后端实现,结合 MySQL 和 DeepSeek 大模型,打造精准识别的皮肤癌智能诊断系统】_哔哩哔哩_bilibili

首页如下:

诊断中心页面如下:

调用deepseek大模型进行ai对话页面如下:

患者病程管理页面(本地使用MySQL)页面如下:

 患者病程管理页面(本地使用MySQL)添加患者弹窗页面如下:

个人中心页面:

4、详细部署教程

4.1数据准备

本案例使用的数据集是皮肤病变数据集HAM10000 

可以在HAM10000|医学影像数据集|机器学习数据集这个链接里面下载
还可以在kaggle Kaggle: Your Home for Data Science 里面找开源数据集

4.2深度学习训练

我的示例代码如下(构建了一个卷积神经网络(CNN)模型,包含多个卷积层、批量归一化层、池化层和全连接层,优化器为 Adam):

import seaborn as sns
import matplotlib.pyplot as plt
from imblearn.over_sampling import RandomOverSampler
import numpy as np
from sklearn.model_selection import train_test_split
import pandas as pd
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPool2D, Dropout, BatchNormalization
from tensorflow.keras.callbacks import EarlyStopping
from tensorflow.keras.applications import DenseNet121
from sklearn.metrics import confusion_matrix
import itertools

# 读取数据集文件
data = pd.read_csv('/kaggle/input/skin-cancer-mnist-ham10000/hmnist_28_28_RGB.csv')
data.head()

y = data['label']
x = data.drop(columns=['label'])
    
tabular_data = pd.read_csv('/kaggle/input/skin-cancer-mnist-ham10000/HAM10000_metadata.csv')
tabular_data.head()

# 数据分布可视化
classes = {4: ('nv', 'melanocytic nevi'), 6: ('mel', 'melanoma'), 2: ('bkl', 'benign keratosis-like lesions'), 1: ('bcc', 'basal cell carcinoma'), 5: ('vasc', 'pyogenic granulomas and hemorrhage'), 0: ('akiec', 'Actinic keratoses and intraepithelial carcinomae'), 3: ('df', 'dermatofibroma')}

plt.figure(figsize=(10, 6))
sns.countplot(x='dx', data=tabular_data)
plt.xlabel('Disease', size=12)
plt.ylabel('Frequency', size=12)
plt.title('Frequency Distribution of Classes', size=16)
plt.show()

plt.figure(figsize=(10, 6))
sns.histplot(tabular_data['age'])
plt.title('Histogram of Age of Patients', size=16)
plt.show()

value = tabular_data[['localization', 'sex']].value_counts().to_frame()
value.reset_index(level=[1, 0], inplace=True)
temp = value.rename(columns={'localization': 'location', 0: 'count'})

plt.figure(figsize=(12, 12))
sns.barplot(x='location', y='count', hue='sex', data=temp)
plt.title('Location of disease over Gender', size=16)
plt.xlabel('Disease', size=12)
plt.ylabel('Frequency/Count', size=12)
plt.xticks(rotation=90)
plt.show()

# 数据预处理
oversample = RandomOverSampler()
x, y = oversample.fit_resample(x, y)

x = np.array(x).reshape(-1, 28, 28, 3)
print('Shape of X:', x.shape)

x = (x - np.mean(x)) / np.std(x)
X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=1)

# 构建更复杂的模型
model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3), input_shape=(28, 28, 3), activation='relu', padding='same'))
model.add(BatchNormalization())
model.add(Conv2D(64, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(BatchNormalization())
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(0.3))

model.add(Conv2D(128, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(BatchNormalization())
model.add(Conv2D(256, kernel_size=(3, 3), activation='relu', padding='same'))
model.add(BatchNormalization())
model.add(MaxPool2D(pool_size=(2, 2), padding='same'))
model.add(Dropout(0.5))

model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.3))
model.add(Dense(7, activation='softmax'))

model.summary()

model.compile(loss='sparse_categorical_crossentropy',
              optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
              metrics=['accuracy'])

early_stopping = EarlyStopping(monitor='val_accuracy', patience=10, restore_best_weights=True)

history = model.fit(X_train,
                    Y_train,
                    validation_split=0.2,
                    batch_size=128,
                    epochs=100,
                    callbacks=[early_stopping])

# 可视化训练过程
plt.figure(figsize=(12, 6))
plt.subplot(1, 2, 1)
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('Model Accuracy', fontsize=14)
plt.ylabel('Accuracy')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='upper left')
plt.grid(True)

plt.subplot(1, 2, 2)
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('Model Loss', fontsize=14)
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend(['Train', 'Validation'], loc='upper left')
plt.grid(True)

plt.tight_layout()
plt.show()

# 保存最佳模型
model.save('/kaggle/working/best_model.h5')
print("Best model saved to /kaggle/working/best_model.h5")

# 测试集评估
test_loss, test_acc = model.evaluate(X_test, Y_test)
print(f"\nTest accuracy: {test_acc:.4f}")
print(f"Test loss: {test_loss:.4f}")

# 混淆矩阵
y_pred = np.argmax(model.predict(X_test), axis=1)

cm = confusion_matrix(Y_test, y_pred)
plt.figure(figsize=(10, 8))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', xticklabels=list(classes.values()), yticklabels=list(classes.keys()))
plt.title('Confusion Matrix', fontsize=16)
plt.xlabel('Predicted')
plt.ylabel('True')
plt.xticks(rotation=45, ha='right')
plt.yticks(rotation=0)
plt.tight_layout()
plt.show()

 训练结果可视化如下(效果还可以):

同时我们也得到了模型文件best_model.h5(后面会本地调用)

4.3web开发

前端技术栈

- **基础技术**:HTML5、CSS3、JavaScript

- **UI设计**:响应式设计、渐变色调、粒子动画

- **交互设计**:微交互、过渡动画、统计数字滚动动效

- **第三方库**:Font Awesome(图标)、Particles.js(粒子背景)

后端技术栈

- **开发语言**:Python

- **Web框架**:Flask + Flask-CORS

- **深度学习**:TensorFlow(图像分类模型)

- **数据处理**:NumPy、OpenCV(图像预处理)

- **数据存储**:MySQL(患者数据管理)

- **API集成**:DeepSeek API(医疗咨询服务)

由于本项目是博主爆肝,实属不易,web开发代码暂时不会开原,但是可以私聊博主有偿得到下面的源码

4.4数据库MySQL

系统使用MySQL数据库,主要表结构以其中一个patient_info为例如下:

- **patient_info**:患者信息表

  - id:患者ID

  - patient_name:患者姓名

  - diagnosis_result:诊断结果

  - attending_physician:主治医生

  - latest_examination:最近检查日期

  - treatment_progress:治疗进度

  - status:患者状态

添加患者弹窗如下(按照数据库相关字段填写,信息将会被存储到本地MySQL):

 添加患者示例如下:

4.5deepseek大模型api调用

DeepSeek 开放平台创建api key(记得充值)

之后按照接口文档的示例代码(正确填写你的api_key):

# Please install OpenAI SDK first: `pip3 install openai`

from openai import OpenAI

client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "Hello"},
    ],
    stream=False
)

print(response.choices[0].message.content)

我这个项目里面deepseek相关的配置接口如下:

上面只是一个demo,相关逻辑还需要进一步优化, 这样就可以和deepseekAPI正确连接,获取到相对应的answer了

 5、附录-README.md

皮肤癌智能诊断系统

## 📋 项目概述

皮肤癌智能诊断系统是一个基于深度学习技术的医疗辅助诊断平台,旨在帮助医疗专业人员和患者进行皮肤病变的初步筛查和诊断。系统基于HAM10000数据集训练的深度学习模型,能够对7种常见皮肤病变类型进行识别和分类,包括黑色素瘤(最危险的皮肤癌类型)、基底细胞癌、鳞状细胞癌等。

### 💡 应用背景

皮肤癌是全球最常见的癌症类型之一,早期发现和诊断对于提高治愈率至关重要。然而,皮肤病变的肉眼鉴别对于非专业人士甚至普通医生都具有挑战性。本系统通过深度学习算法的应用,可以辅助提高皮肤癌的早期筛查效率和准确率,为临床诊断提供参考。

## ✨ 核心功能

系统包含以下核心功能模块:

### 1. 智能皮肤病变诊断

- **图像上传与分析**:支持上传皮肤病变图像,系统会自动分析并给出诊断结果

- **多病变类型识别**:支持7种常见皮肤病变的识别与分类

- **置信度分析**:对每种可能的病变类型提供概率分布,辅助临床决策

- **医疗建议生成**:根据诊断结果自动提供针对性的后续就医建议

### 2. AI医疗咨询

- **智能问答服务**:对皮肤健康相关问题提供专业解答

- **接入DeepSeek API**:利用先进的大语言模型提供专业医疗咨询

- **离线回退机制**:在API不可用时提供预设回答,确保服务可用性

### 3. 患者病程管理

- **病历档案管理**:创建、查看和管理患者的病历档案

- **治疗进度追踪**:记录患者的治疗进度和效果

- **患者状态管理**:实时更新患者的治疗状态

### 4. 个人中心

- **用户资料管理**:查看和修改个人资料

- **系统设置**:个性化系统配置

- **安全登录**:账户安全保障

## 📊 诊断能力

系统能够识别以下7种皮肤病变类型:

1. **黑色素瘤(mel)**:最严重的皮肤癌类型,需要及时诊断和治疗

2. **基底细胞癌(bcc)**:最常见的皮肤癌类型,生长缓慢,极少转移

3. **鳞状细胞癌(akiec)**:第二常见的皮肤癌,可能侵袭周围组织

4. **良性角化病(bkl)**:常见的良性皮肤病变

5. **皮脂腺囊肿(nv)**:一种常见的良性皮肤病变

6. **皮肤纤维瘤(df)**:一种良性结缔组织增生

7. **血管病变(vasc)**:与血管相关的皮肤病变

## 🚀 安装与部署

### 环境要求

- Python 3.8+

- MySQL 5.7+

- 至少4GB内存(推荐8GB+用于模型加载)

- 支持现代浏览器(Chrome、Firefox、Edge等)

## 🖥️ 使用指南

### 登录系统

- 使用预设账号登录:

  - 用户名:xxxxx

  - 密码:xxxx

### 皮肤病变诊断

1. 点击导航栏中的"诊断中心"

2. 上传皮肤病变图像(支持常见图像格式如JPG、PNG等)

3. 系统自动分析并显示诊断结果,包括:

   - 主要诊断结果及置信度

   - 其他可能病变类型的概率分布

   - 后续就医建议

### AI医疗咨询

1. 点击导航栏中的"AI咨询"

2. 在对话框中输入皮肤健康相关问题

3. 系统会通过DeepSeek API提供专业的解答

### 患者管理

1. 点击导航栏中的"病程管理"

2. 查看现有患者列表或添加新患者

3. 记录患者的诊断结果、治疗进度和状态

## 📝 系统特色

- **高准确率**:基于HAM10000数据集训练的模型,诊断准确率达92%

- **响应速度快**:优化的前后端交互,快速响应用户操作

- **用户界面友好**:美观的UI设计,流畅的交互体验

- **离线功能支持**:API不可用时的回退机制,确保系统可用性

- **安全性保障**:安全的用户认证和数据处理机制

## 🌟 未来展望

- 扩展支持更多种类的皮肤病变识别

- 引入患者随访管理功能

- 开发移动端应用,方便随时随地使用

- 增加医患沟通平台,促进远程医疗咨询

- 集成更多先进AI技术,提升诊断精度

## ⚠️ 免责声明

本系统仅作为辅助诊断工具,不能替代专业医生的诊断。任何诊断结果都应当经过专业医疗人员确认后再制定治疗方案。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐