요즘 유행하는 딥러닝도 참 좋지만 느리고 복잡하고 비용이 비싸다.
가끔은 고전적인 방식도 좋다.
사람 검출을 위해 hog로 피처를 추출해서 svm으로 사람인지 아닌지를 구분하여 box를 친다.
이를 위해 알고리즘을 추출 후 서포트 벡터 머신을 활용하였다.
default people detector와
daimler people detector를 사용하였다.
영상 >>
코드 >>
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
66
67
68
69
|
#include "opencv2/opencv.hpp"
#include <iostream>
#include <vector>
using namespace cv;
int detectPedestrian()
{
int mode = 0;
VideoCapture cap("vtest.avi");
if (!cap.isOpened()) {
std::cerr << "Video open failed!" << std::endl;
return -1;
}
HOGDescriptor hogDefaultPeopleDetector;
hogDefaultPeopleDetector.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
HOGDescriptor hogDaimPeopleDetector(Size(48,96),Size(16,16),Size(8,8),Size(8,8),9);
hogDaimPeopleDetector.setSVMDetector(HOGDescriptor::getDaimlerPeopleDetector());
std::vector<Rect> detected;
Mat frame;
while (true) {
cap >> frame;
if (frame.empty())
break;
if (mode == 0) {
hogDefaultPeopleDetector.detectMultiScale(frame, detected);
for (Rect r : detected) {
Scalar c = Scalar(std::rand() % 256, std::rand() % 256, std::rand() % 256);
rectangle(frame, r, c, 3);
}
putText(frame, "DefaultPeopleDetector...", cvPoint(30, 30),
FONT_HERSHEY_COMPLEX_SMALL, 2.0, cvScalar(0, 0, 255), 1, CV_AA);
}
else {
hogDaimPeopleDetector.detectMultiScale(frame, detected, 1.2, Size(8, 8), Size(32, 32), 1.05, 6);
for (Rect r : detected) {
Scalar c = Scalar(std::rand() % 256, std::rand() % 256, std::rand() % 256);
rectangle(frame, r, c, 3);
}
putText(frame, "DaimPeopleDetector...", cvPoint(30, 30),
FONT_HERSHEY_COMPLEX_SMALL, 2.0, cvScalar(0, 0, 255), 1, CV_AA);
}
imshow("frame", frame);
if (waitKey(10) == 27)
break;
if (waitKey(10) == 109)
{
if (mode == 0)
mode = 1;
else
mode = 0;
}
std::cout << "mode : " << mode << std::endl;
}
return 0;
}
|
'C' 카테고리의 다른 글
c++ sobel operator 구현 코드 (0) | 2021.10.28 |
---|---|
c++ opencv keypoint를 활용한 homography 찾기 (0) | 2021.08.13 |
c++ leetcode coin change code (0) | 2021.07.27 |
leetcode minimum path sum c++ code (0) | 2021.07.27 |
c++ leetcode DP min cost climing stairs code (0) | 2021.07.26 |