欢迎光临
我们一直在努力

计算机毕业设计选题推荐:基于深度学习的狗狗品种图像分类研究、毕业设计选题、选题推荐、深度学习项目、高质量项目、毕设指导、项目定制、全套源码、讲解文档

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

目录

  • 狗狗品种图像分类研究系统介绍
  • 狗狗品种图像分类研究系统演示视频
  • 狗狗品种图像分类研究系统演示图片
  • 狗狗品种图像分类研究系统代码展示
  • 狗狗品种图像分类研究系统文档展示

狗狗品种图像分类研究系统介绍

本系统名为《基于深度学习的狗狗品种图像分类研究》,是一个面向狗狗品种识别场景的计算机毕设系统。开发语言采用Python,检测环节使用Ultralytics YOLO系列模型先定位画面中的狗狗目标,分类环节用ConvNeXt-Tiny、ResNet等骨干网络做品种判别,训练过程中结合短训海选、LR Finder、seed、warmup、cosine、EMA、AMP和EarlyStopping等配方得到best.pt,并通过export_run.py导出ONNX模型供后端加载。系统后端使用Django,前端使用Vue、ElementUI、ECharts、HTML、CSS、JavaScript和jQuery,数据库使用MySQL。功能上包含系统首页、数据大屏、用户管理、品种识别、图片识别、视频识别、摄像头识别、识别历史、修改密码、个人信息和识别大屏等模块。用户上传图片、视频或打开摄像头后,系统调用YOLO与分类模型完成检测和品种判断,把识别结果、置信度和时间等信息写入识别历史,并在数据大屏中用ECharts展示品种分布、识别数量等图表,方便查看识别效果和系统运行情况。

狗狗品种图像分类研究系统演示视频

点击观看项目演示视频

狗狗品种图像分类研究系统演示图片

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

狗狗品种图像分类研究系统代码展示

