Делаем из Raspberry Pi Видеорегистратор

Как это будет работать?

Задача Raspberry Pi оборудованной камерой и датчиком движения, записать видео на подмонтированный ресурс файл-сервера. В качестве файл-сервера подойдет любой компьютер на базе Linux или маздая с расшаренным Samba-ресурсом. Если у вас более одного Raspberry Pi используемого в качестве камеры, то на расшаренном ресурсе есть смысл создать каталоги с названием помещений, где будут работать камеры на базе Rasberyy Pi.
Название файлов будут содержать дату и время создания (это просто удобнее чем в виде порядкового номера).
Чтобы хранилище не переполнялось, в Cron на одной из камер будет запущен скрипт, который будет удалять старые файлы.
События будут писаться после того, как отработает датчик движения, и продолжаться еще какое-то время, которое вы определите сами.
Для просмотра видеоинформации можно использовать любой плейер понимающий кодек H264. Так же можно смотреть все на другом Raspberry Pi, с помощью omxplayer, или я предполагаю, что можно использовать дистрибутивы с XBMC.
Конечно это не может сравниться с промышленными образцами видеорегистраторов, но учитывая их стоимость, и стоимости всех лицензий, включая лицензии на камеры — это не плохое решение! Обуревшие до предела производители софта не оставляют нам шансов!

Преступим:

Детали:

Raspberry Py
Корпус для Raspberry Ry
Датчик движения (PIR Motion sensor) HC-SR501 (подробнее тут)
pir_module_1-150x150

PIR_OUT_NAME

Камера для Raspberry Pi
Камера для Raspberry Pi

Конструкция

Собираем конструкцию как показанно на рисунках:
IMG-20130830-00212

IMG-20130827-00207

IMG-20130829-00210

IMG-20130829-00211

IMG-20130830-00214

Камера

Подсоедините камеру к разъему возле ethernet синей ленточкой к ethernet. Просверлите в корпусе отверстие для вывода камеры и для ее крепежа! Будьте внимательны! При креплении камеры её плату нельзя перегибать, даже слабо! Потому, что тогда из неё выпадает передний разъем!

Датчик движения

Датчик движения крепится с наружной стороны корпуса для Raspberry Pi двумя длинными винтами м2.5 и гайками м2.5.
Далее подъсоедините датчик к назъему GPIO как показанно на схемах (Расположение контактов датчика смотрите выше):
pir_module_circuit_1

gpio

Всё! С железом мы справились! Теперь пишем рабочие скрипты:

ПО

Создадим скрипт на питоне, как показанно тут
http://www.raspberrypi-spy.co.uk/archive/python/pir_1.py и немного его доработаем. Суть доработки, это запуск камеры в режиме записи.

vi /usr/local/bin/wideo-service.py
#!/usr/bin/python
# Import required Python libraries
import RPi.GPIO as GPIO
import time

# Use BCM GPIO references
# instead of physical pin numbers
GPIO.setmode(GPIO.BCM)

# Define GPIO to use on Pi
GPIO_PIR = 7

print "PIR Module Test (CTRL-C to exit)"

# Set pin as input
GPIO.setup(GPIO_PIR,GPIO.IN)      # Echo

Current_State  = 0
Previous_State = 0

try:

  print "Waiting for PIR to settle ..."

  # Loop until PIR output is 0
  while GPIO.input(GPIO_PIR)==1:
    Current_State  = 0
 print "  Ready"

  # Loop until users quits with CTRL-C
  while True :

    # Read PIR state
    Current_State = GPIO.input(GPIO_PIR)

    if Current_State==1 and Previous_State==0:
      # PIR is triggered
      print "  Motion detected!"

      #import os
      #os.system("/usr/local/bin/capthure.sh")

      import datetime
      now_time = datetime.datetime.now()

      import subprocess
      subprocess.call("raspivid -t 60000 -w 1024 -h 768 -o /mnt/video/VIDEO/'%s'.h264" % now_time.strftime("%d.%m.%Y_%H.%M.%S"), shell=True)

      # Record previous state
      Previous_State=1
    elif Current_State==0 and Previous_State==1:
      # PIR has returned to ready state
      print "  Ready"
      Previous_State=0

    # Wait for 10 milliseconds
    time.sleep(0.01)

