yolov5实现目标检测系统(使用线程池)

这篇具有很好参考价值的文章主要介绍了yolov5实现目标检测系统(使用线程池)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、简介

该系统包含以下几个部分:

  1. 从摄像头中读取数据
  2. 主线程将数据输出到窗口
  3. 后台线程完成计算机视觉的目标检测过程,并且将结果共享给主线程
  4. 主线程将结果画在输出图像上

下载yolvo5:

YOLOv5的源码放在 Github 地址:https://github.com/ultralytics/yolov5

我使用到的是 yolov5s.pt,yolvo5学习参考目标检测 YOLOv5使用入门

安装Yolov5所需模块

在命令行里,
输入“pip install -r requirements.txt”,等待安装完成即可。(pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 命令会更快!!)

二、步骤

1.引入库

import cv2 as cv
import torch
from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
from threading import Thread

2.打开摄像头

cap = cv.VideoCapture(0)

3.窗口输出

def show_frame(self):
        print("thread1 open!")
        while True:
            self.ret, self.frame = cap.read()
            if self.state:
                cv.imshow("res", self.a)
                if cv.waitKey(10) & 0xFF == ord('q'):# 按q退出
                    break
        self.ret = False
        self.thread_state = False
        cap.release()
        cv.destroyAllWindows()
        print("t1 finished")

4.计算机视觉的目标检测推理过程

def process_frame(self):
        print("thread2 open!")
        model = torch.hub.load(self.path, "custom",
                               self.pt_path, source="local")
        while True:
            if self.ret:
                res = model(self.frame)
                res.render()  # 打标签
                self.a = res.ims[0]
                self.state = True
            elif self.thread_state is False:
                break
        print("t2 finished")

5.用线程池管理

线程池帮助你来管理线程,不再需要每个任务都创建一个线程进行处理任务。任务需要执行时,会从线程池申请线程,有则使用线程池的线程执行任务,如果没有就等着,其他在执行的任务执行完毕后释放线程,等待的任务就可以使用释放的线程来执行操作了。线程池使用可以参考 python线程池的使用方法

concurrent.futures模块提供了高度封装的异步调用接口
ThreadPoolExecutor:线程池,提供异步调用

submit(fn, *args, **kwargs)异步提交任务

#使用类来实现多线程通信
t1 = Mythread()
#创建一个包含2条线程的线程池
pool = ThreadPoolExecutor(max_workers=2)  # 定义两个线程
#向线程池提交2个任务
thread1 = pool.submit(t1.show_frame)
thread2 = pool.submit(t1.process_frame)

这样我们就实现从摄像头中读取数据;主线程将数据输出到窗口,后台线程完成计算机视觉的目标检测过程,并且将结果共享给主线程,主线程将结果画在输出图像上。


三、完整代码

from concurrent.futures import ThreadPoolExecutor
from pathlib import Path
from threading import Thread

import cv2 as cv
import torch

cap = cv.VideoCapture(0)


class Mythread(Thread):
    def __init__(self):
        Thread.__init__(self)
        cap = cv.VideoCapture(0)
        self.ret = {}
        self.frame = {}
        self.a = {}
        self.state = False
        self.thread_state = True
        self.project = Path(__file__).resolve().parent.parent
        self.path = self.project.joinpath("yolov5-master")
        self.pt_path = self.path.joinpath("yolov5s.pt")

    def process_frame(self):
        print("thread2 open!")
        model = torch.hub.load(self.path, "custom",
                               self.pt_path, source="local")
        while True:
            if self.ret:
                res = model(self.frame)
                res.render()  # 打标签
                self.a = res.ims[0]
                self.state = True
            elif self.thread_state is False:
                break
        print("t2 finished")

    def show_frame(self):
        print("thread1 open!")
        while True:
            self.ret, self.frame = cap.read()
            if self.state:
                cv.imshow("res", self.a)
                if cv.waitKey(10) & 0xFF == ord('q'):
                    break
        self.ret = False
        self.thread_state = False
        cap.release()
        cv.destroyAllWindows()
        print("t1 finished")


