如何使用Darknet检测视频中的对象?

时间:2018-09-29 02:49:47

标签: python python-3.x yolo

我正在使用Darknet来检测图像中的对象,这非常有帮助。此外,我还想从计算机中的视频中检测物体。

我安装了Open CV,并且我的计算机没有GPU。我认为我应该更改darknet.py文件中的某些内容。但是我应该添加什么代码呢?你能给我一个清晰的指示吗?预先感谢。

1 个答案:

答案 0 :(得分:0)

如果仔细查看darknet.py文件,您将找到有关如何从给定图像中提取对象的示例。你试过了吗?如果您不喜欢的话,建议您先尝试一下,然后再观看视频。

然后,您将需要进入视频。 Here is a linkOpenCV文档中,它们解释了如何读取视频文件和流。从此代码中,您将能够提取视频的帧。

然后,您可以使用darkent.py中的代码并将帧输入其中。

如果没有,则较暗的包装纸可能有用。
Here is a link到一个。您可以阅读一份文档并将其安装在计算机中。这是非常容易使用。它已经有一个如何在图像上使用它的示例。您可以修改它并使用视频。

import numpy as np
import cv2
import pyyolo

cap = cv2.VideoCapture('vtest.avi')
meta_filepath = "/home/rameshpr/Downloads/darknet_google_server/data/obj.data"
cfg_filepath = "/home/rameshpr/Downloads/darknet_google_server/cfg/yolo-lb.cfg"
weights_filepath = "/home/rameshpr/Downloads/darknet_google_server/backup/yolo-v3.weights"


meta = pyyolo.load_meta(meta_filepath)
net = pyyolo.load_net(cfg_filepath, weights_filepath, False)

while(cap.isOpened()):
    ret, frame = cap.read()
    if not ret:
        break

    yolo_img = pyyolo.array_to_image(frame)
    res = pyyolo.detect(net, meta, yolo_img)

    for r in res:
        cv2.rectangle(frame, r.bbox.get_point(pyyolo.BBox.Location.TOP_LEFT, is_int=True),
                      r.bbox.get_point(pyyolo.BBox.Location.BOTTOM_RIGHT, is_int=True), (0, 255, 0), 2)


    cv2.imshow('frame', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

在完成安装pyyolo之后,尝试上面的代码。