Motion - мощная бесплатная программа для обнаружения движения по камере. В данной статье я опишу как установить ее на роутере с прошивкой openwrt и таким образом сделать программный датчик движения и систему видеонаблюдение своими руками. В итоге мы сможем при обнаружении движения сохранять снимок с usb-камеры на флешку, отсылать смс на телефон, подавать звуковой сигнал и массу других вещей. Также можно будет наблюдать видео с вашей камеры по интернету с любой точки мира. Все это я постараюсь описать в этой и последующих статьях. В качестве usb-камеры я буду использовать Logitech HD Webcam C270 и настрою все это на роутере DIR-320. Также нам понадобится usb hub с поддержкой usb2.0.
В качестве usb-камеры можно использовать любую камеру, поддерживаемую так называемыми UVC драйверами. Список проверенных камер перечислен на сайте данных драйверов. Мой выбор камеры C270 связан только с тем, что другой у меня нет в наличии. В свое время я много раз натыкался на буржуйских сайтах, что ее часто использую, но как позже оказалось те же сайты раскритиковали ее. Поэтому не рекомендую ее специально покупать для этих целей, тем более как покажет дальнейший мой эксперимент на полное ее разрешение все равно не получится задействовать, т.к. просто не хватает мощности процессора DIR-320. Также данная камера относительно дорога и лучше присмотреться к более дешевым моделям.
Ну а в остальном данная камера, применительно к скайпу например, дает очень качественную картинку и звук.
Итак приступим.
Первое что нам нужно сделать это собрать прошивку с поддержкой usb и перенести загрузку openwrt на usb-накопитель. Также не мешало бы собрать motion из последних исходников, для чего при сборке прошивки нужно выбрать пакет
Multimedia-> <M> Motion
Можно конечно установить данный пакет и с основного репозитория openwrt, но там еще лежит старая версия motion без поддержки установки пароля на доступ к просмотру видео потока по интернету. Это справедливо для версии openwrt под названием Backfire. На последней модификации openwrt с названием Attitude Adjustment запустить motion мне не удалось, скорее всего по причине того, что все таки данная версия еще находится на стадии бета тестирования (по состоянию на 23.10.2012)
Поэтому все остальное описание будет справедливо для openwrt версии Backfire.
Если не хотите заморачивать себя самостоятельной сборкой прошивки, то вы можете скачать мою версию, а также дальше я распишу как установить собранную мной программу motion с моего репозитория.
Правда вам все равно нужно будет самостоятельно сделать загрузку openwrt с usb-накопителя, но это уже не так сложно. Usb накопитель следует подключать через usb hub, т.к. нам нужно будет еще подключать к нему нашу usb камеру.
После того как сделана загрузка с usb-накопителя приступаем к установке motion. Подключаемся ssh-клиентом к DIR-320 и временно меняем основной репозиторий на мой.
Комментируем основной репозиторий src/gz backfire http://downloads.openwrt.org/backfire/10.03.1/brcm47xx/packages, поставив в начале строки знак #.
Добавляем строкой ниже мой репозиторий (либо свой, если вы все делали самостоятельно)
в итоге у нас будет такой файл opkg.conf
src/gz mypackages http://autohome.org.ua/repo/dir-320/backfire/packages/
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
Обновляем пакеты и устанавливаем драйвера поддержки видеокамеры
opkg install kmod-input-core kmod-video-core kmod-video-uvc
Подключаем в usb hub нашу камеру. Проверяем, что камера успешно подхвачена системой:
Должно вывести следующее
/dev/video0
Здесь следует сказать что usb hub должен быть с поддержкой usb2.0 иначе вы не получите разрешения больше чем 170*144 (пишу по памяти, но оно точно гораздо меньше чем 320*240)
Итак камера определилась, теперь устанавливаем motion
Настаиваем конфигурационный файл либо скачиваем мой. В своем отредактированном файле все изменения я пометил свом ником mszerg для удобства поиска.
Настроек очень много, ниже я перечислю что изменил я.
1. Поменял палитру на которой работает моя usb камера. с270 работает с MJPEG и YUYV палитрами - это 8 и 15 кода согласно конфигурационного файла.
#v4l2_palette 17
v4l2_palette 15
Что бы узнать с какими палитрами работает ваша камера запустите motion в режиме отладки (с ключем -s)
Начнется вывод отладочной информации и в ней вы должны увидеть следующие строки:
[1] [NTC] [VID] v4l2_set_pix_format: Config palette index 17 (YU12) doesn't work.
[1] [NTC] [VID] v4l2_set_pix_format: Supported palettes:
[1] [NTC] [VID] v4l2_set_pix_format: (0) YUYV (YUV 4:2:2 (YUYV))
[1] [NTC] [VID] v4l2_set_pix_format: 0 - YUV 4:2:2 (YUYV) (compressed : 0) (0x56595559)
[1] [NTC] [VID] v4l2_set_pix_format: (1) MJPG (MJPEG)
[1] [NTC] [VID] v4l2_set_pix_format: 1 - MJPEG (compressed : 1) (0x47504a4d)
[1] [NTC] [VID] v4l2_set_pix_format Selected palette YUYV
Программа сама нам любезно сообщила, что наша камера не поддерживает 17 (YU12) палитру, которая стояла по умолчанию, а поддерживает YUYV и MJPG и что программа сама переключилась на YUYV палитру. Запустить с270 с поддержкой MJPG у меня не получилось, поэтому я поставил YUYV. К сведению на ubuntu моя с270 тоже не смогла отдавать поток в MJPEG, так что это не проблема openwrt, а либо веб камеры, либо motion.
2. Далее я выбрал для себя оптимальное разрешение картинки. Для палитры YUYV у меня получилось установить разрешение 320*240, 544*288, 640*480. Первый вариант мелковат, последний грузит процессор на 100%, поэтому остается 544*288. Загрузка процессора в этом случае 50-70%
#mszerg
#width 320
width 544
# Image height (pixels). Valid range: Camera dependent, default: 288
#mszerg
#height 240
height 288
3. Отключил запись видео, т.к. процессор итак загружен. Останется только запись скриншетов.
#mszerg
#ffmpeg_output_movies on
ffmpeg_output_movies off
4. Поменял месторасположение записи фотографий
# Recommended to use absolute path. (Default: current working directory)
#mszerg
#target_dir /usr/local/apache2/htdocs/cam1
target_dir /home/motion
5. Разрешил доступ к потоковому видео с камеры по сети
#mszerg
#stream_localhost on
stream_localhost off
6. Задал пароль на доступ к потоковому виде. Я поставил юзера motion и пароль motion, не забудьте поменять на свои.
# 0 = disabled
# 1 = Basic authentication
# 2 = MD5 digest (the safer authentication)
#mszerg
#stream_auth_method 0
stream_auth_method 1
# Authentication for the stream. Syntax username:password
# Default: not defined (Disabled)
#mszerg
; stream_authentication username:password
stream_authentication motion:motion
7. Открыл доступ к изменению настроек motion через web браузер, задал юзера и пароль motion:motion. Не забудьте поменять. После включения этого пункта вы сможете менять параметры этого конфигурационного файла через браузер, но скажу сразу что он довольно приметивен. Мне нагляднее менять в ручную через файл.
#mszerg
#webcontrol_localhost on
webcontrol_localhost off
# Authentication for the http based control. Syntax username:password
# Default: not defined (Disabled)
#mszerg
; webcontrol_authentication username:password
webcontrol_authentication motion:motion
Для закачки моего конфигурационного файла вводим следующие команды
cd /etc/
wget http://autohome.org.ua/repo/dir-320/backfire/motion.conf
Теперь можно запустить программу
Заходим в браузер и по адресу http://ip-вашего роутера:8081/ видим картинку. Говорят, что Internet Explorer не поддерживает это потоковое видео, я использую Mozila Firefox. Также можно настроить просмотр видео в VLC проигрывателе.
Если зайти по адресу http://ip-вашего роутера:8080/, то мы увидим простенький интерфейс для изменения настроек программы.
Что бы прервать работу motion вводим в терминале команду
Если что-то пойдет не так, то отладочную информацию программы можно увидеть по команде
Внимание!!! В этом режиме по адресу http://ip-вашего роутера:8081/ вместо видеопотока будет черный экран с синей областью движения, не пугаемся что у вас что-то не работает. Также возможно что в вашем конфигурационном файле режим отладки включен по умолчанию и вы постоянно видите черный экран с синими тенями движения, в этом случае в файле /etc/motion.con f нужно что бы был выставлен следующий параметр:
Если все нормально, то при обнаружении движения наша программа будет складывать фотографии в папку /home/motion
Не забудьте еще закоментировать мой репозиторий и вернуть стандартный.
В дальнейшем я планирую наладить отправку sms, включение программы по расписанию, выключение/выключение программы по кнопке, закачку фотографий на удаленный сервер. Все это будет описано в следующих статьях.
Ссылки
Также данную версию прошивки можно использовать для трансляции потокового видео с программой mjpg-streamer
P.s. Просьба отписаться у кого получилось запустить другие usb камеры кроме с270, какую палитру и разрешения они поддерживают.