if __name__ == '__main__':
    t1 = Mythread()
    pool = ThreadPoolExecutor(max_workers=2)  # 定义两个线程
    thread1 = pool.submit(t1.show_frame)
    thread2 = pool.submit(t1.process_frame)

以上内容是我的个人总结,如有疑问,欢迎私聊,谢谢!!文章来源地址https://www.toymoban.com/news/detail-589344.html

到了这里,关于yolov5实现目标检测系统(使用线程池)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于深度学习的高精度野生目标检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度野生目标检测识别系统可用于日常生活中检测与定位野生目标目标,利用深度学习算法可实现图片、视频、摄像头等方式的野生目标目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数据集,使

    2024年02月07日
    浏览(58)
  • 基于深度学习的高精度鸟类目标检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度鸟类目标(鹦鹉(Crested Myna)、麻雀(Eurasian Tree Sparrow)、黑头文鸟(Chestnut Munia)、白领翡翠(Collared Kingfisher)、太阳鸟(Garden Sunbird))检测识别系统可用于日常生活中或野外来检测与定位鸟类目标目标,利用深度学习算法可实现图片、视频

    2024年02月12日
    浏览(59)
  • 基于深度学习的高精度80类动物目标检测系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度80类动物目标检测识别系统可用于日常生活中或野外来检测与定位80类动物目标,利用深度学习算法可实现图片、视频、摄像头等方式的80类动物目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练

    2024年02月16日
    浏览(49)
  • 基于深度学习的高精度线路板瑕疵目标检测系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度线路板瑕疵目标检测系统可用于日常生活中来检测与定位线路板瑕疵目标,利用深度学习算法可实现图片、视频、摄像头等方式的线路板瑕疵目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型训练数

    2024年02月16日
    浏览(56)
  • 基于YOLOv5系列【n/s/m/l】模型开发构建人体手势目标检测识别分析系统

    人体手势检测识别是指通过计算机视觉和深度学习技术,自动地识别和理解人体的手势动作。这项技术可以应用于各种领域,如人机交互、虚拟现实、智能监控等。 下面是一般的人体手势检测识别流程: 数据采集:首先需要收集包含手势动作的训练数据。这些数据可以通过

    2024年02月11日
    浏览(56)
  • 基于深度学习的高精度农作物机器与行人目标检测系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度农作物机器与行人目标检测系统可用于日常生活中或野外来检测与定位农作物机器与行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的农作物机器与行人目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采

    2024年02月16日
    浏览(61)
  • 基于深度学习的水果检测与识别系统(Python界面版,YOLOv5实现)

    摘要:本博文介绍了一种基于深度学习的水果检测与识别系统,使用YOLOv5算法对常见水果进行检测和识别,实现对图片、视频和实时视频中的水果进行准确识别。博文详细阐述了算法原理,同时提供Python实现代码、训练数据集,以及基于PyQt的UI界面。通过YOLOv5实现对图像中存

    2024年02月02日
    浏览(49)
  • YOLOv5 + Flask + Vue实现基于深度学习算法的垃圾检测系统源码+数据库

    YOLOv5🚀 :高效、准确的目标检测算法,实时识别检测图像和视频中的各种对象 PyTorch :机器学习框架,以动态计算图为基础,具有灵活性和易用性 OpenCV :计算机视觉库,提供了丰富的图像和视频处理功能 Vue3 :采用 Vue3 + script setup 最新的 Vue3 组合式 API Element Plus :Element

    2024年02月22日
    浏览(44)
  • 一文详解Yolov5——基于Yolov5的火灾检测系统

    ✨ 原创不易,还希望各位大佬支持一下 textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下 👍 点赞,你的认可是我创作的动力! textcolor{green}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力! ⭐️ 收藏,你的青睐是

    2024年02月03日
    浏览(40)
  • 人员拥挤检测系统 yolov5

    人员拥挤检测系统通过YOLOv5网络模型算法技术,人员拥挤检测系统算法模型对校园/厂区车间/街道等场景的异常的人群聚集(出现拥挤情况)时,立刻抓拍存档并通知相关人员及时处理。在介绍Yolo算法之前,首先先介绍一下滑动窗口技术,这对我们理解Yolo算法是有帮助的。采

    2024年02月03日
    浏览(22)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包