收藏关注不迷路!!
🌟文末获取源码+数据库🌟
感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多的人
前言
随着人们对宠物健康和福利的关注增加,对宠物皮肤病的早期诊断和治疗变得尤为重要。然而,准确识别宠物的皮肤病类型是具有挑战性的,因为这需要专业的医学知识和经验。因此,本研究旨在开发一个基于深度学习的宠物皮肤病识别系统,以提供快速、准确的诊断支持。。
主要采用了深度学习技术,择卷积神经网络(CNN)作为基础模型,并根据皮肤病的特性进行修改和优化。例如,可以使用Inception、ResNet等成熟的CNN架构。收集各种类型的宠物皮肤病图片,并进行详细的标注,包括疾病的类型、病变区域等。使用标注的数据对模型进行训练,并采用适当的优化算法(如梯度下降、Adam等)来更新网络参数。
通过本研究,我们成功开发了一个基于深度学习的宠物皮肤病识别系统。该系统在测试集上达到了较高的准确率(>90%),具有良好的泛化能力。此外,与传统的皮肤病诊断方法相比,该系统显著提高了诊断的效率和准确性,为兽医提供了更可靠的辅助诊断工具。
该系统不仅可以帮助兽医快速准确地诊断宠物的皮肤病类型,还可以用于大规模宠物的筛查,满足兽医和宠物主人的需求。未来,我们将进一步优化模型,提高检测的灵敏度和特异性,并探索其在其他宠物皮肤病诊断中的应用。
详细视频演示
文章底部名片,联系我看更详细的演示视频
一、项目介绍
集宠物皮肤病图像数据,根据宠物皮肤病识别的需求,选择适合的深度学习模型,设计一个基于深度学习的宠物皮肤病识别系统,实现宠物皮肤病的自动化识别和分类,通过调整模型参数优化算法,提高模型的泛化能力和准确率,为宠物的健康管理提供辅助诊断工具。
基本要求:查阅宠物皮肤病识别及图像处理领域相关文献,了解宠物皮肤病的分类和识别方法,以及对宠物皮肤病图像的诊断标准。了解深度学习在医学图像分类、病变检测领域的最新进展,掌握国内外宠物皮肤病识别的发展现状,明确宠物皮肤病识别系统的设计方案。认真撰写毕业设计说明书,准确表述设计的全过程。
————————————————
二、功能介绍
这项研究是为了探究将深度学习技术应用在宠物犬皮肤病识别领域,为用户提供准确的识别结果,可以达到预防皮肤病的效果,减小其带来的影响。具体可以分为以下三个步骤 :
1.数据集的收集以及预处理
这一部分涉及采集和准备用于训练和测试的数据集,包含各种狗的皮肤病图像,从网络上寻找大量图片并对图片进行处理和分析,搭建成数据集。
2. 选择模型对数据集训练以及评估优化
选择卷积神经网络中的ResNet50模型,通过ResNet50模型对当前数据集进行分析和训练,调整模型参数优化算法,提高模型的泛化能力和准确率,然后对模型进行评估,不断提高准确率和召回率。最后实现对目标的准确识别。
3. 将模型部署到系统中
将训练好的模型部署到web端中,通过上传图片,可以为宠物主人和兽医提供皮肤病诊断服务,同时收集更多的数据持续优化和改进模型。
三、核心代码
部分代码:
import os
import json
import cv2
from PIL import Image
from flask import Flask, request, render_template, send_from_directory
from flask_cors import CORS
import torch
import torch.nn as nn
from torchvision import transforms
from torchvision.models import vgg16
app = Flask(__name__)
CORS(app) # 解决跨域问题
app.jinja_env.variable_start_string = '<<'
app.jinja_env.variable_end_string = '>>'
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
weights_path = "models/vgg16.pth"
class_json_path = "static/json/class_to_chinese.json"
assert os.path.exists(weights_path), "weights path does not exist..."
assert os.path.exists(class_json_path), "class json path does not exist..."
# load class info
json_file = open(class_json_path, 'rb')
class_indict = json.load(json_file)
# create model
model = vgg16()
# 更改Vgg16模型的最后一层
model.classifier[-1] = nn.Linear(4096, len(class_indict), bias=True)
model.load_state_dict(torch.load(weights_path, map_location=device))
@app.route('/upload', methods=['get', 'post'])
def upload_picture():
file_name = request.files['file'].filename
target_image_name = 'images/tmp_up.' + file_name.split(".")[-1]
request.files['file'].save(target_image_name)
img_init = cv2.imread(target_image_name) # 打开图片
h, w, c = img_init.shape
scale = 300 / h
img_show = cv2.resize(img_init, (0, 0), fx=scale, fy=scale) # 将图片的大小统一调整到300的高,方便界面显示
cv2.imwrite("images/show.png", img_show)
img_init = cv2.resize(img_init, (224, 224)) # 将图片大小调整到224*224用于模型推理
cv2.imwrite('images/target.png', img_init)
return json.dumps({"data": None})
@app.route('/show/<path:filename>', methods=['GET', 'POST'])
def get_show_picture(filename):
return send_from_directory('images', filename)
@app.route('/show/pre_show.png', methods=['GET', 'POST'])
def get_pre_show_picture():
return send_from_directory('images', 'pre_show.png')
@app.route('/show/bg.jpg', methods=['GET', 'POST'])
def get_bg_picture():
return send_from_directory('images', 'bg.jpg')
@app.route('/front/index.css', methods=['GET', 'POST'])
def get_front_index_css():
return send_from_directory('templates', 'index.css')
@app.route('/front/axios.min.js', methods=['GET', 'POST'])
def get_front_axios_min():
return send_from_directory('templates', 'axios.min.js')
@app.route('/front/index.js', methods=['GET', 'POST'])
def get_front_index_js():
return send_from_directory('templates', 'index.js')
@app.route('/front/vue.js', methods=['GET', 'POST'])
def get_front_vue():
return send_from_directory('templates', 'vue.js')
@app.route('/predict', methods=['post'])
def predict_img():
data_transform = transforms.Compose(
[transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406],
[0.229, 0.224, 0.225])])
img = Image.open(r'images/target.png')
# [N, C, H, W]
img = data_transform(img)
# expand batch dimension
img = torch.unsqueeze(img, dim=0)
model.eval()
with torch.no_grad():
# predict class
output = torch.squeeze(model(img)).cpu()
predict = torch.softmax(output, dim=0)
predict_cla = torch.argmax(predict).numpy()
result_label = "诊断结果: {}".format(class_indict[str(predict_cla)])
result_prob = "诊断概率: {}".format(predict[predict_cla].numpy())
return json.dumps({"result_label": result_label,
"result_prob": result_prob})
@app.route("/", methods=["GET", "POST"])
def root():
return render_template("index.html")
if __name__ == '__main__':
# app.debug = False
app.run(host='0.0.0.0', port=5003)
四、效果图
五、文章目录
目 录
1 绪 论 1
1.1 选题的背景 1
1.2 国内外研究现状 1
1.3 选题的目的和意义 1
1.4主要研究内容 3
2 相关技术介绍 5
2.1 卷积神经网络 5
2.2 系统开发相关技术 9
3 数据获取及预处理 14
3.1 数据集的获取及简介 14
3.2 数据预处理 17
4 模型训练与评估 18
4.1 模型选择 14
3.2 模型训练 17
4.3 模型评估 17
5 模型优化 18
5.1 优化器选择 14
5.2 效果对比分析 17
6 系统部署 19
6.1 需求分析 14
6.2 系统设计与实现 17
6.3 系统测试 17
7 总结与展望 29
7.1 总结 29
7.2 展望 29
参考文献 30
致 谢 33
六 、源码获取
下方名片联系我即可!!
大家点赞、收藏、关注、评论啦 、查看👇🏻获取联系方式👇🏻