Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Full body detection and tracking using OpenCV+Python-2.7

There are a lot of materials available to do this with C++. I would to know if there is a way to do full body detection using OpenCV in Python-2.7?

Given video of a person walking along the sagittal plane (camera taken 90 degrees from the direction of walk), I would like to bound a region of interest rectangle covering the entire body of that person and track the same in movement frame by frame.

like image 913
Ébe Isaac Avatar asked Jan 19 '16 07:01

Ébe Isaac


1 Answers

This one is using the hog descriptor you can find the sample in samples/python/peopledetect.py I used the sample video provided by the opencv installation.

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()

Results

Not so good. Still give it a try enter image description here

like image 180
Arijit Avatar answered Oct 22 '22 17:10

Arijit