В прошлой статье (линк) мы ознакомились с теоретической частью построения нашего «умного дома» и определились с используемыми технологиями. Теперь начнем реализацию практической части :)
Первой жертвой нашего интереса станет система видеонаблюдения.
Как я уже писал, ядром нашей системы станет персональный компьютер. К нему мы подсоединим все наши системы и именно он будет всем этим управлять. Требования к железу исходят из необходимых задач, но для нас хватит и не шибко мощного. В моем случае, главное требование было бесшумность и маленький размер системного блока. Выбор пал на моноблок. Intel Atom — в качестве процессора и жесткий диск на SSD для уменьшения шума. Операционной системой выступает Ubuntu Linux. Выходит в достаточно приемлемые деньги. Выглядит примерно так:
Вернемся к нашим баранам. Как я уже писал, видеонаблюдение будем строить на основе простеньких USB web-камер, дополнительной опцией которых может выступать микрофон. Например, таких:
Для соединения я использовал длинные USB-кабеля с активным усиленителем, либо 5-метровые кабеля с ферритовыми кольцами и USB-хабы с блоками питания. Особое внимание необходимо уделить качеству этих элементов.
Этого вполне достаточно для организации нашей системы видеонаблюдения. Можно так же рассмотреть возможность подключения аналоговых и IP камер, но я исходил из стоимости решения и подручных материалов :)
Будем считать, что камеры подключены к нашему компьютеру — проблем это вызвать не должно. Перейдем к самому интересному — программной части.
Если вы приобрели современные камеры, скорее всего не потребуется никаких дополнительных телодвижений для того, чтобы ее увидела ОС. В моем случае, к системе подключено 4 веб-камеры. Проверим это:
Как видно, система их опознала. Никаких действий, кроме подключения в USB-разъем я не производил. Если вы не увидите в выводе никаких устройств, скорее всего придется погуглить драйвер для вашей камеры.
Для себя я решил что буду снимать с камер не видео-поток, а снимки раз в секунду. Плюсы очевидны:
Для всего этого мы будем использовать программу под названием motion. В Ubuntu ставится весьма просто:
Конфигурационный файл находится по умолчанию в /etc/motion и называется, как ни странно, motion.conf :)
Открываем, редактируем, приводим приблизительно к следующему виду:
В конфигах threadX.conf все параметры аналогичны базовому, изменяются только необходимые строки
Т.е. адрес устройства камеры в ОС, текст на снимке и директория сохранения.
Я убрал комментарии из файла конфигурации, дабы не занимать слишком много места. Ознакомиться с ними можно в оригинальном файле конфигурации motion. Он очень подробно описан. Изменения от оригинального файла конфигурации помечены моими комментариями.
Теперь нам необходимо создать нужные директории и проверить работоспособность конфига:
Заходим поочередно в наши папки с камерами и просматриваем файлы camera.jpg. Если все сделано верно, мы увидим различные изображения с наших камер.
В этой статье мы научились получать изображение с наших камер и сохранять их в виде снимка раз в секунду в раздельных директориях.
В следующей части я расскажу о том, как научить систему синтезировать речь и понимать нас.
Спасибо за внимание ;)
UPD: Часть 3
Первой жертвой нашего интереса станет система видеонаблюдения.
Что, зачем и почему
Как я уже писал, ядром нашей системы станет персональный компьютер. К нему мы подсоединим все наши системы и именно он будет всем этим управлять. Требования к железу исходят из необходимых задач, но для нас хватит и не шибко мощного. В моем случае, главное требование было бесшумность и маленький размер системного блока. Выбор пал на моноблок. Intel Atom — в качестве процессора и жесткий диск на SSD для уменьшения шума. Операционной системой выступает Ubuntu Linux. Выходит в достаточно приемлемые деньги. Выглядит примерно так:
Вернемся к нашим баранам. Как я уже писал, видеонаблюдение будем строить на основе простеньких USB web-камер, дополнительной опцией которых может выступать микрофон. Например, таких:
Для соединения я использовал длинные USB-кабеля с активным усиленителем, либо 5-метровые кабеля с ферритовыми кольцами и USB-хабы с блоками питания. Особое внимание необходимо уделить качеству этих элементов.
Этого вполне достаточно для организации нашей системы видеонаблюдения. Можно так же рассмотреть возможность подключения аналоговых и IP камер, но я исходил из стоимости решения и подручных материалов :)
Софт
Будем считать, что камеры подключены к нашему компьютеру — проблем это вызвать не должно. Перейдем к самому интересному — программной части.
Если вы приобрели современные камеры, скорее всего не потребуется никаких дополнительных телодвижений для того, чтобы ее увидела ОС. В моем случае, к системе подключено 4 веб-камеры. Проверим это:
nix@nix-boss:~$ ls /dev/video*
/dev/video0 /dev/video1 /dev/video2 /dev/video3
Как видно, система их опознала. Никаких действий, кроме подключения в USB-разъем я не производил. Если вы не увидите в выводе никаких устройств, скорее всего придется погуглить драйвер для вашей камеры.
Для себя я решил что буду снимать с камер не видео-поток, а снимки раз в секунду. Плюсы очевидны:
- Меньше траффик при просмотре через WEB (хочется иногда смотреть и с телефона по GPRS)
- В перспективе — детектор движения на основе анализа изображений и использование нейронных сетей для своих целей
Для всего этого мы будем использовать программу под названием motion. В Ubuntu ставится весьма просто:
sudo apt-get install motion
Конфигурационный файл находится по умолчанию в /etc/motion и называется, как ни странно, motion.conf :)
Открываем, редактируем, приводим приблизительно к следующему виду:
daemon off
process_id_file /var/run/motion/motion.pid
setup_mode off
# Устройство, с которого осуществляется захват
videodevice /dev/video0
v4l2_palette 8
input 8
norm 0
frequency 0
rotate 0
# Ширина снимков с камеры
width 320
# Высота снимков с камеры
height 240
framerate 2
minimum_frame_time 0
netcam_tolerant_check off
auto_brightness off
brightness 0
contrast 0
saturation 0
hue 0
roundrobin_frames 1
roundrobin_skip 1
switchfilter off
threshold 1500
threshold_tune off
noise_level 32
noise_tune on
despeckle EedDl
smart_mask_speed 0
lightswitch 0
minimum_motion_frames 1
pre_capture 0
post_capture 0
gap 60
max_mpeg_time 0
output_all off
output_normal off
output_motion off
# Качество снимков
quality 50
ppm off
ffmpeg_cap_new off
ffmpeg_cap_motion off
ffmpeg_timelapse 0
ffmpeg_timelapse_mode daily
ffmpeg_bps 500000
ffmpeg_variable_bitrate 0
ffmpeg_video_codec swf
ffmpeg_deinterlace off
# Делаем снимок раз в секунду
snapshot_interval 1
locate off
# Текст в правом нижнем углу снимка. В данном случае - время
text_right %Y-%m-%d\n%T-%q
# Текст в левом нижнем углу
text_left CAMERA %t
text_changes off
text_event %Y%m%d%H%M%S
# Удваиваем размер текста на снимке
text_double on
# Куда сохраняем
target_dir /opt/data/current/video0
# Сохраняем снимок под именем camera.jpg (файл будет перезаписываться раз в секунду)
snapshot_filename camera
jpeg_filename camera
movie_filename %v-%Y%m%d%H%M%S
timelapse_filename %Y%m%d-timelapse
# Выключаем встроенный веб-сервис, нам не нужен
webcam_port 0
webcam_quality 50
webcam_motion off
webcam_maxrate 1
webcam_localhost on
webcam_limit 0
control_port 0
control_localhost on
control_html_output on
track_type 0
track_auto off
track_motorx 0
track_motory 0
track_maxx 0
track_maxy 0
track_iomojo_id 0
track_step_angle_x 10
track_step_angle_y 10
track_move_wait 10
track_speed 255
track_stepsize 40
quiet on
sql_log_image off
sql_log_snapshot on
sql_log_mpeg off
sql_log_timelapse off
sql_query insert into security(camera, filename, frame, file_type, time_stamp, event_time_stamp) values('%t', '%f', '%q', '%n', '%Y-%m-%d %T', '%C')
; mysql_db db
; mysql_host localhost
; mysql_user user
; mysql_password password
# У меня есть еще 3 камеры ;)
thread /etc/motion/thread1.conf
thread /etc/motion/thread2.conf
thread /etc/motion/thread3.conf
В конфигах threadX.conf все параметры аналогичны базовому, изменяются только необходимые строки
videodevice /dev/video1
text_left CAMERA 2
target_dir /opt/data/current/video1
Т.е. адрес устройства камеры в ОС, текст на снимке и директория сохранения.
Я убрал комментарии из файла конфигурации, дабы не занимать слишком много места. Ознакомиться с ними можно в оригинальном файле конфигурации motion. Он очень подробно описан. Изменения от оригинального файла конфигурации помечены моими комментариями.
Теперь нам необходимо создать нужные директории и проверить работоспособность конфига:
nix@nix-boss:~$ mkdir /opt/data/current/video0 (и далее)
nix@nix-boss:~$ sudo motion -c /etc/motion/motion.conf
Заходим поочередно в наши папки с камерами и просматриваем файлы camera.jpg. Если все сделано верно, мы увидим различные изображения с наших камер.
Итого
В этой статье мы научились получать изображение с наших камер и сохранять их в виде снимка раз в секунду в раздельных директориях.
В следующей части я расскажу о том, как научить систему синтезировать речь и понимать нас.
Спасибо за внимание ;)
UPD: Часть 3