2010-05-11 19:44:00 +02:00
|
|
|
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
|
2012-03-19 00:07:39 +01:00
|
|
|
cv.DestroyAllWindows()
|