Захват изображения с веб-камеры в Delphi

Я ищу способ захвата изображений с моей веб-камеры с помощью DirectShow, предпочтительно я хочу использовать разрешения HD, если это возможно, и избегать скачков ЦП на 60-100%.

может кто-то стрелять в правильном направлении о том, как это сделать?

Я попытался использовать DSPack, но этот компонент делает мой процессор всплеском 90-100%

если бы кто-то здесь знал, как использовать DSPack с меньшим энергопотреблением процессора, я тоже был бы рад этому:)

2 ответа

Решение

Я давно использовал dspack на дешевых машинах, встроенных в машины. У них медленные ~700 МГц процессоры VIA (одноядерные) и 256 МБ оперативной памяти.

Приложение захватывает 12 изображений в секунду с камеры на крыше автомобиля, и каждый раз, когда появляется новое GPS-положение (раз в секунду), оно добавляет координаты к изображению и сохраняет его в формате.jpg на жестком диске.

Когда приложение захватывает изображения и показывает изображения в форме без создания изображений.jpg, приложение занимает около 5% времени процессора (!).

Если вы получаете 90% процессорного времени с DsPack, это, вероятно, из-за дополнительной обработки изображений.

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

У меня есть видеоприложение в реальном времени, которое использует Mitov's VideoLibrary. Это набор объектов, которые хорошо спроектированы, имеют многопоточность и используют все доступные ядра ЦП.

Когда я иду в его библиотеку с какой-то новой потребностью, я обычно приятно удивлен, увидев, что он ожидал этого. Поддержка была очень хорошей.

Это не дешево: 450 долларов, но для моих нужд стоило каждого копейки. Это бесплатно для некоммерческого использования: http://www.mitov.com/html/videolab.html.

Его демонстрация CaptureBitMap захватывает последовательные кадры в растровое изображение. Вы просто добавляете в форму несколько компонентов и пишете шесть строк кода! В библиотеке есть много хуков, чтобы пойти дальше, чем этот простой пример. (В Win 7, Delphi 2010, демоверсии устанавливаются здесь: C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\LabPacks\Demos\Delphi2010\VideoLab\CaptureBitmap. Но я знаю, что он поддерживает еще в Delphi 7.)

Отличительной особенностью его библиотеки является то, что она использует библиотеки Intel IPP: http://software.intel.com/en-us/articles/intel-ipp. При работе на чипсетах Intel, если вы решите поставлять DLL-библиотеки Intel, вы получите наилучшую производительность, которую инженеры Intel могли бы выжать из своих чипов. Если библиотека Митова с IPP не может обработать ваше видео достаточно быстро, я был бы удивлен, если какая-либо видео библиотека может.

Митов имеет некоторый авторитет в сообществе Delphi: он был докладчиком по многопоточности в CodeRage: http://www.embarcadero.com/coderage5/sessions (четверг сессия).

Вышесказанное может звучать так, будто я шил для его компании. Я не имею никаких отношений, кроме как очень довольный лицензиат. Я просто очень рад (и с облегчением), что нашел его инструменты и решил использовать их.

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