-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhogPeopleDetection.java
143 lines (95 loc) · 3.93 KB
/
hogPeopleDetection.java
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// ********************************************************
// Example : displaying live from attached camera
// and (try to!) detect people in it using HOG
// Author : Toby Breckon, toby.breckon@durham.ac.uk
// Copyright (c) 2015 Durham University
// License : LGPL - http://www.gnu.org/licenses/lgpl.html
// ********************************************************
// import required OpenCV components
import java.util.List;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfDouble;
import org.opencv.core.MatOfRect;
import org.opencv.core.Point;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
import org.opencv.core.Size;
import org.opencv.highgui.VideoCapture;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.HOGDescriptor;
// ********************************************************
public class hogPeopleDetection {
public static void main(String[] args) throws InterruptedException {
// load the Core OpenCV library by name
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// create video capture device object
VideoCapture cap = new VideoCapture();
// try to use the hardware device if present
int CAM_TO_USE = 0;
// create a new image object
Mat matFrame = new Mat();
// try to open first capture device (0)
try {
cap.open(CAM_TO_USE);
} catch (Exception e1) {
System.out.println("No webcam attached");
// otherwise try opening a video file
try{
cap.open("files/video.mp4");
} catch (Exception e2) {
System.out.println("No video file found");
}
}
// if the a video capture source is now open
if (cap.isOpened())
{
// create a new window object
Imshow ims = new Imshow("HOG People Detection");
boolean keepProcessing = true;
// create new HoG detection object
HOGDescriptor HOG = new HOGDescriptor();
HOG.setSVMDetector(HOGDescriptor.getDefaultPeopleDetector());
// create
MatOfRect foundLocations = new MatOfRect();
MatOfDouble foundWeights = new MatOfDouble();
while (keepProcessing)
{
// grab the next frame from video source
cap.grab();
// decode and return the grabbed video frame
cap.retrieve(matFrame);
// if the frame is valid (not end of video for example)
if (!(matFrame.empty()))
{
// perform detection
HOG.detectMultiScale(matFrame, foundLocations, foundWeights,
0,
new Size(8,8),
new Size(32,32),
1.05,
8,
false);
List<Rect> rectangles = foundLocations.toList();
for (int i = 0; i < rectangles.size(); i++) {
Core.rectangle(matFrame,
new Point(rectangles.get(i).x,rectangles.get(i).y),
new Point(rectangles.get(i).x + rectangles.get(i).width,
rectangles.get(i).y + rectangles.get(i).height),
new Scalar (255,0,0), 2, 1, 0);
}
// display image with a delay of 40ms (i.e. 1000 ms / 25 = 25 fps)
ims.showImage(matFrame);
Thread.sleep(40);
} else {
keepProcessing = false;
}
}
} else {
System.out.println("error cannot open any capture source - exiting");
}
// close down the camera correctly
cap.release();
}
}
// ********************************************************