Подсчитать количество обнаружений с помощью OpenCV lib с Python - PullRequest
0 голосов
/ 11 октября 2019

Я начал изучать OpenCV lib в Python. Я хочу написать код, который будет распознавать лица и глаза на фотографии, а также подсчитывать количество обнаружений. Я написал картину, на которой 6 человек. Вы можете скачать форму изображения здесь:

https://www.sendspace.com/file/cznbqa

Я написал код, который распознает лица и глаза, но я не знаю, как подсчитать количество обнаружений. Кроме того, мой код распознает 4/8 лиц и 1/12 глаз на фотографии, так что ... У меня, вероятно, есть некоторые проблемы в коде. Если вы также можете мне помочь с этим, я был бы очень благодарен.

 # Standard imports

import cv2
import numpy as np

# Read image
my_image = cv2.imread("ljudi.jpg", 1)

# data for detecting faces and eyes
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')


img = cv2.imread("ljudi.jpg", 1)
gray = cv2.cvtColor(img, 0)

faces = face_cascade.detectMultiScale(gray, 1.2, 4)

for (x,y,w,h) in faces:

    #detect face with bule rectangle
    #rec. start point (x,y), rec. end point (x+w, y+h), blue color(255,0,0), line width 2
    face_rec = cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 1)        

    roi_gray = gray[y:y+h, x:x+w]
    roi_color = img[y:y+h, x:x+w]

    eyes = eye_cascade.detectMultiScale(roi_gray, 1.1, 2)

    for (ex,ey,ew,eh) in eyes:

        eye_rec = cv2.rectangle(roi_color, (ex,ey), (ex+ew, ey+eh), (0,255,0), )

cv2.imshow('img', img)
cv2.waitKey(0)

1 Ответ

1 голос
/ 12 октября 2019

Из документации OpenCV:

https://www.docs.opencv.org/2.4/modules/objdetect/doc/cascade_classification.html#cascadeclassifier-detectmultiscale

Обнаруживает объекты разных размеров на входном изображении. Обнаруженные объекты возвращаются в виде списка прямоугольников.

, где прямоугольник для привязок Python, по-видимому, просто имеет тип list [x, y, w, h] (https://www.docs.opencv.org/2.4/modules/core/doc/basic_structures.html#rect).

По количеству граней / прямоугольников, возвращаемых внутри списка, можно легко получить, получив длину списка (т.е. количество элементов внутри), что делается с помощью встроенной функции Python len(): https://docs.python.org/3/library/functions.html#len.

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