Перейти к содержимому
Compvision.ru
RinOS

Работа с камерами

Recommended Posts

скачал программу, вернее прект (пост №159 на 8 стр.) и при компиляции выдает ошибку error C3861: 'floor': identifier not found. покопался в коде так и несмог понять где эта штука потерялась. упоминание в коде нашел, а что это и откуда берется неясно. использую MSVisual Studio 2008. подскажите пожалуйста!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день.

Интересует следующий вопрос.

Будут ли корректно работать две программы на основе opencv в режиме одновременного захвата видеопотока с одной web-камеры? Кто-нибудь так делал?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня примеры не работают одновременно, если очень нужна такая схема, то можно попробовать так, как здесь:

http://www.compvision.ru/forum/index.php?showtopic=1193

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня примеры не работают одновременно, если очень нужна такая схема, то можно попробовать так, как здесь:

http://www.compvision.ru/forum/index.php?showtopic=1193

Отлично, спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток
Можно ли настроить web камеру(немного изменяется изображение через программу) с помощью openCV для трансляции как Ip камера?.
Visual Studio 2010,C++, OpenCV 2.3


Нашел такой пример:
https://www.medialan.de/usecase0001.html#Running
 

Как я понял в JPEGSamples.cpp лежат образцы, они не в виде изображений?реально ли переправить на работу с openCV?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Сработает ли вариант ли вариант преобразование в jpeg и преобразования jpeg в массив? По идее образцы и есть массивы...

Нашел такой пример.
https://www.cs.utexas.edu/~teammco/misc/udp_video/

Код далеко не весь... Даже пример не работает после сборки.

Взял за основу
http://www.cyberforum.ru/cpp-networks/thread815103.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте! Есть IP камера видео передаётся через rtsp вставляю ссылку в vlc и всё работает...  абсолютно такая же строка но при коннекте камеры через opencv ничго не происходит... вернее самого конекта не происходит... формат строки rtsp://x.x.x.x:PORT при связывании через vlc видео показывает...

.....................
VideoCapture cap;
cap.open(filename);//filename - строка конекта
............................

он даже его не открывает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

что-то непонятно... сейчас явно гружу opencv_ffmpeg2410_64.dll но видео не идёт.. 

есть метод open в файле cap_ffmpeg.cpp

    virtual bool open( const char* filename )
    {
        icvInitFFMPEG::Init();
        close();

        if( !icvCreateFileCapture_FFMPEG_p )
            return false;
        ffmpegCapture = icvCreateFileCapture_FFMPEG_p( filename );
        return ffmpegCapture != 0;
    }


ffmpegCapture = icvCreateFileCapture_FFMPEG_p( filename );

эта строка похоже как-то некорректно отрабатывает filename корректный, а связать она почему-то не может..

выводит следующее сообщение

1.1435602135.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем привет!

Есть вопрос. OpenCV позволяет считать с web камеры заводской номер?

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

Или может можно как-то еще идентифицировать кокретную камеру?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну так PID/VID гуглите и libusb . Не заводской номер конечно, но большего я думаю можно добиться только через драйвер (если заводской номер там вообще вытаскивается).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый вечер. Уважаемые Форумчане подскажите как устранить ошибку чтения с камеры. работаю с камерами Arecont Vision. Получаю видео через Visual Studio10 + OpenCv:

#include "stdafx.h" 
#include <c:/opencv/build/include/opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
  int c;  
  IplImage *img;                                
   CvCapture* capture  = cvCaptureFromFile("http://192.168.104.13:8080/video1x.mjpeg");
  cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);    
  cvMoveWindow("mainWin", 5, 5);                
  while(1)
  {    
    img=cvQueryFrame(capture);       
    cvShowImage("mainWin", img );   
    c=cvWaitKey(10);              
    if(c == 27)    
    break;
  }
 return 0;
}

