广告
返回顶部
首页 > 资讯 > 后端开发 > Python >yolov5调用usb摄像头及本地摄像头的方法实例
  • 574
分享到

yolov5调用usb摄像头及本地摄像头的方法实例

2024-04-02 19:04:59 574人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录yolov5调用usb摄像头YOLOv5调用本地摄像头总结yolov5 调用 usb 摄像头 文章是在yolov5 v5.0版本的detect.py所修改编写 其他v1.0-v4

yolov5 调用 usb 摄像头

文章是在yolov5 v5.0版本的detect.py所修改编写

其他v1.0-v4.0没有试过,你们可以试试。

具体用法已经写在代码里面了。

import time
import cv2
import numpy as np
import torch
from models.experimental import attempt_load
from utils.datasets import letterbox
from utils.general import check_img_size, non_max_suppression,scale_coords, xyxy2xywh,set_logging,check_requirements
from utils.plots import colors, plot_one_box
from utils.torch_utils import select_device,time_synchronized
 
@torch.no_grad()
def detect(
        #--------------------这里更改配置--------------------
        #---------------------------------------------------
           weights='runs/train/exp25/weights/best.pt',   #训练好的模型路径   (必改)
           imgsz=512,           #训练模型设置的尺寸 (必改)
           cap = 0,             #摄像头
           conf_thres=0.25,     #置信度
           iou_thres=0.45,      #NMS IOU 阈值
           max_det=1000,        #最大侦测的目标数
           device='',           #设备
           crop=True,           #显示预测框
           classes=None,        #种类
           agnostic_nms=False,  #class-agnostic NMS
           augment=False,       #是否扩充推理
           half=False,          #使用FP16半精度推理
           hide_labels=False,   #是否隐藏标签
           hide_conf=False,     #是否隐藏置信度
           line_thickness=3     #预测框的线宽
           ):
        # #--------------------这里更改配置--------------------
        #-----------------------------------------------------
    #打开摄像头
    cap = cv2.VideoCapture(cap)
 
    #-----初始化-----
    set_logging()
    #设置设备
    device = select_device(device)
    #CUDA仅支持半精度
    half &= device.type != 'cpu'  
 
    #-----加载模型-----
    #加载FP32模型
    model = attempt_load(weights, map_location=device)  
    #模型步幅
    stride = int(model.stride.max())  
    #检查图像大小
    imgsz = check_img_size(imgsz, s=stride)  
    #获取类名
    names = model.module.names if hasattr(model, 'module') else model.names  
    #toFP16
    if half:
        model.half()  
 
    #------运行推理------
    if device.type != 'cpu':
        model(torch.zeros(1, 3, imgsz, imgsz).to(device).type_as(next(model.parameters())))  # 跑一次
    
    #-----进入循环:ESC退出-----
    while(True):
        #设置labels--记录标签/概率/位置
        labels = []
        #计时
        t0 = time.time()
        ref,img0=cap.read()
        #填充调整大小
        img = letterbox(img0, imgsz, stride=stride)[0] 
        # 转换
        img = img[:, :, ::-1].transpose(2, 0, 1)  #BGR to RGB, to 3x416x416
        img = np.ascontiguousarray(img)
 
        img = torch.from_numpy(img).to(device)
        #uint8 to fp16/32
        img = img.half() if half else img.float()  
        #0 - 255 to 0.0 - 1.0
        img /= 255.0  
        if img.ndimension() == 3:
            img = img.unsqueeze(0)
 
        # 推断
        t1 = time_synchronized()
        pred = model(img, augment=augment)[0]
 
        # 添加 NMS
        pred = non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_det=max_det)
        t2 = time_synchronized()
 
        #目标进程
        for i, det in enumerate(pred):  # 每幅图像的检测率
            s, im0 = '', img0.copy()
            #输出字符串
            s += '%gx%g ' % img.shape[2:]  
            #归一化增益
            gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]  
            if len(det):
                # 将框从img_大小重新缩放为im0大小
                det[:, :4] = scale_coords(img.shape[2:], det[:, :4], im0.shape).round()
                # 输出结果
                for c in det[:, -1].unique():
                    #每类检测数
                    n = (det[:, -1] == c).sum()
                    #添加到字符串  
                    s += f"{n} {names[int(c)]}{'s' * (n > 1)}, "  
                # 结果输出
                for *xyxy, conf, cls in reversed(det):
                    #归一化xywh
                    xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist()  
                    #标签格式
                    line = (cls, *xywh, conf)  
                    #整数类
                    c = int(cls)  
                    #建立标签
                    label = None if hide_labels else (names[c] if hide_conf else f'{names[c]} {conf:.2f}')
                    #绘画预测框
                    if crop:    
                        plot_one_box(xyxy, im0, label=label, color=colors(c, True), line_thickness=line_thickness)
                    #记录标签/概率/位置
                    labels.append([names[c],conf,xyxy])
 
        #--------------------这里写/修改代码--------------------
        #-------------------------------------------------
        '''
        labels里面有该图片的标签/概率/坐标(列表)
        labels = [ [列表0] , [列表1] , [列表3] ,......]
            其中 列表 = [标签,概率,坐标]
        例如获取第一个预测框的概率值:print( float( labels[0][1])  )
        '''
        # 显示图片
        cv2.imshow("666",im0)
        #输出计算时间
        print(f'消耗时间: ({time.time() - t0:.3f}s)')
 
 
        key = cv2.waiTKEy(20)  
 
        #这里设置ESC退出
        if key == 27:
            break
        #--------------------END--------------------
        #-------------------------------------------------
    cv2.destroyAllwindows()
 
