Pull to refresh

«Умный дом» собственными руками. Часть 2. Видеонаблюдение

Computer hardware
В прошлой статье (линк) мы ознакомились с теоретической частью построения нашего «умного дома» и определились с используемыми технологиями. Теперь начнем реализацию практической части :)

Первой жертвой нашего интереса станет система видеонаблюдения.


Что, зачем и почему



Как я уже писал, ядром нашей системы станет персональный компьютер. К нему мы подсоединим все наши системы и именно он будет всем этим управлять. Требования к железу исходят из необходимых задач, но для нас хватит и не шибко мощного. В моем случае, главное требование было бесшумность и маленький размер системного блока. Выбор пал на моноблок. Intel Atom — в качестве процессора и жесткий диск на SSD для уменьшения шума. Операционной системой выступает Ubuntu Linux. Выходит в достаточно приемлемые деньги. Выглядит примерно так:

image

Вернемся к нашим баранам. Как я уже писал, видеонаблюдение будем строить на основе простеньких USB web-камер, дополнительной опцией которых может выступать микрофон. Например, таких:

image

Для соединения я использовал длинные USB-кабеля с активным усиленителем, либо 5-метровые кабеля с ферритовыми кольцами и USB-хабы с блоками питания. Особое внимание необходимо уделить качеству этих элементов.

image
image

Этого вполне достаточно для организации нашей системы видеонаблюдения. Можно так же рассмотреть возможность подключения аналоговых и 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
Tags:
Hubs:
Total votes 95: ↑85 and ↓10 +75
Views 54K
Comments Comments 88