首页 > 编程语言 >基于YOLO8水稻病虫害检测系统 水稻病虫害检测系统 YOLO目标检测算法 识别图片与视频支持本地摄像头识别,图片识别支持统计检测到的物体数量,UI界面动态调节模型置信度

基于YOLO8水稻病虫害检测系统 水稻病虫害检测系统 YOLO目标检测算法 识别图片与视频支持本地摄像头识别,图片识别支持统计检测到的物体数量,UI界面动态调节模型置信度

时间:2024-12-23 18:03:20浏览次数:5  
标签:检测 image st conf model 识别 病虫害 frame

基于YOLO8的水稻病虫害检测系统 水稻病虫害检测系统 YOLO目标检测算法在这里插入图片描述

技术栈:yolo8+streamlit
[1]可以识别图片与视频,也支持本地摄像头识别,图片识别支持统计检测到的物体数量,并返回到前端页面显示
[2]可以通过UI界面动态调节模型置信度,可以动态选择模型权重
[3]系统目录下附带有非常详细的环境配置运行指导pdf文件(将近10页)。
windows系统下yolo+streamlit项目免环境配置安装包。下载免环境压缩包文件,解压后即可一键启动项目,无需手动配置环境。注意:免环境压缩包,仅限windows系统,其余不支持,下单后可向客服索要。
[4]界面UI优美,检测精度高!包含源码、训练好的权重文件,模型的map50为83.9%在这里插入图片描述

本系统是的web应用服务(有前后端,服务端默认在8501端口启动),可以部署到服务器。不同于基于pyside,pyqt之类的系统,这种系统只能在本地电脑运行,而本系统不单单是可以在本地电脑运行,还可以部署到服务器上
全系统仅200多行代码,代码注释非常非常详细,不用担心看不懂项目逻辑,支持二次开发(如果基于这个系统改为基于YOLO8的安全帽识别,只需将模型放在指定目录下即可)。本系统基于pytorch+streamlit ,只要懂pytorch,对照streamlit官方文档,二次开发轻而易举,在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
好的,下面是一个完整的基于YOLOv8的水稻病虫害检测系统的项目代码和详细配置说明。该系统使用Streamlit作为前端框架,支持图片、视频识别以及本地摄像头识别,并且可以通过UI界面动态调节模型置信度和选择不同的模型权重。

完整项目代码

import os
import sys
import streamlit as st
from ultralytics import YOLO
import cv2
import numpy as np
from PIL import Image
import tempfile

# 加载模型
@st.cache_resource
def load_model(weights_path):
    model = YOLO(weights_path)
    return model

# 图片检测函数
def detect_image(model, image, conf_threshold):
    results = model.predict(image, conf=conf_threshold)[0]
    annotated_frame = annotate_image(image, results)
    return annotated_frame

# 视频检测函数
def detect_video(model, video_path, conf_threshold):
    cap = cv2.VideoCapture(video_path)
    while cap.isOpened():
        ret, frame = cap.read()
        if not ret:
            break
        results = model.predict(frame, conf=conf_threshold)[0]
        annotated_frame = annotate_image(frame, results)
        yield annotated_frame
    cap.release()

# 摄像头检测函数
def detect_camera(model, conf_threshold):
    cap = cv2.VideoCapture(0)
    while True:
        ret, frame = cap.read()
        if not ret:
            break
        results = model.predict(frame, conf=conf_threshold)[0]
        annotated_frame = annotate_image(frame, results)
        yield annotated_frame
    cap.release()