пишет ошибку кодировки файла, пробовал получать через const std::string videoStreamAddress = "rtsp://192.168.104.13:8080"; то же самое. Я так полагаю во встроенyом в OpenCv ffmpeg -  нет чтения mjpeg файлов, причем cvCaptureFromFile("C:/Film/video1.avi") - читает, а  cvCaptureFromFile("C:/Film/video1.mjpeg") - нет.  Может кто-нибудь знает как решить данную проблему? 

    

pic1.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте. Столкнулся с такой проблемой, что не могу отключить автоматическое усиление и вручную устанавливать усиление и экспозицию в камере с помощью cvSetCaptureProperty, функция возвращает 0. Попробовал считать все возможные параметры камеры через cvGetCaptureProperty, в результате осмысленные значения только для размеров кадра и кадровой частоты, остальные возвращает 0. Камера USB, Win7. Фирменная программа позволяет менять настройки, а из opencv никак. Может кто сталкивался с таким ? Спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Посмотрите здесь: 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем привет!

Возникла такая странная ситуация:

-есть ноутбук, на нем стоит две ОС Win7 x64

-на ноутбуке под обоими ОС успешно работала моя программа по обработке изображения с камеры. Работаю с камерой logitech, а штатную камеру ноутбука не использую.

-возникла необходимость на одной из систем установить ms visual studio 2012 и opencv 2.4.9. Все успешно установилось, попробовал скомпилировать и запустить тестовый пример: компиляция прошла успешно, но при запуске программы должно появляться окно с изображением с камеры и в списке окон оно есть, но ни окна ни изображения на экране не появляется. Эта ситуация возникает и для штатной камеры ноутбука. Однако, через драйвер Logitech к камере удается подключиться и через него работать

- под другой ОС (где ничего нового не устанавливал), все работает нормально

 

У кого-то были подобные проблемы?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте

Реализую задачу захвата статического изображения с камеры для последующей обработки

Камера PNM-IP4-V12 от Поливижион. MJPEG поток в ней не смог найти. Только H264

Захват делаю cvCaptureFromFile("rtsp://адрес:554/user=имя&password=пароль&channel=1&stream=0?.sdp")

При этом через раз теряется половина кадра картинки. Может быть есть другие более правильные способы работы с потоком H264?

Или покопать в другую сторону?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возможно, не хватает процессора на декодирование. Я бы проверил обычным ffplay с такими же параметрами: проигрывается нормально? И убедился бы при этом, что OpenCV также использует ffmpeg.

Если на оба вопроса ответ "да", то надо делать видеозахват самому на том же ffmpeg или другой библиотеке. Дело в том, что ffplay использует многопоточность с тремя потоками: поток для сети и очередь пакетов из сети, поток на декодирование и очередь сырых кадров, поток на отображение. OpenCV всё делает в одном потоке и тормоза в одном месте могут привести к потере пакетов.

И ещё ffplay отображает через SDL напрямую исходные YUV кадры, а OpenCV вызывает внутри себя sw_scale с конвертацией в RGB. Что по понятным причинам дополнительно загружает процесс.

Это раз. И два: а пропускной способности сети точно хватает? Если есть возможность снизить битрейт и поставить реже частоту ключевых кадров (I frame), то стоит проверить и это.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Была такая же проблема, помогла установка частоты опорных кадров на 1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это так себе способ, убивает все достоинства h.264. Лучше научиться нормально с ним работать. А то вдруг может оказаться, что сеть не пропускает видео.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте! Проблема с фпс, кто сталкивался?

Я новичок пока что в деле компьютерного видения. Есть камеры usb 2.0, которые дают 330 фпс, virtualdub подтверждает, но в opencv выжать больше 192 не получилось на 2ой версии, а на 3 даже 90 еле еле, нагрузка на процессор 50%, что может быть? Гуглил, французы пришли к выводу, что на 3 версии не mjpeg захватывается, поэтому. Но на 2ой пишут, что должны 330. Если выводить на экран, то 60 фпс, система Windows 10, ide visual studio 15

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я так понимаю, что тут 2 вопроса: почему не 330 захватывается и почему только 60 выводится.

