yolov5调用本地和usb摄像头5.0版本,7.0版本,

yolov5调用本地摄像头进行检测

目前改了5.0和7.0的版本

5.0

第一步,修改detect.py里的文件
在这里插入图片描述第二步,修改datasets.py里的文件,第280行的
在这里插入图片描述

7.0

直接(只需要)修改detect.py中的文件中的
parser.add_argument(‘–source’, type=str, default=‘0’, help=‘file/dir/URL/glob/screen/0(webcam)’)

# yolov5 调用摄像头直接将 default='0'  检测本地图片则其值为 ROOT / 'data/images' yolov5-7.0的master

yolov5调用usb摄像头

直接上代码(detect.py)

    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

  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的内容,要在yolov5调用外接USB摄像头,需要进行以下步骤: 1. 确保你的笔记本已经连接了USB摄像头,并且内置摄像头已被禁用。你可以在设备管理器中右键点击内置摄像头并选择禁用,确保USB摄像头被启用。 2. 在yolov5的代码中,找到detect.py文件。在该文件中,你需要修改一些参数。 3. 首先,将默认的摄像头设置从"default"改为"0",这将指示程序使用USB摄像头。这个修改可以在detect.py文件中找到。 4. 接下来,根据引用\[2\]中的内容,你可以使用指令"nvgstcapture-1.0 --camsrc=0 --cap-dev-node=0"来测试USB摄像头是否正常工作。这个指令将使用gstreamer应用程序通过nvidiaapi访问相机功能。 5. 最后,运行detect.py文件,即可调用USB摄像头进行目标检测。 需要注意的是,以上步骤是基于yolov5 v5.0版本的,如果你使用的是其他版本,可能会有一些差异。请根据你使用的具体版本进行相应的修改。 #### 引用[.reference_title] - *1* [yolov5傻瓜式调用usb摄像头](https://blog.csdn.net/qq_46493769/article/details/129995678)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [YOLOv5实时检测调用usb摄像头 [ jetson nano -Ubuntu18.4 - Astra pro相机 ]](https://blog.csdn.net/ZHUO__zhuo/article/details/130340130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [【YOLOv5调用本地摄像头](https://blog.csdn.net/Tshaxz/article/details/121735482)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值