Ограничительная рамка обнаружения рисовальной головки в opencv python - PullRequest
0 голосов
/ 27 января 2020

У меня есть сценарий, в котором мне нужно обнаружить head человека. Для этого я использую модель обнаружения человека, а затем с помощью ограничивающего прямоугольника человека извлекаю головную часть человека.

person_detector.setInput(blob)
person_detections = person_detector.forward()
boundingboxes = np.array([])
for i in np.arange(0, person_detections.shape[2]):
    person_det_confidence = person_detections[0, 0, i, 2]

    if person_det_confidence > 0.40:
        # extract the index of the class label from the
        # detections list
        idx = int(person_detections[0, 0, i, 1])

        # if the class label is not a person, ignore it
        if CLASSES[idx] != "person":
            continue

        # compute the (x, y)-coordinates of the bounding box
        # for the object
        person_box = person_detections[0, 0, i, 3:7] * np.array([W, H, W, H])
        (startX, startY, endX, endY) = person_box.astype("int")

        # Only append the person which are inside ROI
        if roix1 < startX < roix2:
            rects.append(person_box)

boundingboxes = np.array(rects)
boundingboxes = boundingboxes.astype(int)
person_rects = helper.non_max_suppression_fast(boundingboxes, 0.3)

head_rects = []

for (startX, startY, endX, endY) in person_rects:
    img = frame[startY: startY + endY, startX: startX + endX]
    (startX, startY, endX, endY) = detect_head(img)
    p = (startX, startY, endX, endY)
    head_rects.append(p)

В приведенном выше коде person_rects содержит прямоугольник обнаруженного человека. Мы передаем его функции detect_head, которая возвращает ограничивающий прямоугольник заголовка, который сохраняется в head_rects.

head_rects выглядит следующим образом:

startX = 0
startY = 4
endX = 384
endY = 61

Теперь, если я рисую прямоугольник, используя вышеуказанные координаты:

cv2.rectangle(frame, (startX, startY), (endX, endY), (0, 0, 255), 2)

Он нарисован неправильно:

enter image description here

На изображении выше вы видите красный прямоугольник, нарисованный в верхней левой части рамки, в то время как он должен быть там, где в кадре стоит женщина. Причина этого заключается в том, что обнаруженные координаты головы относятся к человеку, а не к кадру, и, таким образом, при отображении он рисуется неправильно. Может кто-нибудь, пожалуйста, дайте мне некоторое представление о том, как я могу это исправить. Пожалуйста помоги. Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...