from pyspark.sql import SparkSession; spark = SparkSession.builder.appName("DogBreedRecognitionScreen").config("spark.sql.shuffle.partitions","4").getOrCreate()
from django.http import JsonResponse; from django.views.decorators.csrf import csrf_exempt; from django.core.files.storage import default_storage; from datetime import datetime; from .models import RecognizeHistory; import os,cv2,numpy as np,torch,json; from ultralytics import YOLO; import onnxruntime as ort
yolo_model = YOLO("yolov8s.pt"); onnx_session = ort.InferenceSession("best.onnx", providers=["CPUExecutionProvider"]); device = torch.device("cuda" if torch.cuda.is_available() else "cpu"); class_names = ["金毛","拉布拉多","哈士奇","柯基","泰迪","比熊","萨摩耶","边牧","德牧","博美"]; dog_class_ids = {16}
def preprocess_image(img):
resized = cv2.resize(img, (224, 224))
rgb = cv2.cvtColor(resized, cv2.COLOR_BGR2RGB)
arr = rgb.astype(np.float32) / 255.0
mean = np.array([0.485,0.456,0.406], dtype=np.float32)
std = np.array([0.229,0.224,0.225], dtype=np.float32)
arr = (arr – mean) / std
arr = np.transpose(arr, (2,0,1))
return np.expand_dims(arr, 0).astype(np.float32)
# 核心功能一:图片识别
@csrf_exempt
def recognize_image(request):
if request.method != "POST":
return JsonResponse({"code":400,"msg":"请求方式错误"})
file = request.FILES.get("image")
if not file:
return JsonResponse({"code":400,"msg":"请上传狗狗图片"})
suffix = os.path.splitext(file.name)[–1].lower()
if suffix not in [".jpg",".jpeg",".png",".bmp"]:
return JsonResponse({"code":400,"msg":"图片格式不支持"})
save_path = default_storage.save("tmp/dog_"+datetime.now().strftime("%Y%m%d%H%M%S%f")+suffix, file)
abs_path = default_storage.path(save_path)
img = cv2.imread(abs_path)
if img is None:
return JsonResponse({"code":400,"msg":"图片读取失败"})
det_result = yolo_model(img, conf=0.25, iou=0.45, verbose=False)[0]
boxes = []
for box in det_result.boxes:
if int(box.cls[0]) not in dog_class_ids:
continue
x1,y1,x2,y2 = map(int, box.xyxy[0].tolist())
crop = img[max(0,y1):min(img.shape[0],y2), max(0,x1):min(img.shape[1],x2)]
if crop.size == 0:
continue
input_tensor = preprocess_image(crop)
input_name = onnx_session.get_inputs()[0].name
logits = onnx_session.run(None, {input_name: input_tensor})[0][0]
exp = np.exp(logits – np.max(logits))
prob = exp / exp.sum()
idx = int(np.argmax(prob))
score = round(float(prob[idx]), 4)
boxes.append({"breed":class_names[idx],"score":score,"bbox":[x1,y1,x2,y2]})
if not boxes:
input_tensor = preprocess_image(img)
input_name = onnx_session.get_inputs()[0].name
logits = onnx_session.run(None, {input_name: input_tensor})[0][0]
exp = np.exp(logits – np.max(logits))
prob = exp / exp.sum()
idx = int(np.argmax(prob))
boxes.append({"breed":class_names[idx],"score":round(float(prob[idx]),4),"bbox":[]})
top = max(boxes, key=lambda item: item["score"])
RecognizeHistory.objects.create(user=request.user if request.user.is_authenticated else None, media_type="image", file_path=save_path, breed=top["breed"], score=top["score"], detail=boxes)
return JsonResponse({"code":200,"msg":"识别完成","data":{"top":top,"boxes":boxes}})
# 核心功能二:视频识别
@csrf_exempt
def recognize_video(request):
if request.method != "POST":
return JsonResponse({"code":400,"msg":"请求方式错误"})
file = request.FILES.get("video")
if not file:
return JsonResponse({"code":400,"msg":"请上传狗狗视频"})
suffix = os.path.splitext(file.name)[–1].lower()
if suffix not in [".mp4",".avi",".mov",".mkv"]:
return JsonResponse({"code":400,"msg":"视频格式不支持"})
save_path = default_storage.save("tmp/dog_video_"+datetime.now().strftime("%Y%m%d%H%M%S%f")+suffix, file)
abs_path = default_storage.path(save_path)
cap = cv2.VideoCapture(abs_path)
if not cap.isOpened():
return JsonResponse({"code":400,"msg":"视频读取失败"})
fps = cap.get(cv2.CAP_PROP_FPS) or 25
step = max(int(fps), 1)
frame_no = 0
breed_counter = {}
detail = []
input_name = onnx_session.get_inputs()[0].name
while cap.isOpened():
ok, frame = cap.read()
if not ok:
break
if frame_no % step == 0:
det_result = yolo_model(frame, conf=0.25, iou=0.45, verbose=False)[0]
for box in det_result.boxes:
if int(box.cls[0]) not in dog_class_ids:
continue
x1,y1,x2,y2 = map(int, box.xyxy[0].tolist())
crop = frame[max(0,y1):min(frame.shape[0],y2), max(0,x1):min(frame.shape[1],x2)]
if crop.size == 0:
continue
logits = onnx_session.run(None, {input_name: preprocess_image(crop)})[0][0]
exp = np.exp(logits – np.max(logits))
prob = exp / exp.sum()
idx = int(np.argmax(prob))
breed = class_names[idx]
score = round(float(prob[idx]), 4)
breed_counter[breed] = breed_counter.get(breed, 0) + 1
detail.append({"frame":frame_no,"breed":breed,"score":score,"bbox":[x1,y1,x2,y2]})
frame_no += 1
cap.release()
top_list = sorted(breed_counter.items(), key=lambda item: item[1], reverse=True)[:5]
top = {"breed":top_list[0][0],"score":detail[–1]["score"] if detail else 0} if top_list else {"breed":"未识别","score":0}
RecognizeHistory.objects.create(user=request.user if request.user.is_authenticated else None, media_type="video", file_path=save_path, breed=top["breed"], score=top["score"], detail={"frames":detail,"counter":breed_counter})
return JsonResponse({"code":200,"msg":"视频识别完成","data":{"top":top,"counter":breed_counter,"frames":detail[:100]}})
# 核心功能三:识别大屏统计
@csrf_exempt
def recognize_screen(request):
rows = list(RecognizeHistory.objects.all().values("breed","media_type","score","created_at"))
if not rows:
return JsonResponse({"code":200,"data":{"classBar":[],"mediaPie":[],"scoreLine":[],"summary":{}}})
df = spark.createDataFrame(rows)
df.createOrReplaceTempView("dog_history")
class_bar = spark.sql("select breed as name, count(1) as value from dog_history group by breed order by value desc limit 10").toJSON().collect()
media_pie = spark.sql("select media_type as name, count(1) as value from dog_history group by media_type").toJSON().collect()
score_line = spark.sql("select date_format(created_at,'yyyy-MM-dd') as day, round(avg(score),4) as avg_score from dog_history group by date_format(created_at,'yyyy-MM-dd') order by day").toJSON().collect()
total = df.count()
avg_score = df.selectExpr("round(avg(score),4) as avg_score").collect()[0]["avg_score"]
max_score = df.selectExpr("max(score) as max_score").collect()[0]["max_score"]
min_score = df.selectExpr("min(score) as min_score").collect()[0]["min_score"]
media_count = df.select("media_type").distinct().count()
summary = {"total":total,"avgScore":avg_score,"maxScore":max_score,"minScore":min_score,"mediaCount":media_count}
return JsonResponse({"code":200,"data":{"classBar":[json.loads(item) for item in class_bar],"mediaPie":[json.loads(item) for item in media_pie],"scoreLine":[json.loads(item) for item in score_line],"summary":summary}})

狗狗品种图像分类研究系统文档展示

在这里插入图片描述

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

赞(0)
未经允许不得转载:171主机测评 » 计算机毕业设计选题推荐:基于深度学习的狗狗品种图像分类研究、毕业设计选题、选题推荐、深度学习项目、高质量项目、毕设指导、项目定制、全套源码、讲解文档
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址