b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

10分钟学会使用YOLO及Opencv实现目标评估(下)

电脑杂谈  发布时间:2020-02-14 09:01:58  来源:网络整理

opencv目标识别程序_opencv识别特定物体_利用opencv进行人脸检测识别

摘要:本文介绍使用opencv和yolo完成视频流目标评估,代码解释具体,附源码,上手快。

在上一节内容中,介绍了怎样将YOLO应用于图像目标评估中opencv目标识别程序,那么在学会检测单张图像后,我们也可以运用YOLO算法推动视频流中的目标检测。

首先打开yolo_video.py文件并插入以下代码:

# import the necessary packages
import numpy as np
import argparse
import imutils
import time
import cv2
import os
 
# construct the argument parse and parse the arguments
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--input", required=True,
    help="path to input video")
ap.add_argument("-o", "--output", required=True,
    help="path to output video")
ap.add_argument("-y", "--yolo", required=True,
    help="base path to YOLO directory")
ap.add_argument("-c", "--confidence", type=float, default=0.5,
    help="minimum probability to filter weak detections")
ap.add_argument("-t", "--threshold", type=float, default=0.3,
    help="threshold when applyong non-maxima suppression")
args = vars(ap.parse_args())

同样,首先从导出相关数据包跟命令行参数开始。与之前不同的是,此脚本没有--image参数,取而代之的是量个视频模式:

视频的输入可以是相机拍摄的短视频以及是网上搜索到的视频。另外,也可以借助将多张图片合成为一个短视频也可以。本博客使用的是在PyImageSearch上找到来自imutils的VideoStream类的示例。

下面的代码与处理图形时候同样:

# load the COCO class labels our YOLO model was trained on
labelsPath = os.path.sep.join([args["yolo"], "coco.names"])
LABELS = open(labelsPath).read().strip().split("\n")
 
# initialize a list of colors to represent each possible class label
np.random.seed(42)
COLORS = np.random.randint(0, 255, size=(len(LABELS), 3),
    dtype="uint8")
 
# derive the paths to the YOLO weights and model configuration
weightsPath = os.path.sep.join([args["yolo"], "yolov3.weights"])
configPath = os.path.sep.join([args["yolo"], "yolov3.cfg"])
 
# load our YOLO object detector trained on COCO dataset (80 classes)
# and determine only the *output* layer names that we need from YOLO
print("[INFO] loading YOLO from disk...")
net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)
ln = net.getLayerNames()
ln = [ln[i[0] - 1] for i in net.getUnconnectedOutLayers()]

在这里,加载标签并生成相应的形状,然后读取YOLO模型并确认输出层名称。

接下来,将处理一些特定于视频的任务:

# initialize the video stream, pointer to output video file, and
# frame dimensions
vs = cv2.VideoCapture(args["input"])
writer = None
(W, H) = (None, None)
 
# try to determine the total number of frames in the video file
try:
    prop = cv2.cv.CV_CAP_PROP_FRAME_COUNT if imutils.is_cv2() \
        else cv2.CAP_PROP_FRAME_COUNT
    total = int(vs.get(prop))
    print("[INFO] {} total frames in video".format(total))
 
# an error occurred while trying to determine the total
# number of frames in the video file
except:
    print("[INFO] could not determine # of frames in video")
    print("[INFO] no approx. completion time can be provided")
    total = -1

opencv识别特定物体_利用opencv进行人脸检测识别_opencv目标识别程序

在上述代码块中:

之后逐个处理帧:

# loop over frames from the video file stream
while True:
    # read the next frame from the file
    (grabbed, frame) = vs.read()
 
    # if the frame was not grabbed, then we have reached the end
    # of the stream
    if not grabbed:
        break
 
    # if the frame dimensions are empty, grab them
    if W is None or H is None:
        (H, W) = frame.shape[:2]

上述定义了一个while循环,然后从第一帧开始进行处理opencv目标识别程序,并且会检测它能否是视频的最终一帧。接下来,如果已经清楚帧的尺寸,就会获取一下对应的尺寸。

接下来,使用当前帧作为输入执行YOLO的前向释放:

ect Detection with OpenCVPython
    # construct a blob from the input frame and then perform a forward
    # pass of the YOLO object detector, giving us our bounding boxes
    # and associated probabilities
    blob = cv2.dnn.blobFromImage(frame, 1 / 255.0, (416, 416),
        swapRB=True, crop=False)
    net.setInput(blob)
    start = time.time()
    layerOutputs = net.forward(ln)
    end = time.time()
    # initialize our lists of detected bounding boxes, confidences,
    # and class IDs, respectively
    boxes = []
    confidences = []
    classIDs = []

在这里,构建一个blob并将其释放通过网络,从而取得预测。然后再次初始化之前在图像目标测量中使用过的三个列表:boxes、confidences、classIDs:

  # loop over each of the layer outputs
    for output in layerOutputs:
        # loop over each of the detections
        for detection in output:
            # extract the class ID and confidence (i.e., probability)
            # of the current object detection
            scores = detection[5:]
            classID = np.argmax(scores)
            confidence = scores[classID]
 
            # filter out weak predictions by ensuring the detected
            # probability is greater than the minimum probability
            if confidence > args["confidence"]:
                # scale the bounding box coordinates back relative to
                # the size of the image, keeping in mind that YOLO
                # actually returns the center (x, y)-coordinates of
                # the bounding box followed by the boxes' width and
                # height
                box = detection[0:4] * np.array([W, H, W, H])
                (centerX, centerY, width, height) = box.astype("int")
 
                # use the center (x, y)-coordinates to derive the top
                # and and left corner of the bounding box
                x = int(centerX - (width / 2))
                y = int(centerY - (height / 2))
 
                # update our list of bounding box coordinates,
                # confidences, and class IDs
                boxes.append([x, y, int(width), int(height)])
                confidences.append(float(confidence))
                classIDs.append(classID)


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-140719-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 赵波
      赵波

      这与买到有虫子的青菜一样

    • 刘志有
      刘志有

      西方列强普遍认为吨位和火炮数量占优的日本海军胜算较大

    • 高力
      高力

      #吴亦凡##吴亦凡1106生日快乐##吴亦凡BadGirl#我凡

    每日福利
    热点图片
    拼命载入中...