except KeyboardInterrupt:
  print "  Quit"
# Reset GPIO settings
  GPIO.cleanup()

Скачать скрипт

Теперь создадим точку монтирования и напишем скрипт для монтирования и очистки просроченных записей видео-событий.

mkdir /mnt/video/
vi /usr/local/bin/inspect.sh
#!/bin/bash
if [ -d /mnt/video/VIDEO ];then
        echo "Сервер замонтирован"
else
        echo "Монтируем сервер"
mount.cifs //SERVER/SHARE/ /mnt/video/ -o username=username,password=passwd,domain=DOMAIN
fi

# очистка старых файлов
# +1 один день на зад
day=1
echo "Очищаем старые файлы за ${day} дней"
find /mnt/video/VIDEO/ -type f -mtime +${day} -delete

Тут подразумевается, что на сервере есть каталог VIDEO. Я рекомендую его назвать по имени охраняемого помещения.

Теперь осталось позаботиться о том, чтобы скрипт запустился при загрузке и в Cron. Почему в Cron? А, чтобы постоянно проверял наличие замонтированного каталога и чистил старые файлы.

vi /etc/rc.local
...
/usr/local/bin/inspect.sh
/usr/local/bin/wideo-service.py
exit 0
crontab -e
* */1 * * * /usr/local/bin/inspect.sh

Что можно добавить?
Я рекомендую кроме запуска камеры посылать на пост охраны по Jabber или Winpopup сообщения о наличии движения в помещении. Это не сложно и я описывать это не буду, всё можно сделать по аналогии с запуском камеры.
Как подключить к Raspberry Pi Jabber службу — читайте тут: http://linux.cpms.ru/?p=7711

Запись опубликована в рубрике Linux, Raspberry. Добавьте в закладки постоянную ссылку.

