roboforum.ru

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

MR3020 + MJPG-Streamer + OpenCV

MR3020 + MJPG-Streamer + OpenCV

d00m » 21 янв 2013, 18:19

всем привет.
я видел, подобные тему тут уже есть, но решил создать новую так как в ней попытаюсь выяснить и оформить все аспекты сабжа.
надеюсь мне в этом помогут все знающие форумчане.

вобщем у меня ситуация наверное обычная - я наигрался в доволь с pan-tilt камерой прикрученной к MR3020 через arduino и пару сервов и теперь хочу научить ее следить за какимто движущимся объектом. Поиски решения привели меня сюда.
Я уже понял, что нужно использовать OpenCV - это софт который должен получать изображения из некого источника, обрабатывать и анализировать его какимто образом, для опеределения искомого изображения.
Далее нужен софт который на основе полученной информации должен управлять сервами через ардуино - центрировать камеру на изображении.
Причем, с учетом того, что MR3020 достаточно слабый девайс, на нем не получится полноценно реализовать распознавание изображения. К тому же, насколько я пока понял, OpenCV умеет обрабатывать видео из камеры, которая подключена непосредственно к компьютеру, на котором установлен этот OpenCV.
у меня же задача "скормить" на обработку OpenCV видео, которое стримает MR3020 с помощью mjpg-streamer и оно доступно в виде URL.
Судя по всему это можно сделать, но что конкретно нужно сделать - я пока не пойму.
Буду рад дельным советам.
У меня есть комп с Ubuntu 12 на котором я хочу установить OpenCV и передавать ему на обработку этот стрим из MR3020.
Далее из этого компа нужно отправлять команды для arduino - это наверное будет проще. У меня есть чтото вроде странички с отображением видео + несколько контролов для управления сервами.
Главное научится передавать видео в OpenCV и обрабатывать его.
Прошу совета.

Re: MR3020 + MJPG-Streamer + OpenCV

elmot » 21 янв 2013, 20:00

Из mjpeg-streamer можно получить не только поток, но и просто отдельный кадр, что для видеообработки актуальнее. Надо обратиться по url http://<ip>:<port>?action=snapshot и получить оттуда одиночный jpg файл

Re: MR3020 + MJPG-Streamer + OpenCV

d00m » 21 янв 2013, 20:12

спасибо ! я это видел в смежных темах..
видимо OpenCV будет "дергать" такие снапшоты достаточно часто, чтобы face-tracking был в более менее реальном времени..

Я бы хотел еще попросить рассказать как настроить такую связку.. сам environment..
достаточно ли скачать тарбол с OpenCV на Linux или нужно качать исходники и компилировать ?
просто нигде не вижу такого пошагового мануала, как начинать работу в этой системе..

Re: MR3020 + MJPG-Streamer + OpenCV

noonv » 21 янв 2013, 21:35

можно ставить готовые либы, но если есть желание, то можно и скомпилировать :)
мануалы тут, класс для OpenCV для захвата mjpg-streamer тут, а пример реализации компьютерного зрения на самом роутере здесь ;)

Re: MR3020 + MJPG-Streamer + OpenCV

d00m » 22 янв 2013, 01:17

а разве есть для Linux чтото готовое ? я вот счас чтото компилирую.. надеюсь скоро закончится.
и что нужно сделать с этим классом (кстати со странички по ссылке скачивать вроде нечего) ?
про tinyсv я читал уже, но совсем не понял как это можно применить в моем случае.. тем более это на роутере.. он де слабый для таких задач..

или я неправильно полагаю, что можно запустить на MR3020 mjpg-streamer, а на linux машине с установленным OpenCV ловить этот стрим по вебу и обрабатывать его на этом же компе (он же мощнее !), а после обработки уже принимать решение куда поворачивать камеру и отправлять команды на MR3020->arduino тоже по сети.
Нужны детали, конкретика.. что куда подставить чтобы заработало хоть както, ибо я пока не могу понять концепцию этой магии..

Re: MR3020 + MJPG-Streamer + OpenCV

elmot » 22 янв 2013, 01:24

d00m писал(а):тем более это на роутере..

На роутере - дохлый номер. Мозгов мало слишком, слишком медленный проц и мало памяти. Распберри, которая быстрее в 2-3 раза и то еле шевелится под opencv.

Re: MR3020 + MJPG-Streamer + OpenCV

noonv » 22 янв 2013, 08:13

d00m писал(а):а разве есть для Linux чтото готовое ?

разумеется, уже есть готовые пакеты
d00m писал(а):и что нужно сделать с этим классом (кстати со странички по ссылке скачивать вроде нечего) ?

гм... его можно использовать - в скачивание я ничего не забрасывал, но в исходниках есть ;)

d00m писал(а): запустить на MR3020 mjpg-streamer, а на linux машине с установленным OpenCV ловить этот стрим по вебу и обрабатывать его на этом же компе (он же мощнее !), а после обработки уже принимать решение куда поворачивать камеру и отправлять команды на MR3020->arduino тоже по сети.

да, именно так.

Re: MR3020 + MJPG-Streamer + OpenCV

d00m » 23 янв 2013, 14:03

гм... его можно использовать - в скачивание я ничего не забрасывал, но в исходниках есть


я не могу найти эти исходники.
и как его нужно использовать ? можешь объяснить по человечески ?

Re: MR3020 + MJPG-Streamer + OpenCV

noonv » 23 янв 2013, 18:16

d00m писал(а):я не могу найти эти исходники.

вот заголовочный файл, вот cpp-ник.
а вот пример использования :)

Re: MR3020 + MJPG-Streamer + OpenCV

d00m » 24 янв 2013, 00:39

аригато годзаимас ! (спасибо тоесть :) )

