函数中的 OpenCV 深度学习人脸检测断言错误 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'

OpenCV deep learning face detection assertion error in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'

我关注 tutorial to implement face detection from image OpenCV 和深度学习 SSD 框架。

modelFile = "./ssd/res10_300x300_ssd_iter_140000.caffemodel"
configFile = "./ssd/deploy.prototxt"
net = cv2.dnn.readNetFromCaffe(configFile, modelFile)
image = cv2.imread("face.jpg")
(h, w) = image.shape[:2]
blob = cv2.dnn.blobFromImage(cv2.resize(image, (300, 300)), 1.0, (300, 300), (104.0, 177.0, 123.0))
net.setInput(blob)
detections = net.forward()

但是detections = net.forward()returns错误:

error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\dnn\src\layers\convolution_layer.cpp:236: error: (-215:Assertion failed) blobs.size() != 0 in function 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'

仍在寻找更多信息,但不知道是代码中的错误还是库中的错误...任何人都知道什么可能导致问题?任何帮助将不胜感激。

我无法同时使用 OpenCV 3.4.2 和 OpenCV 4.0.0 重现您的问题。

这是我得到的:

P.S。我从 https://raw.githubusercontent.com/opencv/opencv_3rdparty/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000.caffemodel and deploy.prototxt from https://github.com/opencv/opencv/raw/3.4.0/samples/dnn/face_detector/deploy.prototxt 下载 res10_300x300_ssd_iter_140000.caffemodel。

我想我知道你的问题出在哪里了,请检查你的ssd文件夹下的"deploy.prototxt"和"res10_300x300_ssd_iter_140000.caffemodel"这两个文件。如果文件大小不为零,则可能是您的下载 blocked/interrupted(被防火墙阻止、连接失败等)将其与原始大小进行比较。如果大小为零,则根本没有下载。

在这两种情况下, 请转到“https://github.com/opencv/opencv/blob/master/samples/dnn/face_detector/deploy.prototxt”github 存储库

"https://github.com/opencv/opencv_3rdparty/raw/dnn_samples_face_detector_20170830/res10_300x300_ssd_iter_140000.caffemodel" 下载两个同名文件并替换。

或者您可以使用与之前相同的来源。

我在使用灰度图像时遇到了同样的错误。 读取彩色图像后,错误就解决了。