这段代码展示了使用 OpenCV 和 MindSpore 进行实时人脸识别的基本步骤。它首先打开摄像头,然后使用 OpenCV 的人脸检测器查找图像中的面部。一旦检测到面部,就会将其裁剪并调整大小,然后使用 MindSpore 模型进行识别。

代码中出现了 ValueError: mindspore\core\utils\check_convert_utils.cc:367 CheckInteger] The primitive[Conv2D]'s x shape size must be equal to 4, but got 2. 错误提示,这意味着 Conv2D 算子期望的输入数据维度为 4 维,而实际输入的维度为 2 维。

为了解决这个问题,需要对输入数据进行修改,使其满足 Conv2D 算子的要求。可以使用 reshape 函数将输入数据的维度转换为 4 维,例如 (batch_size, channel, height, width)

此外,还需要确保模型的输入数据维度与实际输入数据一致。如果两者不一致,则需要对模型进行修改,使其能够接收 4 维的输入数据。

以下是一个解决错误提示的示例代码:

cap = cv2.VideoCapture(0)
stop = False
while not stop:
    success, img = cap.read()
    subjects = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17',
                '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33']
    # 生成图像的副本,这样就能保留原始图像
    img1 = img.copy()
    # 检测人脸
    # 将测试图像转换为灰度图像,因为opencv人脸检测器需要灰度图像
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    # 检测多尺度图像,返回值是一张脸部区域信息的列表(x,y,宽,高)
    rect = face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30),
                                         flags=cv2.CASCADE_SCALE_IMAGE)
    # 如果未检测到面部
    if len(rect) == 0:
        txt = 'no face!'
        cv2.putText(img1, txt, (10, 20), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)
    if not rect is None:
        for (x, y, w, h) in rect:
            face = gray[y:y + w, x:x + h].astype(np.float32)  # 数值转换
            face = cv2.resize(face, (100, 100))
            # 将 face 调整为 4 维
            face = face.reshape((1, 1, 100, 100))
            face = Tensor(face)
            cv2.rectangle(img1, (x, y), (x + w, y + h), (0, 255, 0), 2)  # 画出矩形框
            output =network(face)
            predicted_class = np.argmax(output.asnumpy(),axis=1)
            #if min_d < 200000000000:
            cv2.putText(img1, predicted_class, (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)
            #else:
            #   label = 'unknown'
            #   cv2.putText(img1, label, (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (128, 128, 0), 2)
    cv2.imshow('img', img1)
    if (cv2.waitKey(1) & 0xFF == ord('q')):  # 按下q程序结束
            stop = True
            cv2.destroyAllWindows()  # 释放窗口

这段代码将 face 的维度调整为 (1, 1, 100, 100),使其满足 Conv2D 算子的要求。此外,还需确保模型的输入数据维度与实际输入数据一致。

注意: 实际代码中需要根据具体情况调整输入数据的维度和模型的输入数据维度。

总结

这段代码展示了如何使用 OpenCV 和 MindSpore 进行实时人脸识别,并解决常见的输入数据维度不匹配问题。通过对输入数据的维度进行调整,以及确保模型的输入数据维度与实际输入数据一致,可以有效解决 ValueError: mindspore\core\utils\check_convert_utils.cc:367 CheckInteger] The primitive[Conv2D]'s x shape size must be equal to 4, but got 2. 错误提示。

希望这段代码和解释能够帮助您解决类似的问题。如果还有其他问题,请随时提问。

使用 OpenCV 和 MindSpore 进行实时人脸识别

原文地址: https://www.cveoy.top/t/topic/jqxT 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录