roboforum.ru

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


Как получить видеопоток из IP-камеры?

Как получить видеопоток из IP-камеры?

Сообщение galex1981 » 23 май 2011, 11:06

Возникла следующая проблема:

Приобрел WiFi-IP камеру D-Link DCS-930 для дальнейшей установки ее на робота. Хочу с помощью ее тестировать алгоритмы EDV-а AVM да и вообще заниматься компьютерным зрением. Сама проблема состоит в том что ума не приложу как с нее получить видеопоток. Само видео можно как пользователю получить: зайти в ее админку 192.168.0.20 (к примеру. ip ее можно менять). В админке можно выбрать 2 метода получения видео:
1)activex
2)java приложение

Ранее не занимался ip камерами потому щас топчусь на месте. В гугле по запросу полно всякого мусора но по теме ничего не ншел. Пожалуйста подскажите если кто нибудь занимался этой темой куда копать.

ЗЫ: по ЯП в принципе разницы нет, но вообще остановился на C++ и хочу использовать библитеку OpenCV
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Как получить видеопоток из IP-камеры?

Сообщение =DeaD= » 23 май 2011, 11:25

Говорят есть два метода:
David Bolen @ http://opencv-users.1802565.n2.nabble.c ... 95314.html писал(а):However, the odds are quite good that your camera will have some way
to retrieve an MJPEG stream over HTTP via a well defined URL. So two
fairly straight forward ways to handle it are:

1. Supply the appropriate URL to cvCreateFileCapture, and then use
a loop with cvQueryFrame just like you would with other cameras.


