- Код: Выделить всё • Развернуть
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace std;
using namespace cv;
/* Определение и отображение */
void detectAndDisplay( Mat frame );
/* Глобальные переменные */
String face_cascade_name = "haarcascade_frontalface_alt.xml";
String eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
CascadeClassifier face_cascade;
CascadeClassifier eyes_cascade;
string window_name = "Распознавание лица";
/* Глобальные переменные */
int main(int argc, const char** argv) //главная функция
{
CvCapture* capture;
Mat frame;
//1) Загружаем каскады
cout<<"Loading Face cascade..."<<endl;
if( !face_cascade.load( face_cascade_name ) )
cout<<"Error loading"<<endl<<endl;
else cout<<"Face cascade successfully loaded!"<<endl;
cout<<"Loading Eyes cascade..."<<endl;
if( !eyes_cascade.load( eyes_cascade_name ) )
cout<<"Error loading"<<endl<<endl;
else cout<<"Eyes cascade successfully loaded!"<<endl<<"continue..."<<endl;
cout<<"Search and try to connect to webCAM..."<<endl;
//2) Читаем видеопоток
capture = cvCaptureFromFile( "http://192.168.1.120:8080/?action=stream" );
if( capture )
{
cout<< "WebCAM is found. Connection to webCAM..." ;
while( 1 )
{
frame = cvQueryFrame( capture );
//3) применям отображение к фрейму
if( !frame.empty() ) { detectAndDisplay( frame ); }
int c = cvWaitKey(10);
// Выход при нажатии эскейпа
if(c == 27)
break;
}
} else {cout<<"WebCAM not found!"; int c=0; cin>>c;}
}
/* @function определение и показ */
void detectAndDisplay( Mat frame )
{
std::vector<Rect> faces;
Mat frame_gray;
cvtColor( frame, frame_gray, CV_BGR2GRAY );
equalizeHist( frame_gray, frame_gray );
//определение лица
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
for( int i = 0; i < faces.size(); i++ )
{
Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 234, 2, 2 ), 2, 8, 0 );
Mat faceROI = frame_gray( faces[i] );
std::vector<Rect> eyes;
}
// отображаем, что получили
imshow( window_name, frame );
}
В робороутере настройки камеры следующие: Video source: Camera 1; Video format: MJPEG; Resolution: 640x480; FpS: 30; (Пробовал менять формат на YUV, разрешение и фпс на меньшее, но без результата)
Basic Authorization включена. В коде программы вносил изменения для авторизации, но без результата. По сути она и не нужна для видеопотока, т.к. в браузер копипастил ссылку http://192.168.1.120:8080/?action=stream все работало ок (не требуя залогиниться).
Изображение в вебинтерфейсе робороутера отображается хорошо, без помех.
Помогите, пожалуйста, решить эту "проблему". Потратил уже не один вечер. Заранее спасибо!