Blame view

3rdparty/opencv-4.5.4/modules/objdetect/misc/python/test/test_peopledetect.py 1.85 KB
f4334277   Hu Chunming   提交3rdparty
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
  #!/usr/bin/env python
  
  '''
  example to detect upright people in images using HOG features
  '''
  
  # Python 2/3 compatibility
  from __future__ import print_function
  
  import numpy as np
  import cv2 as cv
  
  
  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
  
  from tests_common import NewOpenCVTests, intersectionRate
  
  class peopledetect_test(NewOpenCVTests):
      def test_peopledetect(self):
  
          hog = cv.HOGDescriptor()
          hog.setSVMDetector( cv.HOGDescriptor_getDefaultPeopleDetector() )
  
          dirPath = 'samples/data/'
          samples = ['basketball1.png', 'basketball2.png']
  
          testPeople = [
          [[23, 76, 164, 477], [440, 22, 637, 478]],
          [[23, 76, 164, 477], [440, 22, 637, 478]]
          ]
  
          eps = 0.5
  
          for sample in samples:
  
              img = self.get_sample(dirPath + sample, 0)
  
              found, _w = hog.detectMultiScale(img, winStride=(8,8), padding=(32,32), scale=1.05)
              found_filtered = []
              for ri, r in enumerate(found):
                  for qi, q in enumerate(found):
                      if ri != qi and inside(r, q):
                          break
                  else:
                      found_filtered.append(r)
  
              matches = 0
  
              for i in range(len(found_filtered)):
                  for j in range(len(testPeople)):
  
                      found_rect = (found_filtered[i][0], found_filtered[i][1],
                          found_filtered[i][0] + found_filtered[i][2],
                          found_filtered[i][1] + found_filtered[i][3])
  
                      if intersectionRate(found_rect, testPeople[j][0]) > eps or intersectionRate(found_rect, testPeople[j][1]) > eps:
                          matches += 1
  
              self.assertGreater(matches, 0)
  
  if __name__ == '__main__':
      NewOpenCVTests.bootstrap()