LINUX.ORG.RU

2 камеры OpenCV


0

1

Задача такая: необходимо реализовать одновременную работу двух камер (одинаковых). Программирую на Visual C++ 2008 с использованием библиотеки OpenCV 2.4, но в принципе это НЕ ПРИНЦИПИАЛЬНО. Проблема в том, что функция cvcreatecameracapture не видит две камеры одновременно, т.е. capture1=cvcreatecameracapture(0); // видит capture2=cvcreatecameracapture(1); // не видит Доступ к второй камере появляется только после освобождения первой. Может кто сталкивался с такой проблемой, будет полезна любая информация

Ответ на: комментарий от PolarFox

Пробовал менять. Результат не изменился. Одновременно камеры не видит

evgen55
() автор топика
Ответ на: комментарий от MiniRoboDancer

да, это принципиально зависит от системы.

читал, что для винды популярны всякие сторонние системы видеодрайверов.

psv1967 ★★★★★
()

Чисто теоретически (я не знаком с usb, буду выдумывать). Если две камеры на одной usb-шине, то им может не хватать пропускной способности. Первая камера резервирует для себя пропускную способность шины, при открытии второй - оставшейся пропускной способности не хватает. Нужно подсоединить камеры на разные контроллеры (шины), либо брать с камеры картинку поменьше или посильнее сжатую (h.264). Если камеры с микрофоном, а звук с них не нужен, то нужно отключить звук, чтобы под него не резервировалась полоса пропускания. Не знаю как, но слышал, люди и так делают. Надо с калькулятором посидеть и распланировать пропускную способность. Распределить все устройства (в т.ч. мышь и т.п.) по шинам, а то и добавить еще usb-контроллеров.

fopen ★★
()
Ответ на: комментарий от fopen

ARM, Debian Wheezy, хороший USB хаб, две камеры с MJPEG-ом (одна HD 1280x720, другая VGA), плюс 5! usb com-портов передающих в дуплексе по 128кбит/с каждый. Все работает одновременно и как положено.

ТС-у к вантузятникам.

dvl36
()
Ответ на: комментарий от bhfq

128кбит/с

Ага, может быть по 64 перданных по USB шине байта на каждый байт переданный по com-порту.

dvl36
()
Ответ на: комментарий от dvl36

О! А ведь MJPEG обычно на малой частоте кадров используют! На твой камент я вспомнил, что еще частоту кадров можно снизить. А совет брать сжатое видео - в урну. ТС ведь OpenCV использует. Ему сырое видео приятней будет.

fopen ★★
()
Ответ на: комментарий от fopen

А ведь MJPEG обычно на малой частоте кадров используют!

От камеры зависит. На моей Logitech C270 заявлено до 30fps в 1280x720. В реале наверное меньше, не замерял.

А совет брать сжатое видео - в урну. ТС ведь OpenCV использует. Ему сырое видео приятней будет.

Для современного вантузового тазика раскрутить jpeg это пыль. У меня ARM 1.2Ghz (UP, без FP) с детекторованием движения на базе motion справлялся с MJPEG-ом. В VGA, в HD не пробовал.

dvl36
()

Они от usb питаются? Может им не хватает.

anonymous
()
Ответ на: комментарий от dvl36

Для современного вантузового тазика раскрутить jpeg это пыль. У меня ARM 1.2Ghz (UP, без FP) с детекторованием движения на базе motion справлялся с MJPEG-ом. В VGA, в HD не пробовал.

Дело не в декодировании жипега, а в том, что сжатие с потерями вносит искажения, которые могут быть существенны для алгоритмов OpenCV.

Kosyak ★★★★
()
Ответ на: комментарий от Kosyak

которые могут быть существенны для алгоритмов OpenCV.

А могут и не быть. BTW качество jpeg-ов с камеры можно менять.

Что гатать то? ТС пропал куда-то, ему, видимо, не нужно.

dvl36
()
Ответ на: комментарий от Kosyak

Добавлю

Для передачи с камеры по USB используется изохронная передача, без гарантии передачи. Если USB пакет побьется по дороге никто его перепосылать не будет. И изображение уже не будет полноценным. Линзы камеры тоже могут покрыться пылью в конце концов. Не думаю что в таких условиях jpeg компрессия будет иметь существенное влияние на функциональность.

dvl36
()

Если биос позволит, можно попробовать переключить USB в 1.1

GAMer ★★★★★
()
Ответ на: комментарий от Harald

на винде куча драйверов для usb камер. когда камер несколько, все вменяемые люди в опенцв используют средства захвата из этих драйверов. это легко находится на форумах у виндузятников.

что еще тебе объяснить?

можешь еще поделится сколько камер тебе удалось запустить одновременно в опенцв в рамках одного процесса? мне четыре под линуксом.

psv1967 ★★★★★
()

Спасибо большое всем за советы. Проблема была решена путем уменьшение разрешения камер (что в принципе не желательно) + снижением частоты кадров. Если будут какие нибудь идеи как можно заставить их работать одновременно не снижая разрешения, пишите не откажусь от помощи

evgen55
() автор топика
Ответ на: комментарий от evgen55

Если будут какие нибудь идеи как можно заставить их работать одновременно не снижая разрешения

Повесь камеры на разные USB-хосты. Отключи «лишние» USB-устройства, в т.ч. аудио с камеры. Продувай MJPEG.

dvl36
()

На заметку: вместо DirectShow на оффтопике можно использовать обертку videoInput. IIRC у граббера OpenCV на оффтопике были проблемы с потоками.

gv
()

Используйте с++ интерфейс:

#include <opencv2/opencv.hpp>
int main() 
{
    cv::VideoCapture cap_0(0);
    cv::VideoCapture cap_1(1);

    cv::Mat image0;
    cv::Mat image1;

    cap_0 >> image0;
    cap_1 >> image1;

    cv::imshow("image#0", image0);
    cv::imshow("image#1", image1);
    cv::waitKey(0);
}

P.S. Компилируемость не проверял ...

AoD314
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.