23 комментария на «Делаем из Raspberry Pi Видеорегистратор»

  1. Александр говорит:

    Спасибо за статью.
    А как можно наложить на видео текущую дату\время?

    • sergey говорит:

      Интересный вопрос! Тут же надо еще учесть малую вычислительную мощность и работу через GPU. Стандартными средствами тут наверно не обойтись.
      Честно говоря не знаю пока.

  2. Михаил говорит:

    Сергей здравствуйте, у меня возникла подобная идея, только вот не знаю как её реализовать и в обще можно ли её воплотить в жизнь?
    Идея такова:
    две камера расположены в машине, одна смотрит вперёд другая назад, подключено к Pi, пишется всё например на флешку или внешний жёсткий диск.
    Питание идёт от бортовой сети, НО когда машина заглушена, то питание подаётся с батареи от упски, которая в свою очередь начинает заряжаться тогда, когда машина заведена.
    Ну и главный вопрос, дешевле ли это будет чем купить уже готовое решение?

    • sergey говорит:

      Михаил, сделать конечно можно все, но тут будут проблемы.
      1 на флешку надо будет писать огромными файлами. Причем одинакового размера. Иначе флешка быстро ушатается. То есть, так как это делается на видеорегистраторах.
      Или придется подключать usb-хаб, запитывать его и в него сувать жесткий диск. Но из практики, такая конструкция не надежна.
      2 с камерами тоже не все понятно. Либо надо ставить две малины с родными камерами, либо использовать малину как сервер для записи других веб камер.
      Но по деньгам это уже сопоставимо с двукамерным промышленным видеорегистратором. Потом это обилие проводов под обшивкой салона, питание нужно не 12 а 5 вольт.

      Думаю, лучше не заморачиваться. Я бы не стал.

  3. Саркис говорит:

    Здравствуйте! Не подскажете, где приобрели компоненты для данного проекта?

    • sergey говорит:

      В Москве продаются в Тераэлектроника
      http://terraelectronica.ru/
      Но можно заказать и в http://www.cooking-hacks.com/shop/raspberry-pi

      А если нужно дешево, то лучше в китайских интернет магазинах. Там же недорогие малины их производства. У них платы красные.

      • Саркис говорит:

        Спасибо. Тераэлектронику приметил уже, однако хотел купить из другого магазина. Хорошо что вы предупредили, что красные платы — китайские. А для питания Raspberry Pi, и для периферии достаточно банального активного ( с внешним питанием) usb-hub’а?
        P.S. корпус вы на вышеупомянутой тераэлектронике нашли?

        • sergey говорит:

          А они все в Китае делаются. Просто красные как бы не совсем лицензионные и их можно продавать только в Китае. Но они такие же только дешевле.
          Жесткие диски запитывать надо от активного блоки хаба. А флешки оно и так тянет. Блок питания нужен на 2 ампера.
          Корпуса я покупал в Тере. Но это все не только в Тере продается. По москве уже много фирм продают.

  4. Саркис говорит:

    Спасибо за информацию. Еще вопрос, откуда вы взяли распиновку ножек? Искал в сети datasheet по Raspberry, находил только гайд по первоначальной установке.

  5. Гринго говорит:

    А можно скрипт проверки движения сделать в режиме демона?! Насколько я в курсе внешних прерываний на малине нет?! Или как в данном случае будет возможна параллельная работа с малиной?

  6. Саркис говорит:

    Сергей, у меня еще один к Вам вопрос. Как вы воспроизводили записанное видео?
    omxplayer -o local name.h264 не работает, выдает только следующее:

    P.S. Есть удобная библиотека для работы с камерой для RPi, python-picamera, ссылка:

  7. IvanSerov говорит:

    Если использовать программу motion, то можно обойтись без датчика движения. В ней можно установить любые параметры записи, в том числе по движению. А также имя файла, имя папки, как долго будет происходить запись, временные интервалы и прочее

  8. Александр говорит:

    Здравствуйте. а можно ли сделать тоже самое только с usb веб камерой? и как сделать чтобы видео или фото с камеры писались на жесткий диск?

    • sergey говорит:

      Там же написано. Диск монтируется по сети. Если вы желаете подключить внешний диск непосредственно к устройству, то вам надо его запитывать отдельно.
      Я думаю в этом нету смысла.

  9. evgen говорит:

    Присоединяюсь к вопросу о motion. Пробовал её с USB камерой по статье в Хакере за май 2013 г. При разрешении 640 х 480 и выше тормозит сильно. Не хватает знаний, как запустить motion с модулем камеры.

  10. Олег говорит:

    Пробовал motion максимальное разрешение смог сделать HD 1280×720 больше 5 кадров не тянет не успевает писать наверно из-за карточки!
    Да! там есть soft обработка движения, но она заторможенная если просто пройти мимо объектива она распознает движение, но писать начинает когда в поле зрения уже нет движения!
    Да! на кадр наносится время дата номер кадра!
    Как объединить два решения это и предыдущее http://linux.cpms.ru/?p=7732
    Живая камера (WEB) и запись по движению!
    Я так понял наиболее тактично с камерой работают raspistill и raspivid!
    Здесь http://habrahabr.ru/post/200934/ FSwebcam применяют но не видел решения его с камерой raspi!

  11. Александр говорит:

    А можно пример видео?) пока разбираюсь с Rpi.. прихожу к мысле — что качество видео будет на уровне дешевого китайского регистратора за 1000р.. тогда смысла вкладывать более 6000р нет…

  12. Виктор говорит:

    На RPi B+ в motion успевает отрабатывать анализ записи по движению с 640х480 при 2 кадрах сек. Камера родная RPi Cam. На даче следит. Пишет на yandex disk. Motion имеет много настроек.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Анти-спам: выполните заданиеWordPress CAPTCHA