【yolov3】如何使用摄像头进行目标检测——yolov3-pytorch摄像头检测教程

原项目地址:https://github.com/eriklindernoren/PyTorch-YOLOv3

主要思路:

将原本的detect.py的基础上进行修改即可,思路就是把原来从数据集中一张一张图片地读取改成一帧一帧地读取图片,然后将图片传入神经网络,效果其实跟普通的检测差不多,只不过是持续不断地输入图像给神经网络。
Tips:opencv很多视频处理操作的原理其实就是把视频分成一帧一帧地来处理,算是一个基本的思路吧。连续的图片转换成离散地图片来处理。因为视频也是很多很多张图片堆叠出来的。

代码差别

PILimg = np.array(Image.fromarray(cv.cvtColor(frame, cv.COLOR_BGR2RGB)))
imgTensor = transforms.ToTensor()(PILimg)
imgTensor, _ = pad_to_square(imgTensor, 0)
# resize图像变成416×416
imgTensor = resize(imgTensor, 416)
# 添加一个维度
imgTensor = imgTensor.unsqueeze(0)

全部代码

from __future__ import divisionfrom models import *
from utils.utils import *
from utils.datasets import *import os
import sys
import time
import datetime
import argparse
import cv2 as cvfrom PIL import Imageimport torch
from torch.utils.data import DataLoader
from torchvision import datasets
from torch.autograd import Variableimport matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.ticker import NullLocatorif __name__ == "__main__":parser = argparse.ArgumentParser()# parser.add_argument("--image_folder", type=str, default="data/test", help="path to dataset")parser.add_argument("--video_file", type=str, default="data/video/video.avi", help="path to dataset")parser.add_argument("--model_def", type=str, default="config/yolov3-custom.cfg", help="path to model definition file")parser.add_argument("--weights_path", type=str, default="weights/yolov3_ckpt.pth", help="path to weights file")parser.add_argument("--class_path", type=str, default="data/custom/classes.names", help="path to class label file")parser.add_argument("--conf_thres", type=float, default=0.8, help="object confidence threshold")parser.add_argument("--nms_thres", type=float, default=0.4, help="iou thresshold for non-maximum suppression")parser.add_argument("--batch_size", type=int, default=1, help="size of the batches")parser.add_argument("--n_cpu", type=int, default=0, help="number of cpu threads to use during batch generation")parser.add_argument("--img_size", type=int, default=416, help="size of each image dimension")parser.add_argument("--checkpoint_model", type=str, help="path to checkpoint model")parser.add_argument("--mode", type=str, default="camera", help="choose mode between video or camera")opt = parser.parse_args()print(opt)device = torch.device("cuda" if torch.cuda.is_available() else "cpu")# 创建输出文件夹os.makedirs("output", exist_ok=True)os.makedirs("output/video_image", exist_ok=True)# Set up model# 导入模型配置文件model = Darknet(opt.model_def, img_size=opt.img_size).to(device)# 判断是否使用.weights还是其他权重文件if opt.weights_path.endswith(".weights"):# Load darknet weightsmodel.load_darknet_weights(opt.weights_path)else:# Load checkpoint weightsmodel.load_state_dict(torch.load(opt.weights_path))model.cuda()# 切换评估模式model.eval()  # Set in evaluation mode# 获取类别classes = load_classes(opt.class_path)  # Extracts class labels from file# 转化为Tensor float类型Tensor = torch.cuda.FloatTensor if torch.cuda.is_available() else torch.FloatTensorif opt.mode == 'video':cap = cv.VideoCapture(opt.video_file)colors = np.random.randint(0,255,size=(len(classes),3),dtype="uint8")else:cap = cv.VideoCapture(0)colors = np.random.randint(0,255,size=(len(classes),3),dtype="uint8")# Bounding-box colors# 检测框的颜色# cmap = plt.get_cmap("tab20b")# colors = [cmap(i) for i in np.linspace(0, 1, 20)]img_detections = []# 开始检测print("\nPerforming object detection:")start = time.time()current_frame = 0while cap.isOpened():ret, frame = cap.read()# 将将numpy的矩阵转化成PIL 再将opencv中获取的BGR颜色空间转换成RGBPILimg = np.array(Image.fromarray(cv.cvtColor(frame, cv.COLOR_BGR2RGB)))imgTensor = transforms.ToTensor()(PILimg)imgTensor, _ = pad_to_square(imgTensor, 0)# resize图像变成416×416imgTensor = resize(imgTensor, 416)# 添加一个维度imgTensor = imgTensor.unsqueeze(0)imgTensor = Variable(imgTensor.type(Tensor))# 检测with torch.no_grad():detections = model(imgTensor)detections = non_max_suppression(detections, opt.conf_thres, opt.nms_thres)current_frame += 1img_detections.clear()if detections is not None:img_detections.extend(detections)length = len(img_detections)if length:for detections in img_detections:if detections is not None:detections = rescale_boxes(detections, opt.img_size, PILimg.shape[:2])unique_labels = detections[:, -1].cpu().unique()n_cls_preds = len(unique_labels)end = time.time()time_count = end - startfor x1, y1, x2, y2, conf, cls_conf, cls_pred in detections:print("\t+ Label: %s, Conf: %.5f, time: %d" % (classes[int(cls_pred)], cls_conf.item(),time_count))box_w = x2 - x1box_h = y2 - y1color = [int(clr) for clr in colors[int(cls_pred)]]frame = cv.rectangle(frame, (x1, y1 + box_h), (x2, x1), color, 2)cv.putText(frame, classes[int(cls_pred)], (x1, y1), cv.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)cv.putText(frame, str("%.2f" % float(conf)), (x2, y2 - box_h), cv.FONT_HERSHEY_SIMPLEX, 0.5,color, 2)cv.imshow('frame', frame)if cv.waitKey(1) & 0xFF == ord('q'):cap.release()breakcv.destroyAllWindows()