if __name__ == "__main__":
    '''
    修改配置在 13-28 行
    写代码-显示输出/获取预测框位置/获取预测概率值 在121-END行
    '''
    #检测安装包--建议注释掉
    #check_requirements(exclude=('tensorboard', 'thop'))
    #运行
    detect()

经研究发现,yolov5-master有time_synchronized 和 time_sync 两种名字,所以如果time_synchronized报错,麻烦换成time_sync

YOLOv5调用本地摄像头

YOLOv5源码https://GitHub.com/ultralytics/yolov5

最近用YOLOv5做目标检测,直接调用本地摄像头会报错,需要在dataset中做一点修改。

具体如下:

在279行的这两处改成str类型

然后在detect里把这里的参数改为0

然后运行detect.py即可调用本地摄像头。

总结

到此这篇关于yolov5调用usb摄像头及本地摄像头的文章就介绍到这了,更多相关yolov5调用摄像头内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: yolov5调用usb摄像头及本地摄像头的方法实例

本文链接: https://www.lsjlt.com/news/142820.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • yolov5调用usb摄像头及本地摄像头的方法实例
    目录yolov5调用usb摄像头YOLOv5调用本地摄像头总结yolov5 调用 usb 摄像头 文章是在yolov5 v5.0版本的detect.py所修改编写 其他v1.0-v4...
    99+
    2022-11-13
  • C#调用USB摄像头的方法
    C#调用USB摄像头使用AForge类库进行开发,供大家参考,具体内容如下 1、AForge安装 右击工程,在管理NuGet程序包中搜索Aforge类库,选择安装,如下图所示 2...
    99+
    2022-11-13
  • 云服务器调用本地摄像头
    如果您需要在云服务器上使用本地摄像头,可以使用以下步骤:连接摄像头:将摄像头连接至您的云服务器或您的本地局域网(LAN)网络上的其他摄像头设备。打开摄像头:在使用本地摄像头前,请确保您已打开了网络摄像头。在本地摄像头中,您可能需要设置监控选...
    99+
    2023-10-25
    摄像头 服务器
  • win8连接摄像头 win8 摄像头不能用的解决方法
    Win8系统下使用相机应用,提示:此应用需要相应权限才能使用你的摄像头,无法拍摄画面。原因分析:在相机应用里,设置了摄像头的权限为关闭。解决方案: 一、在相机应用中调出超级按钮,选择“设置&rd...
    99+
    2022-06-04
    摄像头 不能用 解决方法
  • Android调用手机摄像头的方法
    本文实例为大家分享了Android调用手机摄像头的具体代码,供大家参考,具体内容如下 根据<第一行代码>进行改写: 布局文件,只有一个按钮,和一个Imageview,im...
    99+
    2022-11-13
  • Android调用外置摄像头的方法
    本文实例为大家分享了Android调用外置摄像头的具体代码,供大家参考,具体内容如下 1、布局文件 <xml version="1.0" encoding="utf-8">...
    99+
    2022-11-13
  • 云服务器调用本地摄像头怎么调
    如果您要调用云服务器上的摄像头,需要先在本地安装相应的摄像头驱动程序,下载并解压缩到指定路径,例如c:DocumentsandSettingsAdobeAdobe Camera StudioQuickTime/v2lib。 然后在命令行中...
    99+
    2023-10-26
    摄像头 服务器
  • 云服务器调用本地摄像头失败
    云服务器调用本地摄像头失败通常有以下几种可能的原因: 摄像头配置错误:云服务器需要在远程主机上为其添加摄像头配置信息,如果这个配置不正确,就会出现这种情况。例如,如果您的摄像头需要远程访问,您需要配置一个本地登录路径,以避免将摄像头添加...
    99+
    2023-10-26
    摄像头 服务器
  • Python调用摄像头的方法是什么
    Python调用摄像头的方法可以使用OpenCV库中的VideoCapture类。以下是一个简单的示例代码:```pythonimp...
    99+
    2023-08-18
    Python
  • 云服务器无法调用本地摄像头的原因及解决方法
    1. 云服务器无法直接访问本地硬件设备 云服务器是基于虚拟化技术构建的,它们通常无法直接访问本地硬件设备,如摄像头、麦克风等。这是因为云服务器是在云服务提供商的数据中心中运行的,而不是在你的本地计算机上。 2. 使用远程桌面协议(RDP)...
    99+
    2023-10-27
    解决方法 摄像头 原因
  • WPF实现调用本机摄像头的示例代码
    此项目使用了OpenCVSharp加载本地摄像头,多个摄像头支持切换展示,也可以展示rtsp地址。 使用NuGet如下: 代码如下 一、创建MainWindow.xaml代码如下。...
    99+
    2022-11-13
    WPF 调用本机摄像头 WPF 调用摄像头 WPF 摄像头
  • 云服务器调用本地摄像头的密码设置方法
    1. 了解云服务器和本地摄像头的连接方式 在开始设置密码之前,首先需要了解云服务器和本地摄像头之间的连接方式。通常情况下,云服务器通过网络连接到本地摄像头,以实现对摄像头的远程访问和控制。 2. 设置本地摄像头的密码 为了保护本地摄像头的...
    99+
    2023-10-27
    摄像头 密码 服务器
  • 利用python调用摄像头的实例分析
    这篇文章主要介绍了python调用摄像头的示例代码,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 一、打开摄像头 import cv2 import numpy as np def video...
    99+
    2022-06-02
    python 调用摄像头
  • 云服务器调用本地摄像头怎么调整
    如果您的云服务器上提供了视频共享服务,则可以通过在云服务器上调用本地摄像头来调整视频流。以下是一些方法: 将视频从摄像头中分离出来,并保存到本地文件夹中。 在云服务器上的视频共享界面上,找到要应用于本地的视频,并将其传输到本地电脑。 在...
    99+
    2023-10-26
    摄像头 服务器
  • 阿里云服务器本地摄像头的使用方法
    随着互联网技术的发展,越来越多的企业和个人开始使用云计算服务,其中阿里云服务器的使用量更是日益增长。然而,对于一些需要使用本地摄像头的企业和个人来说,阿里云服务器如何使用本地摄像头是一个需要解决的问题。本文将详细介绍如何使用阿里云服务器本地...
    99+
    2023-10-28
    阿里 使用方法 摄像头
  • 云服务器调用本地摄像头怎么调出来
    如果您的云服务器上安装了相应的摄像头驱动程序,可以通过以下步骤调用本地摄像头: 查看本地摄像头设备:您应该在您的计算机上打开摄像头并找到您想使用的摄像头设备。如果您没有显示图像,则可能需要安装相应的驱动程序。 使用Windows API...
    99+
    2023-10-26
    摄像头 服务器
  • 云服务器调用本地摄像头怎么调回来
    如果云服务器调用本地摄像头的操作是由于本地摄像头已关闭或损坏而被禁用,您可以尝试以下操作: 手动启用本地摄像头: 如果您的云服务器可以自动检测和启用本地摄像头,则可能需要手动启用。在这种情况下,您需要在云平台或本地摄像头应用程序中注册该...
    99+
    2023-10-26
    摄像头 服务器
  • 云服务器调用本地摄像头怎么设置
    如果您的云服务器上没有提供可用的本地摄像头设置选项,您可以尝试以下方法: 使用网络摄像头:使用您自己的网络摄像头软件来访问云服务器上的本地摄像头设置。 使用摄像头管理器:将您的网络摄像头连接到您自己的网络摄像头设备,然后在管理器中设置本...
    99+
    2023-10-26
    摄像头 服务器
  • 云服务器调用本地摄像头怎么调回来的
    如果您要调用云服务器上的摄像头,通常需要先从本地摄像头中找到要回调到云服务器的图像,然后回调到云服务器进行保存。具体步骤如下: 打开终端并登录云服务器。 在摄像头界面中,单击“摄像头控制”选项。 在弹出的图像设置窗口中,点击“保存”按钮...
    99+
    2023-10-26
    摄像头 服务器
  • 云服务器调用本地摄像头怎么调出来的
    如果您的云服务器上没有安装任何监控摄像头软件,您可以尝试以下几种方法调出相机: 重启摄像头:重新启动云服务以清除所有软件设置和网络设置,然后重启您的摄像头。 检查网络连接:检查您的网络连接是否正常,并尝试重新加入云服务器。 检查应用程序...
    99+
    2023-10-26
    摄像头 服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作