Я обучил каскадный классификатор с несколькими изображениями. У меня было 55 изображений, которые я снял с веб-камеры, обрезал и изменил размер (64×128).
С помощью
для меня в {1..55}; do ./createsamples -img ../cascade_data/$i.jpg -num
11 -bg bg.dat -vec vec_data / $ i.vec -maxxangle 0.6 -maxyangle 0
-maxzangle 0.3 -maxidev 100 -bgcolor 0 -bgthresh 0 -w 64 -h 128; сделано
Я создал 15 образцов из каждого изображения, что означает 15 * 55 = 825 образцов
У меня было 311 негативных образцов (1280 * 720), снятых с веб-камеры.
Я обучил каскадный классификатор с помощью opencv_traincascade
исполняемый как
./ opencv_traincascade -data cascade_trained / -vec
../data/merged_data.vec -bg ../data/bg.txt -numPos 800 -numNeg 311
-numStages 25 -numThreads 4 -stageType BOOST -featureType LBP -w 64 -h 128 -минHitRate 0,995 -maxFalseAlarmRate 0,25 -maxDepth 1 -maxWeakCount 100
я получил cascade.xml
Я использую этот классификатор следующим образом:
for (;;)
{
bool Is = cap.grab();
if (Is == false) {
cout << "Video Capture Fail" << endl;
break;
}
else {vector<Rect> body;// prepare 2 Mat container
Mat img;
Mat original;
// capture frame from video file
cap.retrieve(img, CV_CAP_OPENNI_BGR_IMAGE);
resize(img, img, Size(640, 480))
img.copyTo(original);
cvtColor(img, img, CV_BGR2GRAY);
equalizeHist(img,img);
// detect people, more remarks in performace section
start = clock();
detectorBody.detectMultiScale(img, body, 1.02, 2, 0 | 1, Size(40, 70), Size(80,300));
cout << "time taken to detect: "<<(double)(clock()-start)*1000/CLOCKS_PER_SEC<<" ms"<<endl;// Draw results from detectorBody into original colored image
if (body.size() > 0) {
for (int gg = 0; gg < body.size(); gg++) {
rectangle(original, body[gg].tl(), body[gg].br(), Scalar(0,0,255), 2, 8, 0);
}
}
imshow("Camera 1", original); if( waitKey(33) >= 0 ) break;
}
}
Время, необходимое для обнаружения 45004.6 ms
а видео шапка — это живая вебкамера. Это застревает. Если я загружаю другой классификатор, который я скачал, скажем human.xml
Это прямая трансляция без каких-либо проблем. Как я могу это исправить?
проверьте весь код здесь: testcascade.cpp
Задача ещё не решена.
Других решений пока нет …