Разработка системы видеонаблюдения на базе компьютера с использованием Delphi 2012
Особенность установления системы видеонаблюдения при минимальных денежных вложениях в небольших магазинах. Анализ основных алгоритмов инициализации видеокамер и процедуры автоматического сохранения снимков. Установка компрессии сжатия изображений.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 02.02.2019 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
УДК 004.9
ТарГУ им. М.Х. Дулати
РАЗРАБОТКА СИСТЕМЫ ВИДЕОНАБЛЮДЕНИЯ НА БАЗЕ КОМПЬЮТЕРА С ИСПОЛЬЗОВАНИЕМ DELPHI 2012
Джунисбеков Т.М.
Шевцов А.Н.
В небольших магазинах, кафе, контрольно-пропускных пунктах, а также организациях часто требуется установить систему видеонаблюдения при минимальных денежных вложениях. В настоящее время ее можно построить как на основе специализированных устройств (видеорегистраторов, IP камер и др.) [1], так и на основе компьютера (web камер, видео камер). видеонаблюдение автоматический снимок изображение
Для начала создаем VCL Form Application, на форме раскладываем следующие компоненты: 4 - TPanel, TListBox, 3 - TTimer, 2 - TLabel, 2- SpinEdit1 и TCheckListBox1.
Добавляем следующие глобальные переменные:
var Form1: TForm1; IniFile: TIniFile; FileName: string; RecMode:boolean; DeviceName: OleVariant; PropertyName: IPropertyBag; pDevEnum: ICreateDEvEnum; pEnum:IEnumMoniker; pMoniker:IMoniker; MArray1: array of IMoniker; FGraphBuilder: array[1..4]of IGraphBuilder; FCaptureGraphBuilder:array[1..4]of ICaptureGraphBuilder2; FMux: array[1..4]of IBaseFilter; FSink: array[1..4]of IFileSinkFilter; FMediaControl: array[1..4]of IMediaControl; FVideoWindow:array[1..4]of IVideoWindow; FVideoCaptureFilter: array[1..4]of IBaseFilter; FAudioCaptureFilter: array[1..4]of IBaseFilter; FVideoRect: array[1..4]of TRect; FBaseFilter: array[1..4]of IBaseFilter; FSampleGrabber: array[1..4]of ISampleGrabber; MediaType: AM_MEDIA_TYPE; n,kk: integer; d,disk: string; bit1: tbitmap; |
//Это список моникеров, из которого мы потом будем получать необходмый моникер //Интерфейсы //Область вывода изображения |
В первом случае цена создания системы видеонаблюдения на 4 камеры колеблется в пределах 400-700 тысяч тенге. Во втором цена сложится из цены компьютера - 40-50 тысяч тенге 4 камер - 10 тысяч и программного обеспечения. Цена на хорошую программу для видео наблюдения лежит в пределах - 170-200 тысяч тенге [2]. В общем, расходы составят порядка 220-260 тысяч тенге. Но в своем большинстве даже и они не дают возможности работать в автоматическом режиме. В случае создания подобной программы пользователем, имеющим небольшие навыки работы с Delphi, общие расходы снизятся до стоимости компьютера и камер - 50-60 тысяч тенге. Напишем на Delphi простую и надежную программу для видеонаблюдения на 4 камеры (рис. 1).
Рис. 1. Окно программы и компоненты
Запишем основные алгоритмы инициализации видеокамер, а также процедуры автоматического сохранения снимков [3].
Разработанная программа (рис. 2) автоматически сохраняет изображение с 4 камер, в формате JPEG, добавляя текущее время и дату с периодичностью в 1 секунду. Настройки программы сводятся к установке компрессии сжатия изображений и установки количества дней для видео наблюдения. Одно изображение занимает на диске не более 200 кб, значит, архив на сутки займет не более 20 Гб.
function TForm1.Initializ: HResult; begin Result:=CoCreateInstance(CLSID_SystemDeviceEnum, NIL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, pDevEnum); if Result<>S_OK then EXIT; Result:=pDevEnum.CreateClassEnumerator(CLSID_VideoInputDeviceCategory, pEnum, 0); if Result<>S_OK then EXIT; setlength(MArray1,0); while (S_OK=pEnum.Next(1,pMoniker,Nil)) do begin setlength(MArray1,length(MArray1)+1); MArray1[length(MArray1)-1]:=pMoniker; Result:=pMoniker.BindToStorage(NIL, NIL, IPropertyBag, PropertyName); if FAILED(Result) then Continue; Result:=PropertyName.Read('FriendlyName', DeviceName, NIL); if FAILED(Result) then Continue; Listbox1.Items.Add(DeviceName); end; if ListBox1.Count=0 then begin ShowMessage('Камера не обнаружена'); Result:=E_FAIL;; Exit; end; Listbox1.ItemIndex:=-1; Result:=S_OK; end; function TForm1.CreateGraph(n:integer):HResult; var pConfigMux: IConfigAviMux; begin FVideoCaptureFilter[n]:= NIL; FVideoWindow[n]:= NIL; FMediaControl[n]:= NIL; FSampleGrabber[n]:= NIL; FBaseFilter[n]:= NIL; FCaptureGraphBuilder[n] := NIL; FGraphBuilder[n]:= NIL; Result:=CoCreateInstance(CLSID_FilterGraph, NIL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, FGraphBuilder[n]); if FAILED(Result) then EXIT; Result:=CoCreateInstance(CLSID_SampleGrabber, NIL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, FBaseFilter[n]); if FAILED(Result) then EXIT; Result:=CoCreateInstance(CLSID_CaptureGraphBuilder2, NIL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, FCaptureGraphBuilder[n]); if FAILED(Result) then EXIT; Result:=FGraphBuilder[n].AddFilter(FBaseFilter[n], 'GRABBER'); if FAILED(Result) then EXIT; Result:=FBaseFilter[n].QueryInterface(IID_ISampleGrabber, FSampleGrabber[n]); if FAILED(Result) then EXIT; if FSampleGrabber[n] <> NIL then begin ZeroMemory(@MediaType, sizeof(AM_MEDIA_TYPE)); with MediaType do begin majortype:= MEDIATYPE_Video; subtype:= MEDIASUBTYPE_RGB32; formattype:= FORMAT_VideoInfo; end; FSampleGrabber[n].SetMediaType(MediaType); FSampleGrabber[n].SetBufferSamples(TRUE); FSampleGrabber[n].SetOneShot(FALSE); end; Result:=FCaptureGraphBuilder[n].SetFiltergraph(FGraphBuilder[n]); if FAILED(Result) then EXIT; if Listbox1.Count>n-1 then begin MArray1[n-1{Listbox1.ItemIndex}].BindToObject (NIL, NIL, IID_IBaseFilter, FVideoCaptureFilter[n]); FGraphBuilder[n].AddFilter(FVideoCaptureFilter[n], 'VideoCaptureFilter'); end; Result:=FCaptureGraphBuilder[n].RenderStream(@PIN_CATEGORY_PREVIEW, nil, FVideoCaptureFilter[n] ,FBaseFilter[n] ,nil); if FAILED(Result) then EXIT; Result:=FGraphBuilder[n].QueryInterface(IID_IVideoWindow, FVideoWindow[n]); if FAILED(Result) then EXIT; FVideoWindow[n].put_WindowStyle(WS_CHILD or WS_CLIPSIBLINGS); case n of 1:begin FVideoWindow[n].put_Owner(Panel1.Handle); FVideoRect[n]:=Panel1.ClientRect; end; 2:begin FVideoWindow[n].put_Owner(Panel2.Handle); FVideoRect[n]:=Panel2.ClientRect; end; 3:begin FVideoWindow[n].put_Owner(Panel3.Handle); FVideoRect[n]:=Panel3.ClientRect; end; 4:begin FVideoWindow[n].put_Owner(Panel4.Handle); FVideoRect[n]:=Panel4.ClientRect; end; end; FVideoWindow[n].SetWindowPosition(FVideoRect[n].Left,FVideoRect[n].Top, FVideoRect[n].Right - FVideoRect[n].Left,FVideoRect[n].Bottom - FVideoRect[n].Top); FVideoWindow[n].put_Visible(TRUE); Result:=FGraphBuilder[n].QueryInterface(IID_IMediaControl, FMediaControl[n]); if FAILED(Result) then Exit; FMediaControl[n].Run(); end; function TForm1.CaptureBitmap(n:integer): HResult; var bSize: integer; pVideoHeader: TVideoInfoHeader; MediaType: TAMMediaType; BitmapInfo: TBitmapInfo; Buffer: Pointer; tmp: array of byte; Bitmap: TBitmap; JpegIm: TJpegImage; begin Result := E_FAIL; if FSampleGrabber[n] = NIL then EXIT; Result := FSampleGrabber[n].GetCurrentBuffer(bSize, NIL); if (bSize <= 0) or FAILED(Result) then EXIT; Bitmap := TBitmap.Create; try ZeroMemory(@MediaType, sizeof(TAMMediaType)); Result := FSampleGrabber[n].GetConnectedMediaType(MediaType); if FAILED(Result) then EXIT; pVideoHeader := TVideoInfoHeader(MediaType.pbFormat^); ZeroMemory(@BitmapInfo, sizeof(TBitmapInfo)); CopyMemory(@BitmapInfo.bmiHeader, @pVideoHeader.bmiHeader, sizeof(TBITMAPINFOHEADER)); Buffer := NIL; Bitmap.Handle := CreateDIBSection(0, BitmapInfo, DIB_RGB_COLORS, Buffer, 0, 0); SetLength(tmp, bSize); try FSampleGrabber[n].GetCurrentBuffer(bSize, @tmp[0]); CopyMemory(Buffer, @tmp[0], MediaType.lSampleSize); bitmap.Canvas.TextOut(3,3,d+' '+timetostr(now)); case n of 1:bit1.Canvas.CopyRect(rect(0,0,640,480),bitmap.Canvas,rect(0,0,640,480)); 2:bit1.Canvas.CopyRect(rect(0,480,640,960),bitmap.Canvas,rect(0,0,640,480)); 3:bit1.Canvas.CopyRect(rect(640,0,1280,480),bitmap.Canvas,rect(0,0,640,480)); 4:bit1.Canvas.CopyRect(rect(640,480,1280,960),bitmap.Canvas,rect(0,0,640,480)); end; except Result := E_FAIL; end; finally SetLength(tmp, 0); Bitmap.Free; end; end; procedure TForm1.Timer1Timer(Sender: TObject); var t,h,m,s:string; begin t:=timetostr(now) ; CaptureBitmap(1); if n>1 then CaptureBitmap(2); if n>2 then CaptureBitmap(3); if n>3 then CaptureBitmap(4); h:=GetToken(t,':',1); m:=GetToken(t,':',2); s:=GetToken(t,':',3); try ForceDirectories(disk+h+'\'); finally saveJP(disk+h+'\'+m+'_'+s,bit1); end; end; procedure TForm1.Timer2Timer(Sender: TObject); begin spinedit1.Value:=kk; end; procedure TForm1.Timer3Timer(Sender: TObject); begin timer1.Enabled:=true; timer3.Enabled:=false; end; function DelDir(dir: string): Boolean; var fos: TSHFileOpStruct; begin ZeroMemory(@fos, SizeOf(fos)); with fos do begin wFunc := FO_DELETE; fFlags := FOF_SILENT or FOF_NOCONFIRMATION; pFrom := PChar(dir + #0); end; Result := (0 = ShFileOperation(fos)); end; procedure TForm1.FormCreate(Sender: TObject); var i:integer; Year, Month, Day: Word; begin bit1:=Tbitmap.Create; bit1.Width:=1280; bit1.Height:=960; for i:=1 to 4 do RecMode:=False; CoInitialize(nil); if FAILED(Initializ) then Begin //ShowMessage('Внимание! Произошла ошибка при инициализации'); Exit; End; n:=Listbox1.Count; for I := 1 to n do begin if FAILED(CreateGraph(i)) then Exit; // ShowMessage('Внимание! Произошла ошибка при построении графа фильтров'); end; label1.Caption:='Кол-во камер - '+inttostr(n); LoadIniFiles; SpinEdit1.Value:=kk; DecodeDate(Now, Year, Month, Day); d:=datetostr(now); for I := 1 to strtoint(IntToStr(day))-spinedit2.Value do DelDir(disk+inttostr(i)); for I := strtoint(IntToStr(day))+1 to 31 do DelDir(disk+inttostr(i)); disk:=disk+ //IntToStr(year)+'\'+IntToStr(Month) +'\'+'\'+IntToStr(day)+'\'; timer3.Enabled:=true; begin checklistbox1.Items:=Listbox1.Items; end; end; procedure TForm1.FormDestroy(Sender: TObject); var i:integer; begin bit1.Free; begin pEnum := NIL; pDevEnum := NIL; pMoniker := NIL; PropertyName := NIL; DeviceName:=Unassigned; end; CoUninitialize; SaveIniFiles; IniFile.Free; end; procedure TForm1.LoadIniFiles; begin IniFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'config.ini'); disk:=IniFile.ReadString('Options','disk','C:\VideoCam\'); kk:=IniFile.Readinteger('Options','kachestvo',90); SpinEdit2.Value:=IniFile.Readinteger('Options','kol-vo dnei',3); end; procedure TForm1.SaveIniFiles; begin IniFile.WriteInteger('Options','kachestvo',SpinEdit1.Value); IniFile.WriteInteger('Options','kol-vo dnei', SpinEdit2.Value); end; end. |
//Находим камеры //Создаем объект для перечисления устройств //Перечислитель устройств Video //Пускаем массив по списку устройств //Запоминаем моникер в масиве //Получаем имя устройства //Добавляем имя устройства в списки //Выбираем из спика камеру №1 //Создаем граф фильтров //Чистим граф //Создаем объект для графа фильтров // Создаем объект для граббинга //Создаем объект для графа захвата // Добавляем фильтр в граф // Получаем интерфейс фильтра перехвата // Устанавливаем формат данных для фильтра перехвата // Данные будут записаны в буфер в том виде, в котором они проходят через фильтр // Граф не будет остановлен для получения кадра //Задаем граф фильтров //выбор устройства //получаем устройство для захвата видео из списка моникеров //добавляем устройство в граф фильтров //Задаем, что откуда будем получать и куда оно должно выводиться //Получаем интерфейс управления окном видео //Задаем стиль окна вывода //Накладываем окно вывода на Panel1 //Задаем размеры окна во всю панель //Накладываем окно вывода на Panel2 //Накладываем окно вывода на Panel3 //Накладываем окно вывода на Panel4 //показываем окно //Запрашиваем интерфейс управления графом //Запускаем отображение просмотра с вебкамер //Сохранение картинки с камеры // Если отсутствует интерфейс фильтра перехвата изображения, то завершаем работу //Получаем размер кадра //Создаем изображение //Получаем тип медиа потока на входе у фильтра перехвата //Копируем заголовок изображения //Создаем побитовое изображение // Выделяем память во временном массиве //Читаем данные из медиа потока в изображение //Записываем дату и время на изображение //Склеиваем 4 изображения с камер на одно изображение // Освобождаем память //Сохраняем формат даты //Создаем директорию на диске //Сохраняем изображение на диск //Обнуляем степень сжатия //Удаляем устаревшие записи Инициализировать OLE COM //вызываем процедуру поиска и инициализации устройств захвата видео и звука // Освобождаем память // деинициализировать OLE COM //загрузка настроек из inifile //сохраняем настройки в inifile |
Рис. 2. Программа в работе
Литература
1. Nevzorov V. Delphi Russian Knowledge Base. USA. - Chicago, 2007. More than 4000 p.
Размещено на Allbest.ru
...Подобные документы
Классификация видеокамер по техническим характеристикам. Анализ современных программно-аппаратных комплексов систем видеонаблюдения. Назначение и технические характеристики системы видеонаблюдения "Globoss". Анализ плат видеоввода с аппаратным сжатием.
дипломная работа [8,4 M], добавлен 29.06.2011Система контроля и управления доступом как базовый компонент интегрированных систем. Структура и основные элементы систем видеонаблюдения. Области применения и обзор программного обеспечения систем видеонаблюдения. Интегрированные системы безопасности.
дипломная работа [1,8 M], добавлен 25.07.2015Системная концепция комплексного обеспечения системы защиты информации. Описание автоматизированной системы охраны "Орион" и ее внедрение на объекте защиты. Технические каналы утечки информации. Разработка системы видеонаблюдения объекта защиты.
дипломная работа [1,2 M], добавлен 30.08.2010Системы контроля и управления доступом: контроллерные и программные. Технические тенденции их развития. Структура и элементы систем видеонаблюдения, области их применения и программное обеспечение. Интегрированные системы безопасности, уровни интеграции.
дипломная работа [1,7 M], добавлен 13.10.2015Обработка изображений на современных вычислительных устройствах. Устройство и представление различных форматов изображений. Исследование алгоритмов обработки изображений на базе различных архитектур. Сжатие изображений на основе сверточных нейросетей.
дипломная работа [6,1 M], добавлен 03.06.2022Обзор цифровых процессоров для видеонаблюдения. Конструктивное исполнение процессоров. Программное и аппаратное обеспечение. Система команд цифрового процессора. Содержание программного кода. Пояснения к программному коду. Иллюстрация работы эмулятора.
курсовая работа [1,2 M], добавлен 13.02.2017Выбор технологии передачи данных. Выбор топологии сети, головной станции, конфигурации системы видеонаблюдения. Организация доступа к IP-телефонии и Интернету. Расчет передаваемого трафика через сеть и видеонаблюдения. Проектирование кабельной сети.
дипломная работа [1,7 M], добавлен 27.01.2016Положения алгоритмов сжатия изображений. Классы приложений и изображений, критерии сравнения алгоритмов. Проблемы алгоритмов архивации с потерями. Конвейер операций, используемый в алгоритме JPEG. Характеристика фрактального и рекурсивного алгоритмов.
реферат [242,9 K], добавлен 24.04.2015Преимущества Delphi по сравнению с аналогичными программными продуктами. Особенности разработки системы автоматического заполнения анкеты в формате MS Word. Разработка программного обеспечения. Процедуры пользовательского интерфейса. Листинг программы.
курсовая работа [465,1 K], добавлен 22.01.2014Изучение современных методик компьютерной обработки биомедицинских изображений с целью улучшения изображений для их наилучшего визуального восприятия врачом-диагностом и эффективного сжатия изображений – для надежного хранения и быстрой передачи данных.
курсовая работа [2,3 M], добавлен 15.04.2019Описание теоретических принципов доступа к Интернету и принципов работы активного оборудования. Расчет кабельной сети, объема монтажных работ. Теоретические основы построения систем цифрового видеонаблюдения. Оборудование для реализации видеонаблюдения.
курсовая работа [1,3 M], добавлен 28.11.2013Создание системы видеонаблюдения для обеспечения требуемого уровня безопасности. Функция обнаружения движения. Обзор альтернативных вариантов построения информационной системы. Последовательность обработки фильтров. Графическая обработка видеопотоков.
курсовая работа [702,7 K], добавлен 16.01.2014Создание структуры базы данных. Таблица реквизитов входных данных информационной системы "Видеобиблиотека". Процессы, составляющие действие в базе данных. Формирование ведомостей с использованием MS Excel. Использование интегрированной среды Delphi.
курсовая работа [455,8 K], добавлен 05.01.2013Анализ системы получения изображений микропрепарата Атлант-микро. Разработка модели, алгоритмов совмещения фрагментов. Разработка пользовательского интерфейса системы. Оценка качества совмещения фрагментов алгоритмом с бинаризацией на основе гистограмм.
дипломная работа [8,0 M], добавлен 23.09.2012Применение различных методов компрессии изображений и анимации. Определение наиболее подходящего формата сжатия. Выбор кодеков при помощи программы RIOT. Применение дополнительных способов оптимизации с использование программ OptiPNG, PNGOUT и TweakPNG.
лабораторная работа [1,5 M], добавлен 31.05.2013Рассмотрение программных продуктов, обеспечивающих решение задач по распознаванию образов. Видеопотоки от камер видеонаблюдения. Изменение размера и формата представления кадра. Отслеживание движения объекта в кадре. Распознавание номеров автотранспорта.
лабораторная работа [1,4 M], добавлен 28.11.2021Цифровые рентгенографические системы. Методы автоматического анализа изображений в среде MatLab. Анализ рентгеновского изображения. Фильтрация, сегментация, улучшение изображений. Аппаратурные возможности предварительной нормализации изображений.
курсовая работа [890,9 K], добавлен 07.12.2013Исследование вертикальных проекций яркости и размаха яркости. Программная реализация алгоритма автоматического анализа цифровых изображений номерных знаков с целью сегментации цифробуквенных символов. Разработка графического пользовательского интерфейса.
дипломная работа [1,5 M], добавлен 12.04.2013Сравнительная оценка существующих программ, повышающих разрешение изображений на языке Borland Delphi. Выбор оптимального инструментария для разработки логической схемы. Форма поиска файлов, преобразования изображений и реализации алгоритмов интерполяции.
дипломная работа [3,0 M], добавлен 29.11.2011Система помощи водителю на базе регистратора. Установка операционной системы Debian. Настройка системных служб и разработка серверного приложения. Создание локальной Wi-Fi сети. Распознавание знаков и библиотека OpenCV. Потоковое видео в Android.
дипломная работа [3,9 M], добавлен 13.09.2017