я так понял нужно сказать все три в один каталог и скомпилировать третий файл ?
я делаю это под Linux.. наверное опять нужно создать makefile..
а чем отличается video_capture_test2.cpp от video_capture_test.cpp ? :)

Добавлено спустя 19 минут 53 секунды:
#include "orv/orv.h"
и где брать этот хедер ?

Re: MR3020 + MJPG-Streamer + OpenCV

noonv » 24 янв 2013, 08:37

d00m писал(а):#include "orv/orv.h"
и где брать этот хедер ?

там же :)
хотя, можно и не тащить всю библиотеку, а взять только нужное для работы с MJPG-Streamer.

Re: MR3020 + MJPG-Streamer + OpenCV

d00m » 24 янв 2013, 12:49

чет пока не получается скомпилировать.
постоянно не хватает какихто хедеров.
видимо нужно все вместе скачать, иначе никак..

я сделал checkout всего репозитария.
каталог orv находится в include
поэтому для проверки компиляции просто записал ваши примеры туда же:
Код: Выделить всёРазвернуть
root@linux:~/opencv/openrobovision-read-only/OpenRoboVision/include# ls -la
total 32
drwxr-xr-x 3 root root 4096 Jan 24 12:56 .
drwxr-xr-x 9 root root 4096 Jan 24 12:38 ..
-rw-r--r-- 1 root root 6389 Dec 16 21:46 camera_mjpg.cpp
-rw-r--r-- 1 root root 3044 Dec 16 21:46 camera_mjpg.h
-rw-r--r-- 1 root root  240 Jan 22 22:24 Makefile
drwxr-xr-x 5 root root 4096 Jan 24 12:38 orv
-rw-r--r-- 1 root root 2301 Jan 24 12:41 test.cpp


test.cpp это ваш пример, я его переименовал для удобства - у меня makefile для него настроен:
Код: Выделить всёРазвернуть
root@linux:~/opencv/openrobovision-read-only/OpenRoboVision/include# cat Makefile
CC=g++
CFLAGS=-I/usr/local/include/opencv -L/usr/local/lib
OBJECTS=
LIBRARIES=-lopencv_core -lopencv_imgproc -lopencv_highgui

.PHONY: all clean

all:    test

test:
        $(CC) $(CFLAGS) -o test test.cpp $(LIBRARIES)

clean:
        rm -f *.o


ну делаю make и получаю странную ошибку:
Код: Выделить всёРазвернуть
root@linux:~/opencv/openrobovision-read-only/OpenRoboVision/include# make
g++ -I/usr/local/include/opencv -L/usr/local/lib -o test test.cpp -lopencv_core -lopencv_imgproc -lopencv_highgui
In file included from test.cpp:9:0:
orv/vision/camera_mjpg.h:14:32: fatal error: orv/system/network.h: No such file or directory
compilation terminated.
make: *** [test] Error 1


как видите - в хедере camera_mjpg.h инклюдается network.h с неверным path относительно себя:
Код: Выделить всёРазвернуть
#include "orv/system/network.h"


хотя файл camera_mjpg.h сам находится в orv..
чет я не пойму как оно все собирается вместе..

Re: MR3020 + MJPG-Streamer + OpenCV

noonv » 24 янв 2013, 14:01

если удалось скачать все исходники, то там уже есть мейкфайлы.
examples никуда перемещать не требуется - нужно перейти в тот каталог и выполнить make
так просто переместить файлы camera_mjpg.* не получится - там же есть зависимость от класса Socket и базового класса :)

Re: MR3020 + MJPG-Streamer + OpenCV

d00m » 24 янв 2013, 16:24

аа. я то думал, что достаточно скачать ваши примеры (те три файла что были выше) и их получится скомпилировать..

ну кстати и компиляция в каталоге examples не проходит, заканчивается на этом:

root@linux:~/opencv/openrobovision-read-only/OpenRoboVision/examples# make
make -C ..
make[1]: Entering directory `/root/opencv/openrobovision-read-only/OpenRoboVision'
make -C ./src
make[2]: Entering directory `/root/opencv/openrobovision-read-only/OpenRoboVision/src'
make -C ./system
make[3]: Entering directory `/root/opencv/openrobovision-read-only/OpenRoboVision/src/system'
g++ -I. -I../../include -I../../include/system -DLINUX=1 -c -o config_parser.o config_parser.cpp -lpthread -lrt
g++ -I. -I../../include -I../../include/system -DLINUX=1 -c -o console.o console.cpp -lpthread -lrt
g++ -I. -I../../include -I../../include/system -DLINUX=1 -c -o crypto.o crypto.cpp -lpthread -lrt
g++ -I. -I../../include -I../../include/system -DLINUX=1 -c -o log.o log.cpp -lpthread -lrt
g++ -I. -I../../include -I../../include/system -DLINUX=1 -c -o mutex.o mutex.cpp -lpthread -lrt

...............

test_videoreader.cpp:7:17: fatal error: orv.h: No such file or directory
compilation terminated.
make: *** [test_videoreader.o] Error 1

специально удалил и заново сделал чекаут
svn checkout http://openrobovision.googlecode.com/svn/trunk/ openrobovision-read-only

Добавлено спустя 13 минут 37 секунд:
хотя вроде чтото собирается.. появились какието бинарники..
но как раз video_capture_test и video_capture_test2 не скомпилировались ) это наверное карма ))

Re: MR3020 + MJPG-Streamer + OpenCV

noonv » 24 янв 2013, 17:07

угу - мой косяк :)
просто отредактируйте test_videoreader.cpp и замените #include "orv.h" на #include "orv/orv.h"
или ещё проще - наберите make video_capture_test2.cpp


Rambler\'s Top100 Mail.ru counter