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 NMSaugment=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 #toFP16if 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 3x416x416img = np.ascontiguousarray(img)img = torch.from_numpy(img).to(device)#uint8 to fp16/32img = img.half() if half else img.float() #0 - 255 to 0.0 - 1.0img /= 255.0 if img.ndimension() == 3:img = img.unsqueeze(0)# 推断t1 = time_synchronized()pred = model(img, augment=augment)[0]# 添加 NMSpred = 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):#归一化xywhxywh = (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 调用 usb 摄像头相关推荐
- 五十、opencv调用USB摄像头并保存图片
@Author: Runsen opencv OpenCV是计算机视觉的一个模块. OpenCV可以通过图像处理减少图像噪声,调整图像亮度.颜色或者对比度等等.想要进一步系统了解OpenCV图像处理基 ...
- AndroidUSBCamera调用USB摄像头问题
UVC_ERROR_INVALID_DEVICE not open camera:err=-50 由于客户需求,笔者最近在测试大型android平板设备,但是所使用的厂商提供的设备并未继承前后置摄像头 ...
- C#调用usb摄像头的实现方法
1.下载aforge类库,下载地址:,我下载的版本是:aforge.net framework-2.2.5.exe: 2.下载安装好后,将下载类库中的release文件夹复制到c#项目的可执行文件文件 ...
- ubuntu上python使用opencv调用usb摄像头无故掉线以后重连摄像头。
项目中使用opencv调用usb摄像头,运行过程中,会出现摄像头掉线的情况.猜测掉线原因是硬件相关,可能是摄像头,也可能是usb线和端口. 这里主要介绍两种掉线情况以及代码重连摄像头的方式. 1.第一 ...
- C++中调用usb摄像头并保存图片【学习记录第1篇】
[学习记录第1篇]C++中通过OPENCV调用usb摄像头并保存图片 准备 外置USB摄像头代码 外置USB摄像头运行结果 外置USB超声波探头代码 外置USB超声波探头运行结果 第一篇博客的感想 准 ...
- C# 调用USB摄像头
目录 C#调用USB摄像头使用AForge类库进行开发 1.AForge安装 2.下载完毕后进行USB摄像头类封装 C#调用USB摄像头使用AForge类库进行开发 1.AForge安装 右击工程,在 ...
- 讯为iTOP4412开发板ARM-linux 使用OPENCV调用USB摄像头
讯为iTOP4412开发板ARM-linux 使用OPENCV调用USB摄像头 首先要在内核里面确定有添加USB摄像头的驱动,这个在讯为官方文档里面有所以就不展开讲了. 主要问题是如何让opencv能 ...
- Jetson NX YOLOV目标检测学习笔记1----CV调用USB摄像头
1.相关的包安装(安装步骤自行百度) python 版本3.6.9 pip3 install opencv-python=='xxxx' 其中xxx为对应版本号(注意:opencv我用到的版本是ope ...
- YOLOv5调用IP摄像头
本文将展示IP摄像头的调用方法(以调用手机摄像头为例). 实现 首先在手机端下载可以联网调用手机摄像头的APP 我用的是这个 勾选RTSP,点击分享 记下局域网地址,后面代码中需要对应修改 更改det ...
最新文章
- Moving Towards Third‐Generation Sequencing Technologies 迈向第三代测序技术
- Python Numpy多维数组.sum(axis=0/1/2...) 详解
- 信息处理进入了计算机领域,信 息 处 理 进 入 了 计 算 机 领 域 ,实 质 是 进 入 了()的 领 域 。...
- python 中使用 global 引发了莫名其妙的问题
- 5大食物千万别挑太艳的
- Qt Creator预览版
- 单页应用程序的Spring Boot静态Web资源处理
- Tomcat 配置 login 和 gas
- Google 正式开源 Jib ,帮助 Java 应用快速容器化
- 北航教授吐槽研究生基本废了:985高校成高级蓝翔
- 【C++】C++标准中定义的名字和标识符
- ES6 中 class 和 extends 的es5实现
- 深度学习中的梯度下降算法
- Linux 根据服务名字找安装路径
- Triplet Loss
- android 歌词的显示不出来,网易云音乐歌词不显示怎么办 网易云显示不出歌词的解决方法...
- 三菱PLC自带FIFO操作指令编程应用
- 在linux系统上搭建测试环境
- 超千万人同时在线,抖音快手,是怎么抗住高并发?
- 超级!超级!超级好用的视频标注工具