Захват изображения с веб-камеры в 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 (четверг сессия).
Вышесказанное может звучать так, будто я шил для его компании. Я не имею никаких отношений, кроме как очень довольный лицензиат. Я просто очень рад (и с облегчением), что нашел его инструменты и решил использовать их.