在openCV mobilenet SSD的前向函数中断言失败

这段openCV代码用于检测由AirSim(Unreal插件)API流传输的视频中的对象。该脚本能够检测来自网络摄像头的视频中的对象,但我希望通过client.simGetImage传递视频流时,我得到了断言失败的错误:

, 第103行,detections = net.forward() cv2.error: OpenCV(3.4.3) /io/opencv/modules/dnn/src/layers/convolution_layer.cpp:1021: 错误: (-215:Assertion failed) inputs[0]->size[1] % blobs[0].size[1] == 0 在函数’forward’中

代码如下:

from imutils.video import VideoStreamfrom imutils.video import FPSimport numpy as npimport argparseimport imutilsimport timeimport cv2import setup_path import airsimimport sysap = argparse.ArgumentParser()ap.add_argument("-p", "--prototxt", required=True,    help="path to Caffe 'deploy' prototxt file")ap.add_argument("-m", "--model", required=True,    help="path to Caffe pre-trained model")ap.add_argument("-c", "--confidence", type=float, default=0.2,    help="minimum probability to filter weak detections")args = vars(ap.parse_args())cameraType = "scene"cameraTypeMap = {  "depth": airsim.ImageType.DepthVis, "segmentation": airsim.ImageType.Segmentation, "seg": airsim.ImageType.Segmentation, "scene": airsim.ImageType.Scene, "disparity": airsim.ImageType.DisparityNormalized, "normals": airsim.ImageType.SurfaceNormals}client = airsim.MultirotorClient()client.confirmConnection()client.enableApiControl(True)client.armDisarm(True)client.takeoffAsync().join()fontFace = cv2.FONT_HERSHEY_SIMPLEXfontScale = 0.5thickness = 2textSize, baseline = cv2.getTextSize("FPS", fontFace, fontScale, thickness)print (textSize)textOrg = (10, 10 + textSize[1])frameCount = 0startTime=time.clock()fps = 0CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",    "bottle", "bus", "car", "cat", "chair", "cow", "diningtable",    "dog", "horse", "motorbike", "person", "pottedplant", "sheep",    "sofa", "train", "tvmonitor"]COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))print("[INFO] loading model...")net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])print("[INFO] starting video stream...")time.sleep(2.0)fps = FPS().start()while True:        rawImage = client.simGetImage("3", cameraTypeMap[cameraType])    if (rawImage == None):        print("Camera is not returning image, please check airsim for error messages")        sys.exit(0)    else:        png = cv2.imdecode(airsim.string_to_uint8_array(rawImage), cv2.IMREAD_UNCHANGED)    frame = imutils.resize(png, width=400)    (h, w) = frame.shape[:2]    blob = cv2.dnn.blobFromImage(cv2.resize(frame, (300, 300)),        0.007843, (300, 300), 127.5)    net.setInput(blob)    detections = net.forward()    for i in np.arange(0, detections.shape[2]):        confidence = detections[0, 0, i, 2]        if confidence > args["confidence"]:            idx = int(detections[0, 0, i, 1])            box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])            (startX, startY, endX, endY) = box.astype("int")            label = "{}: {:.2f}%".format(CLASSES[idx],                confidence * 100)            cv2.rectangle(frame, (startX, startY), (endX, endY),                COLORS[idx], 2)            y = startY - 15 if startY - 15 > 15 else startY + 15            cv2.putText(frame, label, (startX, y),                cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)    cv2.imshow("Frame", frame)    key = cv2.waitKey(1) & 0xFF    if key == ord("q"):        break    fps.update()fps.stop()print("[INFO] elapsed time: {:.2f}".format(fps.elapsed()))print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))cv2.destroyAllWindows()

回答:

使脚本正常工作所需的更改:

rawImage = client.simGetImage("3", cameraTypeMap[cameraType])np_response_image = np.asarray(bytearray(rawImage), dtype="uint8")frame = cv2.imdecode(np_response_image, cv2.IMREAD_COLOR)frame = imutils.resize(png, width=400)

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注