web-dev-qa-db-fra.com

Détection et suivi du corps entier à l'aide d'OpenCV + Python-2.7

Il existe de nombreux matériaux disponibles pour le faire avec C++. Je voudrais savoir s'il existe un moyen de détecter tout le corps en utilisant OpenCV en Python-2.7?

Étant donné la vidéo d'une personne marchant le long du plan sagittal (caméra prise à 90 degrés par rapport à la direction de la marche), je voudrais délimiter une zone d'intérêt rectangle couvrant tout le corps de cette personne et la suivre en mouvement image par image.

9
Ébe Isaac

Celui-ci utilise le descripteur de porc, vous pouvez trouver l'exemple dans samples/python/peopledetect.py J'ai utilisé l'exemple de vidéo fourni par l'installation opencv.

import numpy as np
import cv2


def inside(r, q):
    rx, ry, rw, rh = r
    qx, qy, qw, qh = q
    return rx > qx and ry > qy and rx + rw < qx + qw and ry + rh < qy + qh


def draw_detections(img, rects, thickness = 1):
    for x, y, w, h in rects:
        # the HOG detector returns slightly larger rectangles than the real objects.
        # so we slightly shrink the rectangles to get a nicer output.
        pad_w, pad_h = int(0.15*w), int(0.05*h)
        cv2.rectangle(img, (x+pad_w, y+pad_h), (x+w-pad_w, y+h-pad_h), (0, 255, 0), thickness)


if __name__ == '__main__':

    hog = cv2.HOGDescriptor()
    hog.setSVMDetector( cv2.HOGDescriptor_getDefaultPeopleDetector() )
    cap=cv2.VideoCapture('vid.avi')
    while True:
        _,frame=cap.read()
        found,w=hog.detectMultiScale(frame, winStride=(8,8), padding=(32,32), scale=1.05)
        draw_detections(frame,found)
        cv2.imshow('feed',frame)
        ch = 0xFF & cv2.waitKey(1)
        if ch == 27:
            break
    cv2.destroyAllWindows()

Résultats

Pas si bon. Essayez encore enter image description here

21
Arijit