资源技术动态yolov2 实战:从网络摄像头、视频文件和 youtube 中检测目标

yolov2 实战:从网络摄像头、视频文件和 youtube 中检测目标

2019-12-20 | |  185 |   0

原标题:如何使用最常见的特性选择技术来解决分类问题

来源:AI 研习社     链接:https://www.yanxishe.com/TextTranslation/2271


所需的库

Python 3.5或更高版本
Tensorflow:我使用过CPU版本
OpenCV的
VC ++版本14


下载使用keras实现的Yolo代码

我们将使用可从此处下载的DarkFlow:https://github.com/thtrieu/darkflow

下载预训练权重

权重可以在 https://pjreddie.com/darknet/yolov2/ 网站下载。

image.png

https://pjreddie.com/darknet/yolov2/  

 我创建了一个名为bin的新文件夹,并将下载的权重放在此处,如下所示

image.png 


构建代码

构建代码有三种选项。

选项1:

python setup.py build_ext --inplace

选项2:在开发者模式下使用pip 全局安装

pip install -e .

选项3:用pip安装全部

pip install -e .


对于我来说,选项2和3效果很好。

现在我们准备去处理图片集和视频文件。

使用 Yolo 处理视频文件


我们将使用 80 个类的 COCO 数据集上预先训练的权重来处理视频。


我们将使用

1.网络摄像机

2.视频文件

3.Youtube 视频流


网络摄像机

依赖的库


import numpy as np

import time

import cv2

from darkflow.net.build import TFNet

import matplotlib.pyplot as plt


使用定义选项创建darkflow模型


options = {

 'model': 'cfg/yolo.cfg',

 'load': 'bin/yolov2.weights',

 'threshold': 0.3  

}

tfnet = TFNet(options)


从网络摄像头进行目标检测

创建具有参数的 VideoCapture 实例,作为设备索引或视频文件的名称。将 0 作为摄像机的设备索引。

cap = cv2.VideoCapture(0)

创建 VideoCapture 实例后,可以逐帧捕获视频。不要忘记释放捕获的视频窗口并在末尾销毁所有窗口。

我们为没帧创建随机颜色列表

colors=[tuple(255 * np.random.rand(3)) for i in range(5)]

我们将首先检查视频捕获是否初始化或不使用 cap.isopened()。如果 cap.isopened() 不为 True,则使用 cap.open() 打开它。
我们设置一个无限循环,并使用 cap.read() 按帧读取视频帧。cap.read() 返回bool。如果正确读取帧,则cap.read(0 返回 True)。

我们使用每个帧的darkflow  tfnet 来预测目标。我们提取左上、右下和标签以绘制边界框,标签显示在边界框的顶部。

我们使用 cv2.imshow() 在窗口中显示帧。

我们还设置为当用户单击"q"时中断循环。

最后,我们通过释放摄像头并销毁所有窗口来清理视频捕获窗口。

while(cap.isOpened()):
    stime= time.time()
    ret, frame = cap.read()
    results = tfnet.return_predict(frame)
    if ret:
        for color, result in zip(colors, results):
            tl = (result['topleft']['x'], result['topleft']['y'])
            br = (result['bottomright']['x'], result['bottomright']['y'])
            label = result['label']
            frame= cv2.rectangle(frame, tl, br, color, 7)
            frame= cv2.putText(frame, label, tl, cv2.FONT_HERSHEY_TRIPLEX, 1, (0,0,0), 2)
        cv2.imshow('frame', frame)
        print('FPS {:1f}'.format(1/(time.time() -stime)))
        if cv2.waitKey(1)  & 0xFF == ord('q'):
            break
    else:
        break
          
cap.release()
cv2.destroyAllWindows()


在视频中实现目标检测


从视频文件中检测目标的代码大致相同,唯一的更改是,我们为 VideoCapture 提供了视频文件名。

要退出并释放捕获,请按 q

import cv2
from darkflow.net.build import TFNet
import matplotlib.pyplot as plt
import numpy as np
import timeoptions = {
 'model': 'cfg/yolo.cfg',
 'load': 'bin/yolov2.weights',
 'threshold': 0.3
    
}
tfnet = TFNet(options)cap = cv2.VideoCapture('video.mp4')
colors=[tuple(255 * np.random.rand(3)) for i in range(5)]while(cap.isOpened()):
    stime= time.time()
    ret, frame = cap.read()
    results = tfnet.return_predict(frame)
    if ret:
        for color, result in zip(colors, results):
            tl = (result['topleft']['x'], result['topleft']['y'])
            br = (result['bottomright']['x'], result['bottomright']['y'])
            label = result['label']
            frame= cv2.rectangle(frame, tl, br, color, 7)
            frame= cv2.putText(frame, label, tl, cv2.FONT_HERSHEY_TRIPLEX, 1, (0,0,0), 2)
        cv2.imshow('frame', frame)
        print('FPS {:1f}'.format(1/(time.time() -stime)))
        if cv2.waitKey(1)  & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()


YouTube视频的目标检测

读取youtub视频之前我们需要安装两个库。

  • Pafy :Python库,用于下载YouTube内容并检索元数据

  • youtube_dl : 允许从YouTube.com和其他视频网站下载视频

在Anaconda提示符下安装

pip install pafy
pip install --upgrade youtube_dl

在python中import 需要的库

import pafyimport cv2from darkflow.net.build import TFNetimport matplotlib.pyplot as pltimport numpy as npimport time

使用pafy下载youtube视频和元数据

url = ''
vPafy = pafy.new(url)
play = vPafy.getbest(preftype="webm")
print(play.url)

我们最终创建了一个VideoCapture()实例,并将youtube视频的元数据作为videocapture的参数传递。 其余代码保持不变。

options = {
 'model': 'cfg/yolo.cfg',
 'load': 'bin/yolov2.weights',
 'threshold': 0.3
    
}
tfnet = TFNet(options)
cap = cv2.VideoCapture(play.url)
colors=[tuple(255 * np.random.rand(3)) for i in range(5)]
while(cap.isOpened()):
    stime= time.time()
    ret, frame = cap.read()
    results = tfnet.return_predict(frame)
    if ret:
        for color, result in zip(colors, results):
            tl = (result['topleft']['x'], result['topleft']['y'])
            br = (result['bottomright']['x'], result['bottomright']['y'])
            label = result['label']
            frame= cv2.rectangle(frame, tl, br, color, 7)
            frame= cv2.putText(frame, label, tl, cv2.FONT_HERSHEY_TRIPLEX, 1, (0,0,0), 2)
        cv2.imshow('frame', frame)
        print('FPS {:1f}'.format(1/(time.time() -stime)))
        if cv2.waitKey(1)  & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()

发起:唐里 校对:唐里 审核:鸢尾

参与翻译(2人):天字一号、鹏鹏鹏鹏鹏飞

英文原文:Yolov2 for Object detection from a video

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:如何使用最常见的特性选择技术来解决分类问题

下一篇:计算机视觉自动化标注技术入门

用户评价
全部评价

热门资源

  • 应用笔画宽度变换...

    应用背景:是盲人辅助系统,城市环境中的机器导航...

  • GAN之根据文本描述...

    一些比较好玩的任务也就应运而生,比如图像修复、...

  • 端到端语音识别时...

    从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...

  • 人体姿态估计的过...

    人体姿态估计是计算机视觉中一个很基础的问题。从...

  • 谷歌发布TyDi QA语...

    为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...