I just started programming. I have a task to determine on the video machine. The Opencv library has the standard getDefaultPeopleDetector method for defining people. Here is the code for determining the people in the photo:
#include <assert.h> #include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/objdetect/objdetect.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> #include <conio.h> using namespace cv; using namespace std; int main() { // Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠ΅ΡΡΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Mat img = imread("1856.jpg"); // ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΠΌ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΡΠ°Π± ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ // ΠΏΠΎΠΈΡΠΊΠ° ΠΌΠ΅Π»ΠΊΠΈΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² resize(img, img, Size(2 * img.cols, 2 * img.rows)); // ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ HOG-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° int nbins = 9; Size cellSize(8, 8); Size blockSize(16, 16); Size blockStride(8, 8); Size winSize(64, 128); Size winStride(4, 4); // ΡΠΎΠ·Π΄Π°Π΅ΠΌ HOG-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ/Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ HOGDescriptor hog(winSize, blockSize, blockStride, cellSize, nbins); // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ // Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Ρ ΠΎΠΏΠΎΡΠ½ΡΡ
Π²Π΅ΠΊΡΠΎΡΠΎΠ², // ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΎΠΊΠ½Π° Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ 64x128. hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector()); // ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ² // Π³ΠΈΠΏΠ΅ΡΠΏΠ»ΠΎΡΠΊΠΎΡΡΠΈ SVM ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° HOG-Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° // ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΊΠ½Π° Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ assert(hog.checkDetectorSize()); // ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ vector<Rect> locations; vector<double> weights; hog.detectMultiScale(img, locations, weights, 0.0, winStride, Size(), 1.05, 2., true); // ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎ Π½Π°ΡΠ°Π»ΡΠ½ΡΡ
ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² resize(img, img, Size(img.cols / 2, img.rows / 2)); // ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ for (size_t i = 0; i < locations.size(); ++i) { Rect detection = locations[i]; detection.x /= 2; detection.y /= 2; detection.width /= 2; detection.height /= 2; rectangle(img, detection, Scalar(0, 0, 255), 2); } // ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ namedWindow("detections"); imshow("detections", img); waitKey(); destroyAllWindows(); return 0; } With the transfer of this algorithm to the video, there were problems. Please help with this.