opencv/samples/python/peopledetect.py

54 lines
1.3 KiB
Python

import sys
from cv import *
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
try:
img = LoadImage(sys.argv[1])
except:
try:
f = open(sys.argv[1], "rt")
except:
print "cannot read " + sys.argv[1]
sys.exit(-1)
imglist = list(f.readlines())
else:
imglist = [sys.argv[1]]
NamedWindow("people detection demo", 1)
storage = CreateMemStorage(0)
for name in imglist:
n = name.strip()
print n
try:
img = LoadImage(n)
except:
continue
#ClearMemStorage(storage)
found = list(HOGDetectMultiScale(img, storage, win_stride=(8,8),
padding=(32,32), scale=1.05, group_threshold=2))
found_filtered = []
for r in found:
insidef = False
for q in found:
if inside(r, q):
insidef = True
break
if not insidef:
found_filtered.append(r)
for r in found_filtered:
(rx, ry), (rw, rh) = r
tl = (rx + int(rw*0.1), ry + int(rh*0.07))
br = (rx + int(rw*0.9), ry + int(rh*0.87))
Rectangle(img, tl, br, (0, 255, 0), 3)
ShowImage("people detection demo", img)
c = WaitKey(0)
if c == ord('q'):
break