This can also work with an MPEG4 feed (such as an rtsp:// URL) if
that's what your camera supports, though in general I would prefer
an MJPEG feed if given the option for image processing if you can
support the bandwidth.

Note that this approach is dependent on your OpenCV library having
been built with appropriate support for handling an MJPEG and/or
MPEG4 stream. I've had good luck under Linux but not so much under
Windows.

2. Just make your own connection to the camera at the supplied URL, and
decode the frames yourself, independent of OpenCV.

Most MJPEG feeds are just a series of JPEG images in a multipart
HTTP response, which are fairly easy to parse and decode using
whatever popular library you prefer for web retrieval and JPEG
decoding in your language and platform of choice. Once you have
any individual JPEG frame decoded, you can then convert it over to
an OpenCV IplImage (there was a recent thread on this list about
that) and proceed from there.

Trying to decode an MPEG4 stream would be much harder, and isn't
something I've attempted.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Как получить видеопоток из IP-камеры?

Сообщение EDV » 23 май 2011, 11:31

А если попробовать подключить камеру через модуль RoboRealm: Control\Cameras\DLink_Internet_Camera?
Вложения
DLink_camera.png
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: Как получить видеопоток из IP-камеры?

Сообщение galex1981 » 23 май 2011, 12:04

С RoboRealm получилось вывести видеопоток но есть один минус:
камера показывает со скоростью 1 кадр в 3 секунды (может просто я нормально не настроил или обновление изображения все просто с такой скоростью идет).

Все таки попробую как Dead советовал получить видеопоток. Позже отпишусь о результатах
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Как получить видеопоток из IP-камеры?

Сообщение EDV » 23 май 2011, 12:29

Так, а если выставить в поле “Refresh Freq” значение ASAP (As Soon As Possible)?
То есть – выводить изображение настолько быстро, насколько это возможно.
Вложения
DLink_camera_Frq.png
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: Как получить видеопоток из IP-камеры?

Сообщение galex1981 » 23 май 2011, 12:34

При этом значении и тестировал - 1 кадр в 3 секунды. Если поставить в этом поле скорость >50 мс то еще медленнее кадры обновляются. На FAQ на сайте RoboRealm разработчики и пишут что этот модуль медленно работает с камерами. Потому сейчас вопрос задал на форуме dlink.
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Как получить видеопоток из IP-камеры?

Сообщение galex1981 » 24 май 2011, 16:00

В общем отпишусь о промежуточных результатах:

Форум dlink мне абсолютно ничего не дал - там либо не хотят разглашать данную информацию, либо прикидываются...
Потоки я нашел, их формат следующий:
http://192.168.0.20/mjpeg.cgi - видео
http://192.168.0.20/audio.cgi - аудио
http://192.168.0.20/video.cgi - видео

http://192.168.0.20/image.jpg - скрин

Где 192.168.0.20 - ip камеры

Если на камере установлен логин/пароль то строки немного видоизменяются
http://логин:пароль@192.168.0.20/video.cgi

Теперь пытаюсь получить эти потоки в программе. OpenCV версии 1.1 начала поддерживать потоковый ввод с устройств. Пока проблема как раз в том что OpenCV не понимает формат mjpeg и ругается на кодек - но я работаю над этим
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Как получить видеопоток из IP-камеры?

Сообщение galex1981 » 26 май 2011, 13:52

В общем самым простым решением для импорта потома с IP камеры оказалось:
Установка JPEG/DIRECTSHOW фильтра, после чего с камерой можно работать как с обычной USB WEB камерой.

Таковой фильтр можно и самому написать (что впоследствии при наличии свободного времени и сделаю), с можно установить уже готовый фильтр, например как:
http://www.webcamxp.com/download.aspx (IP Camera [JPEG/MJPEG] DirectShow Filter).

И в OpenCV обычным образом камеру инициализируем:
Код: Выделить всёРазвернуть
capture = cvCaptureFromCAM(2);//здесь 2 - это индекс вашей камеры в системе
if( !capture )
{
    fprintf(stderr,"Could not initialize capturing...\n");
    return -1;
}
Вложения
320_240.PNG
Изображение с камеры
filter.PNG
Настройки фильтра
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Как получить видеопоток из IP-камеры?

Сообщение EDV » 26 май 2011, 16:37

Ну а RoboRealm тоже работает через этот JPEG/DIRECTSHOW фильтр?
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: Как получить видеопоток из IP-камеры?

Сообщение galex1981 » 26 май 2011, 20:10

Фильтр в RoboRealm выдает не более 5 кадрос в секунду. В OpenCV выдает по максимуму
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Как получить видеопоток из IP-камеры?

Сообщение EDV » 26 май 2011, 20:49

А если попробовать посмотреть свойства устройства видеозахвата (Options/Video Format)?
Возможно, там есть настройка, типа: «Частота кадров» :wink:
Вложения
rr_options.PNG
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: Как получить видеопоток из IP-камеры?

Сообщение galex1981 » 26 май 2011, 21:32

Если используется IP камера без DSHOW фильтра как есть то в списке камер ее нет - на нее же мы не устанавливаем драйвера, так как их просто нет. Но после установки фильтра уже появляется в списке - обычно по названию фильтра (типа IP Camera)
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Как получить видеопоток из IP-камеры?

Сообщение EDV » 26 май 2011, 21:54

Ну, вот я и хотел выяснить: если из диалогового окна RoboRealm вызвать окно “Options” в выпадающем списке “Camera” выбрать «IP Camera», а затем нажать на «Video Format», то возможно в свойствах этого устройства (IP Camera) есть настройка «Частота кадров».
Аватара пользователя
EDV
 
Сообщения: 1016
Зарегистрирован: 06 июн 2007, 15:19
Откуда: Украина, Лисичанск
ФИО: Дмитрий Еремеев

Re: Как получить видеопоток из IP-камеры?

Сообщение galex1981 » 26 май 2011, 22:22

В любои случае если чистую камеру подключить через RoboRealm то выдает до 5 кадров если еще и AVM Navigator запустить то еще медленне все. Потому я вышел из положения вышеописанным способом, где можно и частоту кадров менять
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович


Вернуться в Алгоритмы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8