Захват осуществляется не самой OpenCV, который выступает исключительно в виде фронтэнда в этом случае, а с помощью одного из используемых бэкэндов. Надо узнать, что это за бэкэнд! Думаю, что для web-камер под Windows используется DirectShow или vfw. Классический VirtualDub использует vfw, скорее всего OpenCV 2 также. Отсюда и высокий fps.

Предположу, что OpenCV 3 использует уже DirectShow, поэтому получается медленнее. Можно взять VirtualDub DirectShow mod, лучше просто GraphEdit и проверить что да как. В GraphEdit можно и подобрать правильные фильтры/муксеры/декодеры для получения максимального fps. Посмотреть в стороны DXVA2.

Ну и узнать в конце-концов, чем декодирует OpenCV и где тормоза с помощью профайлера. Всё таки библиотека опенсорсная, надо пользоваться этим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, Nuzhny сказал:

Я так понимаю, что тут 2 вопроса: почему не 330 захватывается и почему только 60 выводится.

Захват осуществляется не самой OpenCV, который выступает исключительно в виде фронтэнда в этом случае, а с помощью одного из используемых бэкэндов. Надо узнать, что это за бэкэнд! Думаю, что для web-камер под Windows используется DirectShow или vfw. Классический VirtualDub использует vfw, скорее всего OpenCV 2 также. Отсюда и высокий fps.

Предположу, что OpenCV 3 использует уже DirectShow, поэтому получается медленнее. Можно взять VirtualDub DirectShow mod, лучше просто GraphEdit и проверить что да как. В GraphEdit можно и подобрать правильные фильтры/муксеры/декодеры для получения максимального fps. Посмотреть в стороны DXVA2.

Ну и узнать в конце-концов, чем декодирует OpenCV и где тормоза с помощью профайлера. Всё таки библиотека опенсорсная, надо пользоваться этим.

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

Цитата

подобрать правильные фильтры/муксеры/декодеры

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Думаю, что для получения такого высокого fps всё равно прийдётся разбираться с захватом видео на низком уровне.

Почему DirectShow может тормозить? Потому что там может стоять не только Frame grabber, но и несколько других фильтров, которые в обычных условиях практически не дают дополнительной нагрузки, немного улучшая качество видео. А это дополнительные копирования памяти.

Какое разрешение видео? Если FullHD, то при 330 fps и кадре RGB мы получим поток: 3 байт/пиксель * 1920 * 1080 * 330 = 2 Гбайта/сек. Многовато? Да. С такими объёмами надо минимизировать количество копирований и выделения памяти любыми способами.

Чем декодируется видео? Аппаратным декодером или программным? Надо убедиться, что аппаратным.

Почему древний vfw может быть быстрее DirectShow? Потому что он ничего не умеет, кроме самых базовых вещей, вот и работает быстрее.

Копирует ли OpenCV внутри себя память, когда он выдаёт наружу cv::Mat? Да, копирует, а это лишнее.

Поможет ли Линукс и/или более мощный комп? Может помочь, а может и нет, зависит от причины тормозов.

Я бы всё таки начал с GraphEdit и посмотрел на результат.

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

По поводу объемов данных. Объем не более 480 мбит/c, потому что подключение Usb 2.0, я запускал вашу программу cameracontrol, она дает такие данные:

Размер: x=640   y=360   FPS: 330        битрейт: 1 824 768 000     бит/пиксель:24

И еще пока только одна камера подключена, а использовать две буду, а в боевой версии возможно переход будет на usb 3.0 и большее разрешение, fps, тоесть до 5 ГБ/сек.

 

GraphEdit  идет с sdk, а sdk с visalstudio? пока не понял как установить, по идее он уже должен быть, он есть в бесплатной версии visualstudio?

image.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×