Відеоспостереження через Інтернет з записом архіву

  1. Світло мій люстерко скажи, да всю правду розкажи ... У попередніх статтях " Налаштування відеоспостереження...

Світло мій люстерко скажи, да всю правду розкажи ...

У попередніх статтях    Налаштування відеоспостереження своїми руками   ,   Створення інтерфейсу розумного будинку на базі Web-сервера   І інших я описав процес організації відеоспостереження використовуючи операційну систему Linux і програмний продукт ZoneMinder У попередніх статтях " Налаштування відеоспостереження своїми руками "," Створення інтерфейсу розумного будинку на базі Web-сервера "І інших я описав процес організації відеоспостереження використовуючи операційну систему Linux і програмний продукт ZoneMinder. Використовуючи як призначеного для користувача інтерфейсу можливості Web-сервера Apache і різних модулів, систем та фреймворків для роботи з контентом, можна створити цілком зручне і функціональне засіб для моніторингу та управління розумним Будинком в цілому і відеоспостереженням зокрема не тільки з локальної мережі, але і через Інтернет. Зрозуміло, сервер повинен бути підключений до Інтернету і мати так званий "реальний" IP-адреса, то, в разі 3G / EDGE / GPRS з'єднань не завжди доступно.

Припустимо, Ваш сервер підключений до Інтернету і Ви можете дивитися картинку з камер спостережень онлайн. Само по собі це вже здорово, але далеко не завжди зручно і можливо цілодобово дивитися в монітор. Часто потрібне знати, що відбувалося на об'єкті в відсутності он-лайн моніторингу. Програма ZoneMinder дозволяє налаштувати систему на запис відео по заданих подій, наприклад, якщо визначає на зображенні рух об'єктів. Але на практиці існують ситуації, коли це не працює. Наприклад, використання ширококутних об'єктивів для спостереження за великою площею унеможливлює роботу цього режиму. Людина на зображенні настільки малий, що ZoneMinder не може засікти рух, а якщо збільшувати чутливість програми, то запис ініціюється тінями від хмар, рухом листя або трави. Крім того, робота режиму motion detection вимагає значних ресурсів сервера. Іншим варіантом є запис всього відео поспіль. Але якщо камера не одна, це також завантажує систему, а до того ж створює необхідність в додатковому обсязі на жорсткому диску. Однак наявність повного відеоархіву хоча і дозволяє детально ознайомиться з подіями минулого, але все ж в ряді випадків є надмірною.

У своїй системі я прийняв рішення відмовитися від запису відео, а обмежитися записом окремих зображень з камер з частотою 1 раз в хвилину, але зате з максимально можливою якістю. Таким чином за добу генерується 1440 JPEG файлів, загальним обсягом приблизно 130-150Мб (дозвіл 720х576). Такий підхід абсолютно не завантажує систему, дозволяє детально розглянути зображення з максимальною якістю, дуже швидко знайти зображення за певні дату і час, а також реалізувати автоматичні алгоритми упаковки і оптимізації архіву. Можна значно (до 3-х і більше разів) зменшити обсяг даних, знижуючи дозвіл і якість одержуваного зображення.

Але про все по порядку. Якщо ви не використовуєте ZoneMinder, то захопити зображення з камери можна за допомогою утиліти v4ctl:

v4ctl snap jpeg full /var/www/snap/Camera1.jpg

У разі, якщо запущений ZoneMinder, зробити це можна приблизно так:

cd / var / www / snap; zmu -m 1 -i -v

У даних прикладах папка snap - це відправна точка мого відеоархіву в структурі Web-сайту. Тепер у нас є захоплене зображення з камери в файлі Camera1.jpg Але для організації архіву цього мало. Я створив ще одну папку з ім'ям archive і написав наступний скрипт на shell'е.

# / Bin / sh if [! -d / var / www / snap / archive / `date +% Y% m% d`] then mkdir / var / www / snap / archive /` date +% Y% m% d` fi cp / var / www / snap / Camera1.jpg / var / www / snap / archive / `date +% Y% m% d` /` date +% Y% m% d% H% M`.jpg

Логіка скрипта проста. Він створює папку з ім'ям, сформованим з поточної дати (наприклад 20100214 для 14 лютого 2010 року) і копіює туди отриманий файл, також перейменовуючи його в поточну дату і час. Виходить файл з ім'ям 201002140105.jpg для тієї ж дати і часу 1:15. Команду, яка одержує скріншот, а запуск скрипта ми прописуємо в cron з потрібною періодичністю.

Працювати з таким архівом просто як вручну (ми завжди з легкістю можемо знайти зображення за потрібну дату і час) так і в напівавтоматичному режимі, коли процес вибору дати і часу ми переносимо на сторону Web-інтерфейсу. Для цього можна написати якийсь скрипт. Найпростіший PHP-скрипт може виглядати приблизно так:

