Как мне исправить «cv2.error (-215: утверждение не выполнено) r == Range :: all () || (0 <= r.start ..» при попытке запустить скрипт обнаружения объектов? - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь запустить python easy_object_detection.py --video=videos/test1.mp4, чтобы создать маску видеообнаружения объекта rcnn.При этом я получаю сообщение об ошибке:

  File "easy_object_detection.py", line 166, in <module>
    boxes, masks = net.forward(['detection_out_final', 'detection_masks'])
cv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\core\src\matrix.cpp:541: error: (-215:Assertion failed) r == Range::all() || (0 <= r.start && r.start < r.end && r.end <= m.size[i]) in function 'cv::Mat::Mat'

Примечание. Мой сценарий позволяет без проблем запускать python easy_object_detection.py --image=images/img1.jpg.

Я пытался установить opencv4, меняя мой.mp4 до .mjpg, добавление пакетов в Visual Studio 2017 com, и я искал в своем файле pbtxt числа с плавающей запятой минимального размера, но в моем файле pbtxt даже не было упомянуто min_size.

def postprocess(boxes, masks):
    # Output size of masks is NxCxHxW where
    # N - number of detected boxes
    # C - number of classes (excluding background)
    # HxW - segmentation shape
    numClasses = masks.shape[1]
    numDetections = boxes.shape[2]

    frameH = frame.shape[0]
    frameW = frame.shape[1]

    for i in range(numDetections):
        box = boxes[0, 0, i]
        mask = masks[i]
        score = box[2]
        if score > confThreshold:
            classId = int(box[1])

            # Extract the bounding box
            left = int(frameW * box[3])
            top = int(frameH * box[4])
            right = int(frameW * box[5])
            bottom = int(frameH * box[6])

            left = max(0, min(left, frameW - 1))
            top = max(0, min(top, frameH - 1))
            right = max(0, min(right, frameW - 1))
            bottom = max(0, min(bottom, frameH - 1))

            # Extract the mask for the object
            classMask = mask[classId]

            # Draw bounding box, colorize and show the mask on the image
            drawBox(frame, classId, score, left, top, right, bottom, classMask)

# Run the forward pass to get output from the output layers
boxes, masks = net.forward(['detection_out_final', 'detection_masks'])

Я ожидаю получить файл .avi, который показывает ограничивающие рамки и маски, но вместо этого я получаю:

  File "easy_object_detection.py", line 166, in <module>
    boxes, masks = net.forward(['detection_out_final', 'detection_masks'])
cv2.error: OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\core\src\matrix.cpp:541: error: (-215:Assertion failed) r == Range::all() || (0 <= r.start && r.start < r.end && r.end <= m.size[i]) in function 'cv::Mat::Mat'

ОБНОВЛЕНИЕ: я смог заставить скрипт работать с видео 360p (я использовал1080p).Теперь мой вопрос: «Как мне установить код, разрешающий видео большего размера, если в моем pbtxt нет места для установки максимального и минимального размера?»

...