yolov5连接摄像头,yolov4调用摄像头
YOLOV5模型从发布到现在都是炙手可热的目标检测模型,被广泛运用于各大场景之中,下面这篇文章主要给大家介绍了关于yolov5调用通用串行总线摄像头及本地摄像头的相关资料,需要的朋友可以参考下
目录
约洛夫5调用通用串行总线摄像头YOLOv5调用本地摄像头总结
yolov5 调用 usb 摄像头
文章是在yolov5 v5.0版本的detect.py所修改编写
其他1.0版-4.0版没有试过,你们可以试试。
具体用法已经写在代码里面了。
导入时间
导入cv2
将数组作为铭牌导入
进口火炬
来自模型.实验性导入尝试加载
从实用工具.数据集导入信箱
从utils .通用导入check_img_size,non_max_suppression,scale_coords,xyxy2xywh,set_logging,check_requirements
从实用程序.绘图导入颜色,plot_one_box
从utils.torch_utils导入选择设备,时间同步
@torch.no_grad()
定义检测(
# - 这里更改配置-
# -
weights= runs/train/exp 25/weights/best。点,#训练好的模型路径(必改)
imgsz=512,#训练模型设置的尺寸(必改)
cap=0,#摄像头
conf_thres=0.25,#置信度
iou_thres=0.45,#NMS IOU阈值
max_det=1000,#最大侦测的目标数
设备= ,#设备
crop=True,#显示预测框
类别=无,按井号键种类
不可知的_nms=False,#不区分类别的新帕萨特
augment=False,#是否扩充推理
half=False,#使用FP16半精度推理
hide_labels=False,#是否隐藏标签
hide_conf=False,#是否隐藏置信度
线条粗细=3 #预测框的线宽
):
# # - 这里更改配置-
# -
#打开摄像头
cap=cv2 .视频捕获(上限)
# - 初始化-
set_logging()
#设置设备
设备=选择设备(设备)
#CUDA仅支持半精度
half=device.type!=cpu
# - 加载模型-
#加载FP32模型
模型=尝试_负载(权重,地图_位置=设备)
#模型步幅
stride=int(model.stride.max())
#检查图像大小
imgsz=check_img_size(imgsz,s=stride)
#获取类名
名称=型号。模块。如果有attr(model, module) else model.names则命名
#toFP16
如果一半:
方式
l.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调用摄像头内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。