LXF115 Hardcore Linux

Зміст

Web-камери: Стати Великим Братом

його
Ворог може причаїтися будь-де.

До того, як її привласнили фанатики та упирі з реалітішоу, фраза «Великий Брат» була зручним позначенням усіх тих, хто хотів обмежити наші громадянські свободи. Якщо інформація – це влада, ми маємо спробувати припинити збирання непомірної її кількості обранцями народу, щоб народ контролював уряд, а не навпаки. Навіщо тодіLinux Formatпублікує підручник з web-камер? Адже ми всі віримо у Свободу, з великої літери?

Частина 1 Налаштування камер

Ми використовуємо систему на основі Debian, однак ці інструкції повинні працювати практично з будь-яким дистрибутивом Linux. Єдина серйозна проблема, з якою ви можете зіткнутися - web-камера (зазвичай з підключенням через USB), що не підтримується Linux.

Web-камери можна підключати через USB, Ethernet або бездротову мережу (такі зазвичай називають мережевими камерами). Linux підтримує веб-камери USB не повністю. Проблема ускладнюється тим, що виробники нерідко використовують під однією і тією ж маркою різні мікросхеми, тому навіть якщо який-небудь екземпляр запрацює, інший, нібито того ж типу, може відмовити. Мережеві камери зазвичай мають вбудований web-сервер, а іноді і бездротовий передавач, і можуть бути підключені через Wi-Fi. На нашому уроці ми скористаємося камерою Linksys WVC54GCA: вона не дуже дорога, є у продажу та налаштовується для роботи з Linux.

Перший крок на шляху до налаштування USB-камери – визначення чіпсету, який вона використовує. Просто підключіть її до комп'ютера і запустітьlsusb:

Звідси видно, що це Logitech QuickCam, яку можна купити за 800 рублів.показує, що він підтримується драйверомgspca. У багатьох дистрибутивах, у тому числі в Ubuntu Hardy, він вбудований в ядро, але версія драйвера, що йде з Hardy, не працює з цією конкретною web-камерою Logitech.

Ми можемо перевірити підтримку конкретної web-камери, знайшовши в Google ID нашого пристрою, в даному випадку08af. Невелике дослідження показало, що на підтримку цієї web-камери здатна остання версія драйвераgspca, доступна на http://mxhaard.free.fr/download.html. Отже, для початку завантажимо останню версію для ядра 2.6 з http://mxhaard.free.fr/spca50x/Download/gspcav1-20071224.tar.gz.

Завантаживши драйвер, розпакуємо його:

Установка досить проста. По-перше, ми повинні встановити заголовки ядра Linux та пакетиbuild-essential:

Для складання драйвера gspca запустіть від імені root

Якщо все піде нормально, модуль ядра збереться та завантажиться. Далі слід підключити web-камеру і відкритиCheeseабо будь-який інший додаток, здатний виводити з неї картинку. Якщо ви побачите свою фізіономію на екрані, значить web-камера працює.

Якщо потрібно повернути назад форматASF, використовуйте наступний формат URL:

Частина 2 Установка програмного забезпечення для спостереження