【yolov3】如何使用摄像头进行目标检测——yolov3-pytorch摄像头检测教程相关推荐

  1. 摄像头图像分析目标物体大小位置_摄像头的原理、组成、选型及应用

    目录 一.摄像头成像的光学原理 二.摄像头模组构成以及功能原理 三.摄像头名词释义 四.摄像头参数解析 五.摄像头选型 一.摄像头成像的光学原理 1.1 光学的基本定律 (1)光线直线传播定律:在统一 ...

  2. yolov3 指定gpu_GPU端到端目标检测YOLOV3全过程(中)

    GPU端到端目标检测YOLOV3全过程(中) 计算机视觉初级部分知识体系 总结了一下自己在 图像点(pixel值)运算 1. 直方图: 2. 线性/非线性变换: 3. 灰度均衡化/规定化: 4.H-S ...

  3. GPU端到端目标检测YOLOV3全过程(下)

    GPU端到端目标检测YOLOV3全过程(下) Ubuntu18.04系统下最新版GPU环境配置 · 安装显卡驱动 · 安装Cuda 10.0 · 安装cuDNN 1.安装显卡驱动 (1)这里采用的是P ...

  4. GPU端到端目标检测YOLOV3全过程(上)

    GPU端到端目标检测YOLOV3全过程(上) Basic Parameters: Video: mp4, webM, avi Picture: jpg, png, gif, bmp Text: doc ...

  5. 目标检测-基于Pytorch实现Yolov3(1)- 搭建模型

    原文地址:https://www.cnblogs.com/jacklu/p/9853599.html 本人前段时间在T厂做了目标检测的项目,对一些目标检测框架也有了一定理解.其中Yolov3速度非常快 ...

  6. yolov3目标检测android,目标检测 | YOLOv3训练自己的数据全流程

    1.构建YOLOv3网络的cfg文件 该文件表示的是你的检测网络的结构,类似caffe的prototxt文件. YOLOv3的cfg文件 上篇介绍YOLOv3网络中提到的去掉上采样操作的YOLOv3c ...

  7. 目标检测YOLOv3

    文章目录 1.目标检测基础概念 1.2 边界框(bounding box,bboxx) 1.2.1 锚框(Anchor box) 1.2.2 交并比(Intersection if Union, Io ...

  8. 深度学习-目标检测YOLOV3 YOLOv4原理详解

    2.YoloV3核心基础内容 2.1 网络结构可视化 Yolov3是目标检测Yolo系列非常非常经典的算法,不过很多同学拿到Yolov3或者Yolov4的cfg文件时,并不知道如何直观的可视化查看网络 ...

  9. 文献3 基于改进型YOLOv3的SAR图像舰船目标检测

    基于改进型YOLOv3的SAR图像舰船目标检测 0.概述 本文主要介绍了新提出的一种改进型YOLOv3的SAR图像船舰目标检测方法,此方法依据船舰尺寸与形状自适应采样的可变形卷积.ResNet50变体 ...

最新文章

  1. 深入研究 System.out.println()
  2. 洛谷 P2908 [USACO08OPEN]文字的力量Word Power
  3. Linux版本的安装文件jdk,tomcat
  4. bcb series清除前面的点_新iPhone前面板曝光:丑刘海还在,但边框窄了
  5. 1月至今 微信共对超十万个确认存在欺诈行为的帐号进行了阶梯式处理
  6. hive取mysql数据oracle数据,Hive安装过程(mysql/oracle存储元数据)详解
  7. extjs combobox column布局为什么折叠在一起
  8. CMarkup类简介
  9. WebService /php soap 相关调用 收藏
  10. UEditor之实现配置简单的图片上传示例
  11. 变量覆盖(超详细!)
  12. 上班族用哪个邮箱好用,如何正确使用邮件工作?...
  13. 回溯算法——我欲修仙(功法篇)
  14. [NSSCTF][SCTF 2021]WEB复现
  15. 易基因2022年度DNA甲基化研究高分项目文章精选
  16. [竞赛图判定定理]兰道定理(Landau's Theorem)介绍及其一种证明
  17. Shell 编程4(退出,测试,判断)
  18. 单片机 stm32 差分升级 增量升级算法源码
  19. 李炎恢老师HTML5+CSS3教程与课件代码 下载
  20. 华为企业核心交换机+接入交换机通过OSPF路由通信来管理

热门文章

  1. webrtc服务器压测工具使用
  2. 宏碁笔记本u盘装系统如何进入bios设置u盘启动图文教程
  3. 一个啥也不是的鬼畜视频创作示例
  4. ora-12505 监听程序当前无法识别sid
  5. 几年前之所预言,其人不死言之依然
  6. 在线查看.doc,.docx,.ofd,.PDF,.WPS以及Office文档的在线解析方式。
  7. Codeforces 1129C - Morse Code
  8. System.arraycopy()详解
  9. nginx:代理服务器(涉及upstream)的例子
  10. 31.进程管理之进程概览,及ps命令详解,ps -ef,ps aux,ps -le,ps -l输出详解和示例