Использование emguCV (OpenCV) для захвата видео в 2 разных программах с камеры FireWire?

Я ищу способ использовать OpenCV (или, в частности, emguCV в C#) для захвата видео с одного и того же firewire на 2 разных программах одновременно. В некоторых сообщениях здесь говорится, что это невозможно, поскольку исходный драйвер будет одновременно заблокирован в одном приложении.

Я нашел здесь несколько ответов, предлагающих использовать SplitCam, но, похоже, он работает только с веб-камерой. Также мне не нравятся объявления на SplitCam (но я не могу пожаловаться, так как это бесплатная программа).

SplitCam, кажется, использует источник сигнала и создает виртуальный драйвер для использования другими программами. Есть ли способ сделать то же самое, что SplitCam делает с помощью OpenCV? OpenCV может получить доступ к камере FireWire, и у меня нет проблем с ее использованием в emguCV с одной запущенной программой.

1 ответ

Поискав некоторое время, я нашел 2 разных решения.

1) Реализовать DirectShow Virtual Video Capture Source Filter. Этот проект хорошо документирован в CodeProject. Этот метод требует некоторого изучения, так как я немного знаю о DirectShow.

2) Используйте сторонний компонент. Я нашел один из e2esoft, который работает как SplitCam, но это SDK, который вы можете использовать в своем собственном проекте. У них уже есть пример CSharp. У меня действительно была небольшая проблема (ошибка 80040154) с использованием COM-объекта, предоставленного в этом примере, так как это 32-битный COM-объект, но я использую 64-битную Windows 7. Я нашел здесь способ использования взлома реестра,

Я закончил с решением № 2, так как это легко реализовать быстро. Я использую компонент для создания виртуального устройства, которое захватывает видео с основного устройства камеры FireWire. После этого моя программа, которая использует emguCV для захвата кадра, может просто получить виртуальное устройство. Виртуальное устройство может использоваться несколькими источниками, и до сих пор у меня есть 3 случая захвата моей программы с виртуального устройства, и я не вижу какой-либо задержки в частоте кадров (при условии, что эта FireWire-камера работает только с максимальной скоростью 15FPS). Недостатком этого решения является то, что мне придется заплатить за лицензию, чтобы избавиться от водяного знака на видео. Я обновлю это, когда узнаю, сколько это стоит, так как они не публикуют цену SDK на сайте. Если это действительно дорого, мне придется перейти к первому решению и научиться внедрять фильтр DirectShow.

Изменить 1-16-2013: цена VCam SDK составляет $699.

Другие вопросы по тегам