博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅

2、最全计算机专业毕业设计选题大全(建议收藏)✅

1、项目介绍

基于YOLO鸟类识别系统

YoloV8V5深度学习算法、PySide6界面、注册登录、训练集测试集

在构建鸟类识别系统的过程中,一个精心准备和预处理的数据集是成功的关键。我们的数据集是专门为了训练、验证和测试基于YOLOv8算法的鸟类识别模型而设计的,它包含了总共2545张图像,这些图像经过了细致的分组,其中包括1697张训练图像、424张验证图像和424张测试图像。这样的分布为模型的训练和评估提供了坚实的基础,确保了评估过程的准确性和可靠性。

2、项目界面

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3、项目说明

基于YOLO鸟类识别系统

YoloV8V5深度学习算法、PySide6界面、注册登录、训练集测试集

在构建鸟类识别系统的过程中,一个精心准备和预处理的数据集是成功的关键。我们的数据集是专门为了训练、验证和测试基于YOLOv8算法的鸟类识别模型而设计的,它包含了总共2545张图像,这些图像经过了细致的分组,其中包括1697张训练图像、424张验证图像和424张测试图像。这样的分布为模型的训练和评估提供了坚实的基础,确保了评估过程的准确性和可靠性。

‘Acadian_Flycatcher’:“绿纹捕蝇雀”,‘American_Crow’:“美洲乌鸦”,‘American_Goldfinch’:“金翅雀”,
‘American_Pipit’:“琵琶鸟”,‘American_Redstart’:“红尾鸲”,‘American_Three_toed_Woodpecker’:“三趾啄木鸟”,‘Anna_Hummingbird’:“朱红蜂鸟”,‘Artic_Tern’:
“亚热带燕鸥”,‘Baird_Sparrow’:“贝氏草雀”,‘Baltimore_Oriole’:“巴尔的摩金莺”,‘Bank_Swallow’:“灰沙燕”,‘Barn_Swallow’:
“家燕”,‘Bay_breasted_Warbler’:“湾胸莺”,‘Belted_Kingfisher’:“带翠鸟”,‘Bewick_Wren’:“布威克鹪鹩”,‘Black_Tern’:
“黑燕鸥”,‘Black_and_white_Warbler’:“黑白林莺”,‘Black_billed_Cuckoo’:“黑喙杜鹃”,‘Black_capped_Vireo’:“黑顶莺雀”,
‘Black_footed_Albatross’:“黑足信天翁”,‘Black_throated_Blue_Warbler’:“黑喉蓝林莺”,‘Black_throated_Sparrow’:“黑喉麻雀”,
‘Blue_Grosbeak’:“蓝蜡嘴鸟”,‘Blue_Jay’:“冠蓝鸦”,‘Blue_headed_Vireo’:“蓝头莺雀”,‘Blue_winged_Warbler’:“蓝翅虫森莺”,
‘Boat_tailed_Grackle’:“宽尾拟八哥”,‘Bobolink’:“食米鸟”,‘Bohemian_Waxwing’:“太平鸟”,‘Brandt_Cormorant’:“加州鸬鹚”,
‘Brewer_Blackbird’:“蓝头黑鹂”,‘Brewer_Sparrow’:“布氏麻雀”,‘Bronzed_Cowbird’:“铜色牛鹂”,‘Brown_Creeper’:“金冠戴菊鸟”,
‘Brown_Pelican’:“褐鹈鹕”,‘Brown_Thrasher’:“褐鸫”

4、核心代码

# -*- coding: utf-8 -*-
import cv2  # 导入OpenCV库,用于处理图像和视频
import torch
from QtFusion.models import Detector, HeatmapGenerator  # 从QtFusion库中导入Detector抽象基类
from datasets.Bird.label_name import Chinese_name  # 从datasets库中导入Chinese_name字典,用于获取类别的中文名称
from ultralytics import YOLO  # 从ultralytics库中导入YOLO类,用于加载YOLO模型
from ultralytics.utils.torch_utils import select_device  # 从ultralytics库中导入select_device函数,用于选择设备

device = "cuda:0" if torch.cuda.is_available() else "cpu"

ini_params = {
    'device': device,  # 设备类型,这里设置为CPU
    'conf': 0.25,  # 物体置信度阈值
    'iou': 0.5,  # 用于非极大值抑制的IOU阈值
    'classes': None,  # 类别过滤器,这里设置为None表示不过滤任何类别
    'verbose': False
}


def count_classes(det_info, class_names):
    """
    Count the number of each class in the detection info.

    :param det_info: List of detection info, each item is a list like [class_name, bbox, conf, class_id]
    :param class_names: List of all possible class names
    :return: A list with counts of each class
    """
    count_dict = {name: 0 for name in class_names}  # 创建一个字典,用于存储每个类别的数量
    for info in det_info:  # 遍历检测信息
        class_name = info['class_name']  # 获取类别名称
        if class_name in count_dict:  # 如果类别名称在字典中
            count_dict[class_name] += 1  # 将该类别的数量加1

    # Convert the dictionary to a list in the same order as class_names
    count_list = [count_dict[name] for name in class_names]  # 将字典转换为列表,列表的顺序与class_names相同
    return count_list  # 返回列表


class YOLOv8v5Detector(Detector):  # 定义YOLOv8Detector类,继承自Detector类
    def __init__(self, params=None):  # 定义构造函数
        super().__init__(params)  # 调用父类的构造函数
        self.model = None
        self.img = None  # 初始化图像为None
        self.names = list(Chinese_name.values())  # 获取所有类别的中文名称
        self.params = params if params else ini_params  # 如果提供了参数则使用提供的参数,否则使用默认参数

        # 创建heatmap
        self.heatmap = HeatmapGenerator(heatmap_intensity=0.4, hist_eq_threshold=200)

    def load_model(self, model_path):  # 定义加载模型的方法
        self.device = select_device(self.params['device'])  # 选择设备
        self.model = YOLO(model_path, )
        layer = list(self.model.model.children())[0][-3]
        self.heatmap.register_hook(reg_layer=layer)
        names_dict = self.model.names  # 获取类别名称字典
        self.names = [Chinese_name[v] if v in Chinese_name else v for v in names_dict.values()]  # 将类别名称转换为中文
        
        self.model(torch.zeros(1, 3, *[self.imgsz] * 2).to(self.device).
                   type_as(next(self.model.model.parameters())))  # 预热
        self.model(torch.rand(1, 3, *[self.imgsz] * 2).to(self.device).
                   type_as(next(self.model.model.parameters())))  # 预热
        
    def preprocess(self, img):  # 定义预处理方法
        self.img = img  # 保存原始图像
        return img  # 返回处理后的图像

    def predict(self, img):  # 定义预测方法
        results = self.model(img, **ini_params)
        img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
        superimposed_img = self.heatmap.get_heatmap(img)
        return results, superimposed_img

    def postprocess(self, pred):  # 定义后处理方法
        results = []  # 初始化结果列表
        for res in pred[0].boxes:
            for box in res:
                # 提前计算并转换数据类型
                class_id = int(box.cls.cpu())
                bbox = box.xyxy.cpu().squeeze().tolist()
                bbox = [int(coord) for coord in bbox]  # 转换边界框坐标为整数

                result = {
                    "class_name": self.names[class_id],  # 类别名称
                    "bbox": bbox,  # 边界框
                    "score": box.conf.cpu().squeeze().item(),  # 置信度
                    "class_id": class_id,  # 类别ID
                }
                results.append(result)  # 将结果添加到列表

        return results  # 返回结果列表

    def set_param(self, params):
        self.params.update(params)




5、项目获取

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