Тепер, маючи пару робочих web-камер, настроїмо програми для спостереження за ними.Motion(http://www.lavrsen.dk/twiki/bin/view/Motion/WebHome) успішно балансує між функціональністю та простотою установки. Варто вивчити Wiki на сайтіMotion, тому що там безліч опцій налаштування.Motionє у вигляді пакета Debian/Ubuntu, і для його встановлення на Debian достатньо набрати

У нас Ubuntu, томуMotionвстановлюється як демон. Коли ми всі налаштуємо, це буде розкішно. Однак спершу легше запуститийого вручну від імені звичайного користувача та випробувати різні варіанти конфігурації. Спершу зупинимо демона:

Motionшукає свої конфігураційні файли в декількох місцях, і ви можете вказати їх розташування в командному рядку при запуску. Ubuntu містить файли конфігурації в/etc/motion. Скопіюємо їх у директорію

/.motion щоб мати можливість змінювати файли, перебираючи різні опції. Створіть каталог.motion:

Скопіюйте файли з каталогу за умовчанням у.motion, а потім змініть власника файлів, щоб ми могли їх редагувати:

Основний конфігураційний файл -motion.conf. Щоб спостерігати більше однієї камери, кожен процес спостереження повинен бути запущений у своєму власному потоці і мати власний конфігураційний файл (thread1.conf, thread2.conf, і т.д.). Приклади установки за замовчуванням є в новоствореній директорії

Магічні опції

Більшість опцій уthread1.confми залишимо за замовчуванням. Ті, що нам справді треба змінити, наведено нижче. Налаштуванняvideodeviceпередбачає використання веб-камери USB. Щоб дізнатися, який пристрій використовує наша веб-камера, підключіть його до комп'ютера та введіть його.

Тепер зробимо наступні зміни вthread1.conf:

Можна вибрати висоту та ширину зображення відповідно до налаштувань веб-камери за промовчанням. Якщо хочете, задайте їх менше, ніж дозволяє веб-камера. ЩобMotionпрацювала як типова програма для web-камери, роблячи знімки через заздалегідь задані інтервали, встановітьsnapshot_intervalу файліthread.confу значення, відмінне від нуля. А головне, задайте в опціїtarget_dirдиректорію, кудиMotionзберігатиме дані.

І цеЧи функціонує?

Тепер перевіримо, що все працює. ЗапустітьMotion:

Опція-cвелитьMotionвикористовувати файл конфігурації

/.motion/motion.conf, а не/etc/motion/motion.conf. Використовувати ключ-cі завжди вказувати розташування файлу конфігурації – хороша ідея, оскількиMotionшукає свої налаштування в кількох різних місцях і вибирає останнє знайдене.

Налаштувавши web-камеру USB, перейдемо до налаштування Motion для роботи з нашою мережевою камерою Linksys. Створітьthread2.conf(або відредагуйте його) і переконайтеся, що він включений уmotion.conf. Крім того, переконайтеся, що ви використовували наведений вище спосіб для налаштування Linksys на мовлення у форматі MJPEG, а не файлів ASF. Закоментуйте всі існуючі рядкиvideodeviceі вставте наступний текст:

Задайте цільову директорію, щоб мережна камера записувала свої файли не те місце, що використовує USB-камера.

НатиснітьCtrl+C, щоб зупинити запущенийMotion, та перезавантажте його:

Частина 3 Уточнення результатів

Motion
Використовуйте файл з маскою для відсікання області огляду камери, де вам не потрібно виявляти рух.

Параметри виявлення руху за умовчанням добре працюють у більшості випадків, проте цілком можливо, що в контрольованій зоні може бути дорога або, наприклад, дерева. Рух у цих областях згенерує подію та призведе до великої кількості помилкових тривог. Щоб уникнути їх, застосуємоmask_file, що визначає області, де рухи можна ігнорувати. Маска – це файл PGM (portable graymap), який має бути однакової висоти та ширини із захопленим кадром. Область, де вам не потрібні спрацювання датчика руху, має бути зачорнена, амісце, де вони потрібні, має бути білим.

Файл маски легко створити, взявши захоплений кадр із web-камери і відредагувавши його вGIMP. На малюнку спочатку є деревце на передньому плані, яке викличе спрацювання при розгойдуванні їх вітром. Я запустивGIMPі відредагував це зображення для створення файлу маски, показаного праворуч. Можна бачити, що ми виключили із розгляду область, що містить рослини, заповнивши її чорним кольором. Решта зображення, де ми хочемо, щоб рух виявлялося, повинна бути заповнена білим. Збережіть зображення як файл PGM уGIMP.

Тепер велимMotionвикористовувати файл маски. Уthread.confвідповідної web-камери відредагуйте опціюmask_file:

Можна також вказати, скільки послідовних кадрів має містити рух, щоб Motion розпізнав його як реальний. Цей параметр визначається за допомогоюminimum_motion_framesі за умовчанням дорівнює1. Чутливість детектування також можна скоригувати черезthresholdу файлі конфігурації. Він визначає кількість пікселів, які мають змінитися, перш ніж буде зараховано рух. За промовчанням використовується значення1500.

Оповіщення електронною поштою

Для відправки e-mail-повідомлення з прикріпленим JPEG-файлом вживемоMutt. Спочатку встановимо його:

Тепер потрібно створити сценарій оболонки для надсилання JPEG-файлу. На WikiMotionговориться, що в обробнику події можна використовувати місцезамінник%f, куди підставиться ім'я файлу, проте у версії програми, що поставляється з Ubuntu Hardy, це не спрацювало. Для надсилання JPEG ми будемо використовувати подіюon_event_end.

Зауважте, щоjpeg_filename(ім'яфайлу для відправки) визначено у нашомуthread.conf. Формат імені файлу, що передається в обробник подіїon_end_event, повинен відповідати такому вjpeg_filename. Зверніться до WikiMotionдля отримання детальної інформації про місцезамінники, допустимі в іменах файлів.

Відредагуємоthread.conf, що відповідає нашій камері:

У скрипті$1замінюється ім'ям JPEG-файлу, що передається обробником подіїMotion.LXF