(有报告 跑通)基于YOLOV8的花卉检测识别系统 基于深度学习的花卉检测识别系统 有数据集 模型已经训练好 直接用即可 包搭配环境 远程运行跑通程序 本项目已经训练好模型,配置好环境可直接使用,运行效果见图像(可找我要演示视频) 项目介绍: 软件:Pycharm+Anaconda 环境:python=3.9 opencv-python PyQt5 torch1.9 文件: 1.完整程序文件(.py等 2.UI界面源文件、图标(.ui、.qrc、.py等) 3.测试图片、视频文件(.jpeg、.mp4、.avi等) 数据集共15类 \"雏菊\", '蒲公英', '玫瑰', '向日葵', '素馨花', '栀子花', '金盏花', '芙蓉花', '金银花', '印度锦葵', '麻风树属', '马拉巴尔木槿', '万寿菊', '香花', '蜘蛛百合' 功能: 系统可用于花卉检测识别; 支持图片、视频及摄像头进行检测: 界面可实时显示目标位置、目标总数、置信度等信息: 支持检测结果保存; ①选择图片进行对于花卉检测识别 ②选择视频进行对于花卉检测识别 ③摄像头进行检测对于花卉检测识别

想不想用摄像头对准花园就能自动识别出玫瑰还是向日葵?今天咱们来玩个有意思的——基于YOLOv8训练好的15种花卉检测系统。不用自己标注数据,不用漫长训练,环境都给你配好了,拿来就能直接开箱检测!

这个项目的最大优势是"即插即用"。下载完压缩包后,用conda创建个虚拟环境:

conda create -n flower_det python=3.9
conda activate flower_det
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
pip install -r requirements.txt

核心检测代码藏在detect_flowers.py里,来看这段视频检测的精华部分:

def video_detect(self, video_path):
    cap = cv2.VideoCapture(video_path)
    while True:
        ret, frame = cap.read()
        if not ret: break
        
        results = self.model.predict(frame, conf=0.6)
        annotated_frame = results[0].plot()
        
        # 实时统计花仙子数量
        self.label_count.setText(f"Detected: {len(results[0])}")
        
        # 把带框的画面怼到UI上
        self.display_image(annotated_frame)
        
    cap.release()

这里用了YOLOv8原生的predict接口,conf参数控制着检测阈值。有意思的是results[0].plot()自带了画框功能,比自己写OpenCV画框省事多了。注意那个0.6的置信度阈值,调低点能抓更多花但可能有误检,根据实际场景微调。

(有报告 跑通)基于YOLOV8的花卉检测识别系统 基于深度学习的花卉检测识别系统 有数据集 模型已经训练好 直接用即可 包搭配环境 远程运行跑通程序 本项目已经训练好模型,配置好环境可直接使用,运行效果见图像(可找我要演示视频) 项目介绍: 软件:Pycharm+Anaconda 环境:python=3.9 opencv-python PyQt5 torch1.9 文件: 1.完整程序文件(.py等 2.UI界面源文件、图标(.ui、.qrc、.py等) 3.测试图片、视频文件(.jpeg、.mp4、.avi等) 数据集共15类 \"雏菊\", '蒲公英', '玫瑰', '向日葵', '素馨花', '栀子花', '金盏花', '芙蓉花', '金银花', '印度锦葵', '麻风树属', '马拉巴尔木槿', '万寿菊', '香花', '蜘蛛百合' 功能: 系统可用于花卉检测识别; 支持图片、视频及摄像头进行检测: 界面可实时显示目标位置、目标总数、置信度等信息: 支持检测结果保存; ①选择图片进行对于花卉检测识别 ②选择视频进行对于花卉检测识别 ③摄像头进行检测对于花卉检测识别

UI界面是PyQt5做的,看看摄像头检测按钮的响应:

def webcam_detect(self):
    self.cap = cv2.VideoCapture(0)
    while self.thread_flag:
        ret, frame = self.cap.read()
        if ret:
            results = self.model.predict(frame)
            # 把BGR转RGB给QImage吃
            rgb_image = cv2.cvtColor(results[0].plot(), cv2.COLOR_BGR2RGB)
            h, w, ch = rgb_image.shape
            bytes_per_line = ch * w
            convert_to_Qt_format = QImage(rgb_image.data, w, h, bytes_per_line, QImage.Format_RGB888)
            self.label_display.setPixmap(QPixmap.fromImage(convert_to_Qt_format))

这里有个坑要注意:OpenCV读的是BGR格式,而PyQt的QImage需要RGB格式,不转颜色的话画面会发蓝。那个while循环里的thread_flag是个安全开关,关闭窗口时会自动终止摄像头采集。

实际测试中发现金盏花和万寿菊容易混淆,毕竟都是橘黄色系的花。这时候可以拉高conf到0.7以上,或者加个NMS(非极大抑制):

results = model.predict(source, conf=0.6, iou=0.5)  # 调大iou值减少重叠框

想保存检测结果?程序里藏了个彩蛋:

# 在检测函数里加个时间戳保存
if self.save_flag:
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    cv2.imwrite(f"results/{timestamp}.jpg", annotated_frame)

记得先在程序根目录建个results文件夹,不然会报错找不到路径。这个保存功能特别适合做花卉普查时批量记录。

最后说个冷知识:数据集里的"蜘蛛百合"其实是石蒜科的,和真正的百合没关系。所以当你在公园检测到这花时,可以掏出这个冷知识惊艳同行的小伙伴~ 整套代码已经打包好,想要体验的朋友私信我拿演示视频,保证你分分钟变身行走的"植物百科全书"!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