【问题标题】:ValueError: 'images' must have either 3 or 4 dimensions. in ColabValueError:“图像”必须具有 3 或 4 个维度。在 Colab
【发布时间】:2021-02-24 18:30:09
【问题描述】:

我在 Google Colab 中使用 tensorflow 进行对象检测。我正在尝试从网络摄像头获取视频。这是最后一个阶段。但我在大陆下方收到错误。如何调整图片大小?

ValueError: in user code:

    <ipython-input-49-1e7efe9130ee>:11 detect_fn  *
        image, shapes = detection_model.preprocess(image)
    /usr/local/lib/python3.7/dist-packages/object_detection/meta_architectures/ssd_meta_arch.py:484 preprocess  *
        normalized_inputs, self._image_resizer_fn)
    /usr/local/lib/python3.7/dist-packages/object_detection/utils/shape_utils.py:492 resize_images_and_return_shapes  *
        outputs = static_or_dynamic_map_fn(
    /usr/local/lib/python3.7/dist-packages/object_detection/utils/shape_utils.py:246 static_or_dynamic_map_fn  *
        outputs = [fn(arg) for arg in tf.unstack(elems)]
    /usr/local/lib/python3.7/dist-packages/object_detection/core/preprocessor.py:3241 resize_image  *
        new_image = tf.image.resize_images(
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/util/dispatch.py:201 wrapper  **
        return target(*args, **kwargs)
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/image_ops_impl.py:1468 resize_images
        skip_resize_if_same=True)
    /usr/local/lib/python3.7/dist-packages/tensorflow/python/ops/image_ops_impl.py:1320 _resize_images_common
        raise ValueError('\'images\' must have either 3 or 4 dimensions.')

    ValueError: 'images' must have either 3 or 4 dimensions.

我该如何解决?

所有代码:

while True: 
    ret, frame = cap.read()
    image_np = np.array(frame)
    
    input_tensor = tf.convert_to_tensor(np.expand_dims(image_np, 0), dtype=tf.float32)
    detections = detect_fn(input_tensor)
    
    num_detections = int(detections.pop('num_detections'))
    detections = {key: value[0, :num_detections].numpy()
                  for key, value in detections.items()}
    detections['num_detections'] = num_detections

    # detection_classes should be ints.
    detections['detection_classes'] = detections['detection_classes'].astype(np.int64)

    label_id_offset = 1
    image_np_with_detections = image_np.copy()

    viz_utils.visualize_boxes_and_labels_on_image_array(
                image_np_with_detections,
                detections['detection_boxes'],
                detections['detection_classes']+label_id_offset,
                detections['detection_scores'],
                category_index,
                use_normalized_coordinates=True,
                max_boxes_to_draw=5,
                min_score_thresh=.5,
                agnostic_mode=False)

    cv2.imshow('object detection',  cv2.resize(image_np_with_detections, (800, 600)))
    
    if cv2.waitKey(1) & 0xFF == ord('q'):
        cap.release()
        break

【问题讨论】:

  • 尝试调试这一行:` tf.convert_to_tensor(np.expand_dims(image_np, 0), dtype=tf.float32)`
  • 我知道问题存在,但我无法解决它
  • 您尝试过什么解决方法?
  • 我尝试更改数据类型。我试图用重塑替换图像 np。我尝试了不同的组合
  • @Alison 有修复吗??我有同样的错误。

标签: python tensorflow object-detection


【解决方案1】:
cap = cv2.VideoCapture(0)

尝试使用介于 0、1、2.. 之间的不同值进行聆听。为我工作。

【讨论】:

    【解决方案2】:

    验证您是否从以下行获取图像帧:

    ret, frame = cap.read()
    

    当我遇到同样的错误(尽管代码略有不同)时,我指向的是一个不存在的目录而不是图像。

    【讨论】:

      【解决方案3】:

      也许你应该试试这个......你刚刚从你的网络摄像头收到错误,特别是你的网络摄像头和你的系统之间存在延迟,解决方案是你需要将你的代码 cv2.waitKey(1) &amp; 0xFF == ord('q'): 更改为 key == ord('q'): 和之前如果你应该添加key = cv2.waitKey(1) &amp; 0xFF 并在你的行尾添加这个cap.release() 和这个cv2.destroyAllWindows()

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案4】:

      所以让我解释一下。这不是任何错误,它只是介于笔记本电脑的网络摄像头和访问它的程序之间。只需重新启动您的笔记本电脑。它会正常工作。我遇到了同样的问题...只是重新启动就解决了。

      【讨论】:

      • OP 使用的是 Colab,而不是个人笔记本电脑。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2018-02-22
      • 2023-03-24
      • 1970-01-01
      相关资源
      最近更新 更多