&lt;? $ My_date = $ _REQUEST [ 'my_date']; $ My_hour = $ _REQUEST [ 'my_hour']; $ My_pic = $ _REQUEST [ 'my_pic']; if (! empty ($ my_pic)) echo " < <Img src = "$ my_pic"> "; elseif (empty ($ my_date)) {echo" Показати архів за дату: <br> "; foreach (glob (" snap / archive / * ") as $ filename) echo" <a href=/archive.php?my_date=$filename> ".preg_replace (" / (dddd) (dd) (dd) / "," $ 1 $ 2 $ 3 ", basename ($ filename))." </ a> <br> ";} else {foreach (glob ($ my_date." / *. jpg ") as $ filename) {if (preg_match (" /. jpg $ / ", $ filename)) $ my_dir [$ j ++ ] = $ filename;} sort ($ my_dir); if (empty ($ my_hour) && count ($ my_dir)> 50) {echo "Вивести за годину:"; for ($ i = 0; $ i <24; $ i ++) {if ($ i == 0) $ i1 = "zero"; else $ i1 = $ i; echo "<a href=/archive.php?my_date=$my_date&my_hour=$i1> $ i </a> ";}} else {for ($ i = 1; $ i <count ($ my_dir); $ i ++) {if ((! empty ($ my_hour) && date (" H ", filemtime ($ my_dir [$ i] )) == $ my_hour) || empty ($ my_hour) || (date ( "H", filemtime ($ my_dir [$ i])) == 0 && $ my_hour == "zero")) echo "<a href = "/ archive.php? my_pic = $ my_dir [$ i]"> <img src = "/ $ my_dir [$ i] border =" 0 "> </a>"; }}}?>

Відеоархів за певний час і дату
Відеоархів за певний час і дату

Примітно, що якщо робити захоплення за допомогою ZoneMinder, то на зображення вже накладені дата і час, але накласти будь-які дані на картинку можна і самостійно.

Читач може звернути увагу на той факт, що він обіймав обсяг такого архіву за місяць складе більше 4 Гб. Багато? Згоден. Найпростіше рішення - видаляти застарілі файли. Справді, навряд чи щохвилинний архів двомісячної давності буде становити практичну цінність. Проте, зовсім видаляти файли за певну дату не хочеться. Буває дуже цікаво подивитися стан об'єкта півроку або рік тому. Цікаво і те, яка була, наприклад погода - сипав чи сніг або світило яскраве сонечко. Досить швидко я прийшов до наступного рішення. У міру "старіння" файлів, їх потрібно, так би мовити, проріджувати як морквину на грядці. Починаючи з папок тижневої давності ми видаляємо половину файлів (кожен другий), роблячи таким чином архів з дозволом 1 кадр в 2 хвилини. Ще через добу, коли дата папки з архівом буде 7 днів і 1 день, в ній залишаться дані зображення з періодичністю 1 кадр в 4 хвилини. І так далі. До тих пір, поки файлів в папці не опиниться менше 50.

&lt;? foreach (glob ( "/ var / www / snap / archive / *") as $ filename) {foreach (glob ( "$ filename / *") as $ filename1) $ my_dir [$ i ++] = "$ filename1"; $ My_time = time () - 604800; if (count ($ my_dir)> 50 && basename ($ filename) <date ( "Ymd", $ my_time)) {for ($ j = 0; $ j <count ($ my_dir); $ j ++) {if ($ k == 1) if (! empty ($ my_dir [$ j])) unlink ($ my_dir [$ j]); if ($ k == 0) $ k = 1; else $ k = 0; }}}?>

Решта 40-50 кадрів в день вже не будуть створювати проблему по частині займаного обсягу на жорсткому диску, але дадуть уявлення про те, що творилося в протягом доби (1 кадр на 30-60 хвилин).

Автор: Andrey_B
Будь-яке використання матеріалів сайту можливе лише з дозволу автора і з обов'язковим посиланням на джерело.


Додати коментар:


Сортування коментарів: Останні зверху | перші зверху

2013-03-13 22:48:43 | Andrey_B
Євгенія, по-перше, у операторів може бути окрема послуга (реальний або навіть статичний IP адреса). Я, здається, бачив таку послугу у Мегафона. По-друге, ніхто не забороняє купити який-небудь найдешевший VPS / VDS аккаунт і підняти на ньому що-небудь типу VPN. Витрати від 1500 руб в рік. Звичайно, метушні більше, зате і плюси певні є.
Ну і в Самарській області ADSL / Ethernet вельми розвинений, потрібно запросити технічну можливість у різних операторів. Ще подивіться Wi-MAX.


2013-03-13 9:39:15 | Євгенія
Добридень! Підкажіть будь ласка, якщо вийшло налаштувати доступ через 3G - через якого оператора? У нас в регіоні (Самарська область) не можу знайти жодного з наданням статичної, або хоча б білого динамічного IP. Може не там шукаю ...


2013-02-20 17:54:37 | Олександр
Я новачок в програмировании, роблю все по інструкції, але у мене не працює висновок архіву за датою.
"Працювати з таким архівом просто як вручну (ми завжди з легкістю можемо знайти зображення за потрібну дату і час) так і в напівавтоматичному режимі, коли процес вибору дати і часу ми переносимо на сторону Web-інтерфейсу. Для цього можна написати якийсь скрипт . Найпростіший PHP-скрипт може виглядати приблизно так: "


2010-11-26 10:33:28 | Дмитро
Чистити місце можна і так по крону, наприклад:
find / mnt / sdb1 / motion / (-name '.swf' -o -name '.jpg') -mtime +50 -
Шлях і шаблони підставляємо свої.


2010-08-19 12:34:56 | Alexandr
Якщо не збираєтеся правити картинки, то можна конвертувати в формат .DJVU, або
створити альбоми по місяцях, альбом займе місце 30 -50 Mb
LINUX підтримує DJVU
спасибі ідея дуже хороша і бюджетна


Php?
Php?
Php?
My_pic = $ my_dir [$ i]"> <img src = "/ $ my_dir [$ i] border =" 0 "> </a>"; }}}?
Багато?
Lt;?
Підкажіть будь ласка, якщо вийшло налаштувати доступ через 3G - через якого оператора?