дети шпионов!
Доброго времени суток!!!
Как и обещал , что напишу по веб камере и видео захвату (в принципе нам не важно что из них конкретно, так как подход един )
начнем..... ждя начала нам необходимы будут компоненты...
VideoLab и VisionLab,откуда они появились у меня я не помню... а вам нашел ссылку http://www.vanixshare.com/folder/8ca...tem=rapidshare
вроде тут есть все что нужно!
сегодня мы будем делать детектор движения! (не думайте что это очень сложно,у нас есть почти все готовое!!)
итак предположим что мы все скачали и установили компоненты в делфи)) (насколько помню с установкой компонентов приключений не возникало!)
открываем Delphi и создаем новое приложение...
из вкладки VideoLab бросаем на форму: VLDSCapture1 (сам видео захват), VLGenericFilter1 (фильтр для обработки данных), VLDSVideoPreviewDock1 (дисплей для просмотра сигнала с захвата), VLImageDisplay1 (дисплей для вывода результатов работы детектора движения)
из вкладки VisionLab: VLMotionDetect1 (сам детектор движения)
из вкладки Standart: MainMenu1 (основное меню)
из вкладки Additional: StringGrid1 (сетка для отображение "весовых коэффициентов движения")
вроде все что надо...
теперь начнем настраивать....
VLDSCapture1:
в VideoPreview указываем компонент VLDSVideoPreviewDock1 , Enable перещелкиваем на TRUE; (указываем захвату куда отправлять видео!)
VLGenericFilter1:
SyncronizeType указваем stSingleBuffer (изпользвать одиночный буфер для обработки)
InuptPin выбираем VLMotionDetect1.MotionOutputPin (подключаем виртуальный штекер от "выхода" компонента детектора движения ко "входу" фильтру)
VLDSVideoPreviewDock1:
здесь только Stretch меняем на True (указваем дисплею растягиватьсжимать картинку по размерам самого дисплея)
VLImageDisplay1:
InputPin выбираем VLMotionDetect1.MotionOutputPin (подключаем виртуальный штекер от "выхода" компонента детектора движения на "вход" дисплея)
VLMotionDetect1 :
InputPin выбираем VLDSCapture1.OutputPin (подключаем виртуальный штекер от "выхода" компонента захвата на "вход" детектора движения)
SyncronizeType указваем stSingleBuffer (изпользвать одиночный буфер для обработки)
MainMenu1:
здесь создаем одно кнопу! назавем ее "выбрать источник видео"
StringGrid1:
здесь ,в принципе, только "косметика", убераем обрамление BorderStyle->bsNone , и FixedCols и FixedRows =0
так... с настройками закончили!
начинаеться самое сладкое!))) (его сегодня вообще дифицит =( )
щелкаем на созданной нами кнопке MainMenu1 и в обработчике пишем следующее:
| Код |
vldscapture1.VideoCaptureDevice.ShowDeviceSelctDialog; //будем выбирать устройство захвата
vldscapture1.Enabled:=true;
vldscapture1.Start; //включаем завхат
form1.Caption:='fps='+IntToStr(vldscapture1.FrameRate.InstanceSize); // в caption будет количество fps
vlmotiondetect1.Enabled:=true; //включаем детектор движения
|
дальше идем к фильтру! щелкаем на нем 2 раза и пишем:
| Код |
var
I, J : Integer; //с помошью них будем считать кол-во столбцов и строк и обращаться к ним
begin
stringGrid1.ColCount := VLMotionDetect1.MotionGrid.Cols; //создаем
stringGrid1.RowCount := VLMotionDetect1.MotionGrid.Rows; //соответствие
for I := 0 to StringGrid1.ColCount - 1 do
for J := 0 to StringGrid1.RowCount - 1 do
begin
stringGrid1.Cells[ I, J ] := IntToStr( VLMotionDetect1.Items[ I, J ] ); //заполняем StringGrid весовыми коэфициентами движения
end;
|
и допишем немного на случай закрытия приложения:
| Код |
vldscapture1.Stop; //тушим
vldscapture1.Enabled:=false; //захват
vlmotiondetect1.Enabled:=false; //и детектор движения
|
p.s.: чуть не забыл..... вы можете менять размеры "сетки движения" изменив своиства VLMotionDetect1.motionGrid.Cols и Rows соответственно!
ну вот в принципе и все!..немного дописав это приложение(например выставить "порог" и поставить на него звуковую сигнализацию!) можно решать вполне серьезные задачи!))))
АттАч
© Made by edevil 2008