# 标注图像函数
def annotate_image(image, results):
    for result in results.boxes.cpu().numpy():
        r = result.xyxy[0].astype(int)
        cls = int(result.cls[0])
        conf = result.conf[0]
        
        label = f"{model.names[cls]} {conf:.2f}"
        color = (0, 255, 0)
        cv2.rectangle(image, (r[0], r[1]), (r[2], r[3]), color, 2)
        cv2.putText(image, label, (r[0], r[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)
    return image

# Streamlit 主界面
def main():
    st.title("Rice Pest Detection System")
    
    # 动态加载模型
    weights_options = ['best_rice_pest_yolov8.pt']  # 添加更多权重文件路径
    selected_weights = st.sidebar.selectbox("Select Model Weights", weights_options)
    model = load_model(selected_weights)
    
    # 动态调整置信度阈值
    conf_threshold = st.sidebar.slider("Confidence Threshold", min_value=0.0, max_value=1.0, value=0.5, step=0.01)
    
    # 输入方式选择
    input_type = st.sidebar.radio("Input Type", ["Image", "Video", "Camera"])
    
    if input_type == "Image":
        uploaded_file = st.file_uploader("Upload an image...", type=["jpg", "jpeg", "png"])
        if uploaded_file is not None:
            image = Image.open(uploaded_file)
            image_np = np.array(image)
            annotated_image = detect_image(model, image_np, conf_threshold)
            st.image(annotated_image, channels="BGR", caption="Detected Image")
            
            # 统计检测到的物体数量
            results = model.predict(image_np, conf=conf_threshold)[0]
            class_counts = {}
            for result in results.boxes.cpu().numpy():
                cls = int(result.cls[0])
                class_name = model.names[cls]
                if class_name in class_counts:
                    class_counts[class_name] += 1
                else:
                    class_counts[class_name] = 1
            
            st.subheader("Detection Summary:")
            for class_name, count in class_counts.items():
                st.write(f"{class_name}: {count}")
    
    elif input_type == "Video":
        uploaded_file = st.file_uploader("Upload a video...", type=["mp4", "avi"])
        if uploaded_file is not None:
            tfile = tempfile.NamedTemporaryFile(delete=False) 
            tfile.write(uploaded_file.read())
            tfpath = tfile.name
            cap = cv2.VideoCapture(tfpath)
            frame_placeholder = st.empty()
            for annotated_frame in detect_video(model, tfpath, conf_threshold):
                frame_placeholder.image(annotated_frame, channels="BGR", use_column_width=True)
            cap.release()
            os.remove(tfpath)
    
    elif input_type == "Camera":
        frame_placeholder = st.empty()
        for annotated_frame in detect_camera(model, conf_threshold):
            frame_placeholder.image(annotated_frame, channels="BGR", use_column_width=True)

if __name__ == "__main__":
    main()

文件结构

rice_pest_detection/
├── main.py
├── datasets/
│   └── rice_pests/
│       ├── images/
│       │   ├── image1.jpg
│       │   ├── image2.jpg
│       │   └── ...
│       └── labels/
│           ├── image1.txt
│           ├── image2.txt
│           └── ...
├── best_rice_pest_yolov8.pt
└── requirements.txt

安装依赖项

首先,确保你已经安装了所有必要的依赖项。你可以通过以下命令安装:

pip install -r requirements.txt

requirements.txt 内容如下:

streamlit==1.25.0
opencv-python
torch==2.0
ultralytics

数据集格式

假设你的数据集已经按照YOLOv5/YOLOv8的格式进行了标注。每个图像文件对应一个文本文件,其中包含边界框信息。例如:

image1.jpg

0 0.5 0.5 0.2 0.2
1 0.7 0.7 0.1 0.1

这表示图像中有两个对象,第一个对象的类别是0(背景),第二个对象的类别是1(某种病虫害)。

配置说明

数据集目录结构
  • datasets/rice_pests/images: 存放所有的图片文件。
  • datasets/rice_pests/labels: 存放对应的标注文件(.txt 格式)。
训练好的权重文件 (best_rice_pest_yolov8.pt)

你需要有一个训练好的YOLOv8模型权重文件。这个文件可以从你的训练过程中获得,或者从其他来源获取。

数据集配置文件 (data.yaml)

创建一个 data.yaml 文件来配置数据集路径和类别信息。

运行步骤总结

  1. 克隆项目仓库(如果有的话):

    git clone https://github.com/yourusername/rice_pest_detection.git
    cd rice_pest_detection
    
  2. 安装依赖项

    pip install -r requirements.txt
    
  3. 运行Streamlit应用

    streamlit run main.py
    
  4. 操作界面

    • 选择图片进行检测。
    • 选择视频进行检测。
    • 使用摄像头进行实时检测。
    • 通过侧边栏动态调整模型置信度。
    • 通过侧边栏选择不同的模型权重。

结果展示

你可以通过以下方式查看演示视频:

  • 请求你提供的演示视频链接或文件。

总结

基于YOLOv8的水稻病虫害检测系统的项目介绍和代码实现。该项目支持图片、文件夹、视频等多种输入方式,并且可以实时检测水稻病虫害。希望这些详细的信息和代码能够帮助你顺利实施和优化你的水稻病虫害检测系统。


免环境压缩包

如果你担心环境配置问题,可以直接下载免环境压缩包。以下是免环境压缩包的使用说明:

  1. 解压压缩包

    • 将下载的压缩包解压到任意目录。
  2. 启动项目

    • 打开解压后的目录,找到 start.bat 文件。
    • 双击 start.bat 文件,自动启动项目。
    • 默认情况下,项目会在浏览器中打开,地址为 http://localhost:8501

注意事项

  • 操作系统兼容性:免环境压缩包仅限Windows系统,不支持其他操作系统。
  • 二次开发:系统基于PyTorch和Streamlit,支持二次开发。只需将新的模型权重文件放置在指定目录下即可更换模型。
  • 部署服务器:由于系统是天然的Web应用服务,默认在8501端口启动,可以轻松部署到服务器上。部署后,其他人可以通过提供的地址链接访问和使用系统。

希望这些详细的信息和代码能够帮助你成功实施和优化你的水稻病虫害检测系统!

标签:检测,image,st,conf,model,识别,病虫害,frame
From: https://blog.csdn.net/2401_88440984/article/details/144623913

相关文章

  • YOLO目标检测—XML标签文件与TXT标签文件相互转换
    XML标签文件转换为TXT标签文件importosimportxml.etree.ElementTreeasET#类别编号和名称的映射class_mapping={#替换为自己的类别编号和名称映射'person':'0','car':'1','bike':'2'}#更新后的源文件夹和目标文件夹路径sou......
  • DL00358-基于YOLOv8的停车空位检测代码含数据集
    YOLOv8(YouOnlyLookOnceVersion8)是基于深度学习的目标检测算法,近年来在图像处理领域取得了显著进展,尤其在实时目标检测任务中表现出色。停车空位检测作为计算机视觉应用中的一个重要研究方向,旨在通过智能化系统识别和判断停车场内的空闲车位,为车主提供实时的停车信息,提升停车......
  • 人车防碰撞识别智慧矿山一体机关于监控系统数据如何有效存储与分析?
    在数字化转型的大潮中,监控系统已成为各行各业不可或缺的一部分,尤其是在安全监控、风险管理,以及数据驱动决策等方面扮演着重要角色。随着技术的进步,监控系统不再仅仅是数据的收集者,更是智能分析和决策支持的提供者。本文将探讨如何通过现代技术手段,实现监控系统数据的有效存储和分......
  • 罐笼乘坐人员超限识别智慧矿山一体机智慧矿山监控系统的国际发展趋势有哪些?
    随着全球工业化进程的不断深入,矿山行业正面临着转型升级的巨大挑战。在这个背景下,智慧矿山监控系统应运而生,它不仅代表了矿业技术的最新发展方向,也是实现矿山安全、高效、绿色开采的关键。本文将探讨智慧矿山监控系统的国际发展趋势,以及矿山智能视频分析技术在实际应用中的重要性......
  • 鸿蒙(HarmonyOS)原生AI能力之文本识别
    鸿蒙(HarmonyOS)原生AI能力之文本识别原生智能介绍在之前开发中,很多场景我们是通过调用云端的智能能力进行开发。例如文本识别、人脸识别等。原生即指将一些能力直接集成在本地鸿蒙系统中,通过不同层次的AI能力开放,满足开发者的不同场景下的诉求,降低应用开发门槛,帮助开发者......
  • AI车牌监测识别摄像机
    AI车牌监测识别摄像机是一种基于人工智能技术的高级监控设备,用于识别和记录车辆的车牌信息。该摄像机利用深度学习算法和图像识别技术,能够快速准确地捕捉车辆牌照信息,有助于提高交通安全管理和追踪犯罪嫌疑车辆。AI车牌监测识别摄像机在实际应用中发挥着重要作用。首先,它可以自......
  • 升降梯人数识别摄像机
    升降梯人数识别摄像机是一种智能监测设备,主要用于实时识别和计算升降梯内乘客的数量。通过搭载先进的图像识别技术和人工智能算法,该设备可以准确监测乘客进出数量,提供重要数据支持和信息反馈,帮助管理人员有效管理升降梯运行,提升乘客安全和服务质量。这种升降梯人数识别摄像机的......
  • OmniParser:快速识别 UI 截图转换为结构化数据
    OmniParser是微软开发的一个用于解析用户界面(UI)截图的工具,旨在将这些截图转换为结构化数据。这个工具的主要目标是提升大型语言模型(如GPT-4V)与图形用户界面的互动能力。它能够识别截图中可交互的元素(如图标和按钮),并理解这些元素的语义,以便生成相应的操作指令。OmniParser由两个......
  • YOLOv8模型改进 第二十四讲 添加多尺度大核注意力(MLKA) 提高多尺度检测能力
         在单图像超分辨率任务中,之前的SR模型采用的注意力机制虽能获取信息特征,但存在不足。它们无法同时兼顾局部与长距离信息,且多考虑固定感受野。大核注意力(LKA)虽能构建长距离关系,但存在空洞卷积导致的块状伪影及固定大小不够灵活的问题。受视觉注意力研究启发,本文......
  • 游泳溺水识别数据集,对9984张原始图片进行YOLO,COCO JSON, VOC XML 格式的标注,平均识别
    游泳溺水识别数据集:对9984张原始图片进行YOLO,COCOJSON,VOCXML格式的标注,平均识别率在91.7%以上,可识别泳池或者水库中是否有人溺水。 数据集分割训练组98%        9818图片有效集%        0图片测试集2%        166图片......