我通过加载预训练的 MobileNet SSD 模型使用 opencv 进行了对象检测。从这篇文章。它读取视频并毫无问题地检测对象。但我想用readNet
(or readFromDarknet
) 代替readNetFromCaffe
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])
因为我只在 Darknet 框架中预先训练了我自己的对象的权重和 cfg 文件。readNetFromCaffe
因此,我只是在上面的帖子readNet
中更改并得到了一个错误:
Traceback (most recent call last):
File "people_counter.py", line 124, in <module>
for i in np.arange(0, detections.shape[2]):
IndexError: tuple index out of range
这detections
是一个输出
blob = cv2.dnn.blobFromImage(frame, 1.0/255.0, (416, 416), True, crop=False)
net.setInput(blob)
detections = net.forward()
它的形状是 (1, 1, 100, 7)元组(使用时readNetFromCaffe
)。
我有点期待它不会仅仅通过改变模型来工作。然后我决定寻找一个使用对象检测器的代码,readNet
我在这里找到了它。我通读了代码,发现以下相同的行:
blob = cv2.dnn.blobFromImage(image, scale, (416,416), (0,0,0), True, crop=False)
net.setInput(blob)
outs = net.forward(get_output_layers(net))
在这里,形状outs
是 (1, 845, 6) list。但是为了让我能够立即使用它(这里), outs
应该与detections
. 我已经到了这部分,但不知道应该如何进行。
如果有不清楚的地方,我只需要帮助使用readNet
(或readFromDarknet
)而不是readNetFromCaffe
在这篇文章中