roboforum.ru

Технический форум по робототехнике.

TP-link MR3020 + OpenCV. Проблема с получением видеопотока.

TP-link MR3020 + OpenCV. Проблема с получением видеопотока.

NRG » 24 окт 2012, 03:22

Доброго времени суток! Столкнулся со следующей проблемой: есть робороутер TP-link MR3020 (с прошивкой OR-WRT 0,7), к нему подключена веб-камера Bravis MS-015 и есть программа с использованием библиотек OpenCV. Робороутер подключается через вай-фай. После успешной компиляции при запуске программы выдается следующее сообщение "warning: Error opening file (../../modules/highgui/src/cap_ffmpeg_impl.hpp:361) и как следствие не получаю картинки (текст кода программы прилагается).

Код: Выделить всёРазвернуть
#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 все работало ок (не требуя залогиниться).

Изображение в вебинтерфейсе робороутера отображается хорошо, без помех.

Помогите, пожалуйста, решить эту "проблему". Потратил уже не один вечер. Заранее спасибо!

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

elmot » 24 окт 2012, 08:43

а где написано, что cvCaptureFromFile умеет открывать http потоки?

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

NRG » 24 окт 2012, 11:18

То что cvCaptureFromFile() может работать с урлами узнал из следующего топика
stackoverflow.com/questions/712998/opencv-with-network-cameras

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

elmot » 24 окт 2012, 11:33

ээээ... Почему тогда код захвата другой?
Я так сильно подозреваю, что раз в имени метода сказано - из файла, то оно и ищет файл, а не сетевой урл

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

NRG » 24 окт 2012, 12:11

Ну по моей логике стрим с урла то же, что и файл. Что то, что то последовательность фреймов. Или я ошибаюсь?

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

elmot » 24 окт 2012, 12:21

очевидно, да. На уровне API OS доступ по http и доступ к файлу - капитально разные вещи. Похоже, кое-где в opencv это различие убрано внутрь кода библиотеки, но не везде.

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

NRG » 24 окт 2012, 12:50

А какой можете посоветовать другой метод для получения картинки из урла?

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

elmot » 24 окт 2012, 13:29

по правде говоря я не самый большой знаток си и опенцв. надо прочитать из урла в байтовый массив или буфер, потом распарсить в кадр. единственно, я бы не стал читать видеопоток, достаточно кадра. ?action=snapshot

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

NRG » 24 окт 2012, 13:37

Спасибо за перативную помощь! Буду копать в этом направлении. Как найду решение, сразу же отпишусь.

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

noonv » 24 окт 2012, 16:35

elmot писал(а):по правде говоря я не самый большой знаток си и опенцв. надо прочитать из урла в байтовый массив или буфер, потом распарсить в кадр. единственно, я бы не стал читать видеопоток, достаточно кадра. ?action=snapshot

именно так и нужно.
в принципе, я уже такое делал - но всё руки не дойдут залить на какой-нибудь кодо-хостинг :)

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

elmot » 24 окт 2012, 16:52

Я тоже делал, но на питоне:)

Re: TP-link MR3020 + OpenCV. Проблема с получением видеопото

noonv » 16 дек 2012, 22:48



Rambler\'s Top100 Mail.ru counter