如何使用 caffe convnet 进行视频帧中的对象检测?

How to use caffe convnet for object detection in video frames?

我使用了 this link 的代码并成功完成了检测,但问题是它仅来自网络摄像头。我试图修改代码,以便它可以从文件中读取。我修改的部分是:我写了这个

print("[INFO] starting video stream...")
vs= cv2.VideoCapture('cars.avi')
time.sleep(2.0)
fps = FPS().start()
# loop over the frames from the video stream
while True:
# grab the frame from the threaded video stream and resize it
# to have a maximum width of 400 pixels
frame = vs.read()

而不是这个(上面的代码link)

print("[INFO] starting video stream...")
vs = VideoStream(src=0).start()
time.sleep(2.0)
fps = FPS().start()
# loop over the frames from the video stream
while True:
# grab the frame from the threaded video stream and resize it
# to have a maximum width of 400 pixels
frame = vs.read()

对于 运行 来自终端的程序,我在这两种情况下都使用此命令:

python real_time_object_detection.py  --prototxt 
MobileNetSSD_deploy.prototxt.txt  --model MobileNetSSD_deploy.caffemodel

我在读取文件时遇到的错误是

我得到的错误是:

C:\Users\DEBASMITA\AppData\Local\Programs\Python\Python35\real-time-object-
detection>python videoobjectdetection.py  --prototxt 
MobileNetSSD_deploy.prototxt.txt  --model MobileNetSSD_deploy.caffemodel
[INFO] loading model...
Traceback (most recent call last):
  File "videoobjectdetection.py", line 54, in <module>
    frame = imutils.resize(frame, width=400)
  File "C:\Users\DEBASMITA\AppData\Local\Programs\Python\Python35\lib\site-
packages\imutils\convenience.py", line 69, in resize
    (h, w) = image.shape[:2]
AttributeError: 'tuple' object has no attribute 'shape' 

我不知道我哪里做错了。请指导我。

我不熟悉您引用的任何代码,但错误很简单,类似的错误已在 other questions 中得到解答:您正在尝试对普通元组对象执行一个奇特的方法。下面是这个 python 概念的示例,它使用通用包 numpy 用于数组:

#an example of the error you are getting with a plain tuple
>>>tup = (1,2,3,4)
>>>len(tup)
4
>>> tup.shape
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'shape'

#an example that uses an attribute called 'shape'
>>> import numpy as np
>>> x = np.array([1,2,3,4])
>>> x.shape
(4,)
>>> x.shape.shape
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'shape'

正如你在我最后两行中看到的那样,我第一次在 numpy 数组上调用 .shape 时,调用是有效的。这次调用return是一个元组,所以最后一次调用.shape.shape是无效的,它是在(4,)上操作的。至于怎么修?我不知道。例如,在 this question 中,原始发布者认为他们正在取回某种图像对象,而不是他们正在取回一个元组(可能是一个图像对象的元组)。您正在发生类似的事情:您的 VideoStream.read() 调用是 returning 一个元组。因此,当您调用 imutils.resize(frame, width=400) 时,您传递的是一个元组,而不是图像或框架。因此,当该方法尝试调用 .shape 时,您会收到错误消息。 VideoStream.read() 可能 return 一个设计的元组,或者一个错误条件。您必须仔细阅读 VideoStream 才能确定。