RinOS 16 Report post Posted November 11, 2009 Видел в сети пример в котором показано как работать с IP камерой OpenCV и IP Axis, пример на С# c оберткой EMGU CV. Кто ни будь пытался работать с IP камерами на С++? Вот ссылка на ней можно по эксперементировать) http://webcam.oii.ox.ac.uk/mjpg/video.mjpg 1 Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted November 11, 2009 Кто ни будь пытался работать с IP камерами на С++? В OpenCV 1.1 есть cvCreateFileCapture_FFMPEG в _highgui.h, но он там закомментирован. Надо раскомментировать, перекомпилилировать highgui.dll. Посмотреть на ошибки линкера и попробовать с ними разобраться. У меня пока нет времени на это, может быть вечером. Share this post Link to post Share on other sites
RinOS 16 Report post Posted November 11, 2009 На сайтах пишут что нужно перекомпилировать с FFMPEG... OpenCV can be compiled with FFMPEG support. From ./configure --help: --with-ffmpeg use ffmpeg libraries (see LICENSE) [automatic] You can then use *cvCreateFileCapture_FFMPEG* to create a CvCapture with e.g. the URL of the camera's MJPG stream. I use this to grab frames from an AXIS camera: CvCapture *capture = cvCreateFileCapture_FFMPEG("http://axis-cam/video.mjpg"); Share this post Link to post Share on other sites
RinOS 16 Report post Posted November 11, 2009 Закомментировал в коде #ifdef HAVE_FFMPEG #ifdef HAVE_FFMPEG CvCapture* cvCreateFileCapture_FFMPEG (const char* filename); CvVideoWriter* cvCreateVideoWriter_FFMPEG ( const char* filename, int fourcc, double fps, CvSize frameSize, int is_color ); #endif Линкер начал писать [Linker Error] Error: Unresolved external 'cvCreateFileCapture_FFMPEG(const char *)' referenced from C:\URL CAM\UNIT1.OBJ Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted November 11, 2009 Линкер начал писать [Linker Error] Error: Unresolved external 'cvCreateFileCapture_FFMPEG(const char *)' referenced from C:\URL CAM\UNIT1.OBJО, до ошибки линкера ты уже дошёл! В OpenCV 2.0 уже есть libopencv_ffmpeg200.dll. Share this post Link to post Share on other sites
RinOS 16 Report post Posted November 11, 2009 Вот сдесь: http://www.rainsoft.de/projects/ffmpeg_opencv.html пишут как включить поддержку FFMPEG в OpenCV, но под линукс( Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted November 11, 2009 Вот сдесь: http://www.rainsoft.de/projects/ffmpeg_opencv.html пишут как включить поддержку FFMPEG в OpenCV, но под линукс( Угу. В папке otherlibs есть проект ffopencv, который и выдаёт необходимую ffopencv110.dll, в которой и есть интересующая функция cvCaptureFromFile_FFMPEG. Только для успешной компиляции надо скачать исходники ffmpeg, скомпилировать и получить либы: libavformat.a, libavcodec.a, libavutil.a, libgcc.a, libmingwex.a. Это линуксовые аналоги lib-файлов. Однако макросы _MSC_VER в ffopencv.cpp дают надежду на компиляцию под Виндой. Мне, если честно, неохота возиться с этим делом. Если будешь пробовать - расскажи о результатах. Share this post Link to post Share on other sites
RinOS 16 Report post Posted November 12, 2009 В общем один из вариантов, получения видео такой: С помощью DirectShow, исключительно для камер Axis для других не пробывал. Скачиваем и устанавниваем Axis Video Capture Driver, в GraphEdit добавляем Axis MJPEG Capture Filter и выстраиваем следующую схему: После настраиваем Axis MJPEG Capture Filter: Проблема в том что я незнаю, как эту схему повторить для OpenCV, что бы просто работать с CvCapture, или хотя бы получать изображения как очередь IplImage. К тому же выходное видео имеет формат ASF. Что усложняет задачу. Другой способ более универсальный заключается в том что получать изображения в jpg, уж это умеют делать все камеры http://webcam.oii.ox.ac.uk/jpg/image.jpg Т.к. с C++ я пока на Вы, подскажите пожалуйста как просто получить файл по HTTP. Можно примерчик) 1 Share this post Link to post Share on other sites
RinOS 16 Report post Posted November 12, 2009 Через жесткий диск обмен это долго) Можно к примеру загрузить в буфер, но вот проблема как из буфера в IplImage )? Share this post Link to post Share on other sites
Smorodov 578 Report post Posted November 12, 2009 Через жесткий диск обмен это долго) Можно к примеру загрузить в буфер, но вот проблема как из буфера в IplImage )? Просто дать указатель на буфер (если принимаем IplImage или что то совместимое с ним) как здесь: http://www.compvision.ru/forum/index.php?showtopic=121 А вообще мне кажется что Вам лучше UDP протокол использовать (если я правильно понял, что это типа Ip-телефонии будет) в билдере этим компонент NMUDP занимается. Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted November 12, 2009 1. Скачал ffmpeg. 2. Поправил в ffopencv.cpp подключаемые либы на те, которые есть в скачанной ffmpeg. 3. В cvcap_ffmpeg.cpp исправил название функции с cvCreateFileCapture_FFMPEG на cvCaptureFromFile_FFMPEG. 4. В свойствах проекта ffopencv -> C|C++ -> Preprocessor -> Preprocessor Definitions добавил HAVE_FFMPEG и HAVE_FFMPEG_SWSCALE 5. Скомпилировал ffopencv 6. Перекомпилировал проект highgui 7. В своём проекте добавил инклуды ffopencv.h и _highgui.h, а также ffopencv.lib 8. Вызываю CvCapture *capture = cvCaptureFromFile_FFMPEG("c:\\video\\The Big Bang Theory (Season 3)\\the.big.bang.theory.s03e06.720p.hdtv.x264-ctu.mkv"); - проигрывается! 9. Все твои url с камерой нет. Вот. Share this post Link to post Share on other sites
RinOS 16 Report post Posted November 13, 2009 9. Все твои url с камерой нет. Возможно что то не так сделал... или у автора статьи OpenCV и IP Axis, по другому сделано. В общем я подумаю над этим) Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted November 13, 2009 Возможно что то не так сделал... или у автора статьи OpenCV и IP Axis, по другому сделано.Скорее всего так и есть, а может у меня дома интернет-канал слишком узкий. На работе запустил из командной строки ffplay.exe "http://webcam.oii.ox.ac.uk/mjpg/video.mjpg" - показывает. ffplay.exe скачал с того же сайта, той же версии, которую подключал к OpenCV. Все исходники остались дома - попробовать на работе свой вариант смогу только в понедельник. Share this post Link to post Share on other sites
RinOS 16 Report post Posted November 16, 2009 Вот так получаю jpg с IP камеры #include <urlmon.h> #include <wininet.h> IplImage* QueryFrame(char *sourceurl, AnsiString path) { try { DeleteUrlCacheEntry(PChar(sourceurl)); if (image) cvReleaseImage(&image); char* dstfile = AnsiString(path).c_str(); if (!(URLDownloadToFile(NULL, sourceurl, dstfile, 0, NULL) == S_OK)) return 0; image = cvLoadImage(dstfile, 1); return image; } catch (...) { return 0; } } Share this post Link to post Share on other sites
Arturchik 0 Report post Posted January 19, 2010 Здравствуйте! Имеется USB веб-камера Logitech (p/n: 861206-0000, m/n: v-uas14). Через программу с диска, идущего в комплекте, работает как положено. При попытке получить изображние с камеры средствами OpenCV, возникает проблема: изображение почти полностью темное, за икслючением только сильно освещенных областей. Пробовали на 2х одинаковых камерах, результат тот же. Пробовали все режимы работы с камерой в cvCreateCameraCapture. Третья камера, уже другого производителя, работает отлично. Подскажите, что это может быть: деффект камеры, драйверов, OpenCV не поддерживает устройство (довольно старая камера) или это типичная ошибка в настройках? Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted January 19, 2010 Вроде как OpenCV работает с камерой через DirectShow. Можно попробовать посмотреть изображение с камеры через graphedit и поиграть с настройками. Если получится получить нормальный видеопоток, то разбираться с OpenCV, иначе проблему следует искать в драйверах. Share this post Link to post Share on other sites
smoke 0 Report post Posted February 7, 2010 Всем привет! Прошу помощи в следующем вопросе. в процессе разработки отлаживался на компьютере с одной камерой все работало. подключение камеры было функцией m_Camera = cvCreateCameraCapture(0); думал что когда будут еще камеры нужно будет заменить идентификатор на 1 или 2 и так далее в зависимости от количесва камер и все будет работать. Но когда появилась еще камера оказалось что я ошибался. тоесть нужно например на компьютере 2 камеры нужно что бы в одной программе было видео с одной камеры а в другой программе видео с другой камеры. пробовал написать тестовый пример int i = -1; while(i++) { m_Camera = cvCreateCameraCapture(i); if (m_Camera) { //выводим идентификатор } if (i == 10000) { break; } } [/codebox] но он всегда выдет 0 даже если подключено 2 камеры драйвера для камер стоят. в других программах видео видется с обоих. в директории с программой лежат файлы highgui100.dll cxcore100.dll libguide40.dll что упустил или чего не дочитал? может что еще положить надо ? и есть еще одна проблема. скопировал программу на ноутбук там стоит встроенная камера sony visual communication camera vgp-vcc6 и когда запускаешь программу активация камеры проходит а вот картинка всегда черный квадрат. и изображение с камеры не появляется. в чем может быть проблема. все функции получения фрейма отрабатывают корректно. и возвражают уже черную картинку. Share this post Link to post Share on other sites
IGHOR 0 Report post Posted February 7, 2010 Сейчас тоже пишу программу для нескольких камер и тестировал только с одной камерой. попробуйте захват делать в отдельных трэдах на каждую камеру, я именно так собирался делать Share this post Link to post Share on other sites
smoke 0 Report post Posted February 7, 2010 Сейчас тоже пишу программу для нескольких камер и тестировал только с одной камерой. попробуйте захват делать в отдельных трэдах на каждую камеру, я именно так собирался делать так если в разных тредах делать захваты то суть проблемы от этого не изменится. я првильно понимаю что если к помьютеру подключено несколко камер не зависимо от того как их будем обрабатывать в одном потоке или в нескольких. и пустить цикл по фукнции инициализации то нам должны будут выдасться идентификаторы для всех камер подключенных к компьютеру. а у меня этого непроисходит. идентификторв сегда один. и выхватывает всегда одну камеру до других я не могу достучаться. Share this post Link to post Share on other sites
Smorodov 578 Report post Posted February 7, 2010 Могу только направить вас сюда: http://opencv.willowgarage.com/wiki/faq#Ho...ithcvCamlibrary Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted February 8, 2010 OpenCV 1.0 не поддерживает работу с несколькими камерами - сами разработчики на конференции Graphicon 2007 об этом говорили. Попробуй более новую версию библиотеки, возможно, что всё изменилось к лучшему. Share this post Link to post Share on other sites
smoke 0 Report post Posted February 9, 2010 OpenCV 1.0 не поддерживает работу с несколькими камерами - сами разработчики на конференции Graphicon 2007 об этом говорили. Попробуй более новую версию библиотеки, возможно, что всё изменилось к лучшему. Всем огромное спасибо за ответы. Nuzhny прав. пересобрав все под OpenCV 2.0 все заработало. и выбор камеры можно осуществлять как я и думал подбором id. но это решение работает не всегда тоесть время от времени появляются сбои вида. есть две программы одна работает с одной камерой другая с другой. одна с идентификатором 0 другая 1. бывает что запустишь программу и та которая была с идентификатором 1 запускает программу как будто это идентификатор 0. Буду пробовать решение которое предложил Smorodov. непосредственно с функциями для работы несколькими камерами. Еще раз всем спасибо за помощь. Share this post Link to post Share on other sites
RinOS 16 Report post Posted February 27, 2010 О сколько нам отрытий чудных... Совершенно случайно вместо cvCreateCameraCapture использовал cvCaptureFromCAM. И мне выдалось сообщение типа Axis Video not initialisation. И тут меня осенило В общем полез в GraphEdit настраивать "Axis Video Capture Driver", соединение с камерой Axis. И к моему глубочайшему удивлению мне удалось соедениться с камерой, вот так: Capture = cvCaptureFromCAM(0); Вот только возник другой вопрос, где храняться настройки и можно ли как то использовать больше одной камеры... Share this post Link to post Share on other sites
smoke 0 Report post Posted March 23, 2010 1. Скачал ffmpeg. 2. Поправил в ffopencv.cpp подключаемые либы на те, которые есть в скачанной ffmpeg. 3. В cvcap_ffmpeg.cpp исправил название функции с cvCreateFileCapture_FFMPEG на cvCaptureFromFile_FFMPEG. 4. В свойствах проекта ffopencv -> C|C++ -> Preprocessor -> Preprocessor Definitions добавил HAVE_FFMPEG и HAVE_FFMPEG_SWSCALE 5. Скомпилировал ffopencv 6. Перекомпилировал проект highgui 7. В своём проекте добавил инклуды ffopencv.h и _highgui.h, а также ffopencv.lib 8. Вызываю CvCapture *capture = cvCaptureFromFile_FFMPEG("c:\\video\\The Big Bang Theory (Season 3)\\the.big.bang.theory.s03e06.720p.hdtv.x264-ctu.mkv"); - проигрывается! 9. Все твои url с камерой нет. Вот. нужно тоже было получить изображение с IP Camera. Мысли совпали и делал примерно так же как описал Nuzhny мометы которые были выявленны может комуто понадобится.Так как на момент написания камеры небыло тренировался на интернет ссылках с камер Аксис и Планет и с прочих других работающих по протоколу мжпег. *важно что бы связь с инетом была очень хорошая и позволяла смотреть запись в реальном *работа функции очень добгая уходит от 5 до 15 секунд что бы cvCreateFileCapture_FFMPEG подключилась к видео потоку *работает не со всеми ссылками это действительно так чаще всего это происходит если ссылка заканчиваетя на cgi или .mjpeg?compression=60 или прочие параметры, но это лечится простым дописыванием необходимого расширения например http://site/xxx/xxx/video.cgi?.mjpg или http://site/xxx/xxx/.mjpeg?compression=60&.mjpg и большенство ссылок становятся съедобными *время от времени происходит зависание видео и приходится перезапускать функцию cvCreateFileCapture_FFMPEG но это думаю происходит из-за недо статочного канала связи Share this post Link to post Share on other sites
tybik 0 Report post Posted April 11, 2010 Добрый вечер. Подскажите пожалуйста, как мне получить список веб камер, чтоб была возможность выбрать одну из работающих в системе? Share this post Link to post Share on other sites