首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中进行实时摄像机对象检测

如何在python中进行实时摄像机对象检测
EN

Stack Overflow用户
提问于 2020-07-07 09:43:33
回答 1查看 281关注 0票数 0

我有代码:

代码语言:javascript
复制
import cv2
import matplotlib.pyplot as plt
import cvlib as cv
from cvlib.object_detection import draw_bbox
im = cv2.imread(r'C:\Users\james\OneDrive\Desktop\logos\normal.png')
bbox, label, conf = cv.detect_common_objects(im)
output_image = draw_bbox(im, bbox, label, conf)
plt.imshow(output_image)
plt.show()

这可以检测到图片中的大多数物体,但我希望能够从实时视频中进行检测,我尝试使用cap = cv2.VideoCapture(0),但我无法使其工作。

EN

回答 1

Stack Overflow用户

发布于 2020-07-08 10:45:16

典型的程序会执行每一行,直到执行完毕,然后退出。您的代码要求它打开一个流并显示一个帧。然后,因为它已经完成了您要求它做的所有事情,所以它退出。

在注释中提供的代码中,您将在.show()之后立即使用matplotlib的.clf(),这将清除该图形,并可能导致您的问题。您应该改用cv2.imshow()

如果希望它保持打开状态,则需要将显示代码放入getting started part of the docs中所示的while True循环中。把他们的代码和你的代码结合起来,你会得到类似这样的结果(不过我还没有测试过它):

代码语言:javascript
复制
import numpy as np
import cv2
import cvlib as cv
from cvlib.object_detection import draw_bbox

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Detect objects and draw on screen
    bbox, label, conf = cv.detect_common_objects(frame)
    output_image = draw_bbox(im, bbox, label, conf)

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

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

对于网络摄像头,这将继续进行,直到您按Q键中断程序。

请注意,这可能不会顺利运行,因为对象检测模型通常在计算上相当昂贵。但这是另一个问题的挑战。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62766905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档