Raspberry pi камера: делаем своими руками по шагам

Видеонаблюдение для частного дома или дачи: камера для домашнего слежения с записью своими руками

Всем привет, сегодня я расскажу, как собрал свою систему камер наблюдения для дома на базе камеры Raspberry Pi и двух веб-камер, 1080P A4 – Tech и камера низкого разрешения A4 – Tech. К Raspberry Pi можно подключить и большее число камера, но я предлагаю ограничиться двумя-тремя веб-камерами.

Замечу, что в этой статье не будет речи о том, как получить доступ к системе слежения с посторонних устройств (доступ только через домашнюю сеть), лишь о том, как легко и просто установить дома или на даче систему видеонаблюдения.

Вот список использованных мной запчастей:

  • Raspberry Pi 2 Model B
  • (я покупал свою плату в 2015 году, когда Raspberry Pi 3 Model B еще не вышла. Если вы собираетесь устанавливать видеонаблюдение для частного дома своими руками, я советую взять самую последнюю модель Raspberry)
  • Теплоотвод
  • Кейс и кулер
  • Карта памяти
  • A4Tech Full HD 1080p веб-камера
  • A4 – Tech веб-камера
  • Wi-Fi адаптер (если возьмете Raspberry Pi 3 Model B, то там встроенный)
  • переходник VGA-HDMI

Теплоотвод и кулер использовать необязательно, это зависит от вас, хотя, по-моему, это очевидно, что в результате сьемки фото и видео температура будет расти. Но, повторюсь, система охлаждения опциональна.

Шаг 1: Установка ОС

У вас на руках имеется новая Pi и вы теряетесь в догадках, что вам дальше нужно сделать, чтобы в итоге у вас получилась система видеонаблюдения из нескольких камер, которые реагируют на движение и начинают видео- или фотосъемку.

Вот что вам нужно сделать:

Загрузите последнюю версию ОС здесь, я установил RASPBIAN JESSIE WITH DESKTOP версию «2017-07-05», последнюю ко времени написания этой инструкции.

Шаг 2: Этчер (Etcher)

Запишите это приложение на свою SD-карту, загрузите и установите. Его легко использовать. Запись изображения займет всего пару минут, в зависимости от мощности вашего компьютера, после этого на карте останется всего пара свободных МБ, не паникуйте, так и должно быть.

Шаг 3: Карта памяти

Вставьте SD-карту в разъем Raspberry Pi, помните – во время первичной инсталляции протокол безопасной оболочки (SSH) отключен по умолчанию, поэтому вся работа сейчас заключается в подключении монитора в разъем HDMI, вам понадобится переходник VGA-HDMI. Протокол необходимо включить, чтобы у вас был доступ к системе с других устройств, используя PuTTY-клиент, если вам понадобится отключить или перезагрузить свою PI систему.

Как только интерфейс Raspberry Pi запустился, в командной строке наберите следующую команду:

После этого появится список опций, как на картинке в следующем пункте

Шаг 4: Включение протокола безопасной оболочки

Выберите #5 и в следующем выпадающем окошке выберите P2 SSH, после этого протокол безопасной оболочки будет включен.

Для установки свежей версии raspbian вы должны установить пароль root вручную (если вы не знаете дефолтного пароля), для этого в командной строке введите следующую команду:

Шаг 5: Root-доступ

Вы должны помнить, что некоторые команды доступны только root-пользователю (пользователю с неограниченными правами доступа), поэтому вы должны зарегистрироваться как root-пользователь, чтобы осуществлять задачи администрирования. Для этого напечатайте su в командной строке и введите свой root-пароль.

Войдя как root-пользователь, введите в командной строке эту команду для обновления зависимых объектов PI:

Шаг 6: Дополнительные настройки

Для программы Motioneye требуются несколько зависимостей для включения некоторых функций. Вам нужно будет установить эти зависимости, чтобы иметь доступ ко всем функциям Motioneye. Начнем с установки FFmpeg для видео, для этого введите эту команду:

После загрузки установите программу в свою PI систему. Для этого вам нужны root-привилегии (о чем я говорил в предыдущем пункте).

Шаг 7: Удаление лишних библиотек

Вы должны убедиться, что у вас нет библиотек-дубликатов, чтобы ваша камера безопасности работала надлежащим образом. Удалите программные пакеты, которые будут мешать работе Motioneye:

Шаг 8: Добавление нужных зависимостей

Установите другие нужные зависимости, используя эту команду:

Шаг 9: Добавление Motioneye

Загрузите программный пакет Motioneye:

Шаг 10: Создание конфигурационной папки

Создайте конфигурационную папку:

Шаг 11: Создание скрипта инициализации

Создайте скрипт инициализации, добавьте его в автозапуск, чтобы он сразу запускал Motioneye:

Шаг 12: Завершение установки

Установка ПО завершена, теперь у вас есть система видеонаблюдения на базе Raspberry Pi. Для доступа к конфигурации вам нужен ваш Raspberry IP-адрес. Есть два способа узнать его:

  1. Если вы еще соединены со своим Raspberry Pi, просто введите в командной строке ifconfig
  2. Или войдите в панель управления роутера и посмотрите свой Raspberry Pi IP-адрес там

Если вы нашли свой IP-адрес, введите его в своём браузере: Your-raspberry-ip-address:8765, перед вами появится форма входа пользователя в систему.

Шаг 13: Базовая установка Motioneye

Когда вы обратитесь к IP адресу Raspberry, перед вами возникнет форма авторизации, по умолчанию пользователь – admin, поле пароля оставьте пустым.

Шаг 14: Подключаем веб-камеры

Подключите веб-камеры к своей самодельной системе домашнего видеонаблюдения, подождите несколько секунд, чтобы Raspberry их «увидела».

Шаг 15: Расширенные настройки

Когда вы будете добавлять камеры, вам нужно будет получить доступ к расширенным настройкам Motioneye.

Шаг 16: Уровень яркости

Функция «Автоматическая яркость» доступна только если камера ее поддерживает, одна из моих камер — 1080P A4-Tech – как раз поддерживает.

Шаг 17: Настройки захвата изображения

Настройки захвата изображения при фиксации движения.

Качество изображения: думаю не нужно объяснять, что это зависит только от вас.

Режим захвата: здесь три режима. Я пользовался только «Движение зафиксировано» — в этом режиме снимок делается при зафиксированном движении.

Хранение изображений: продолжительность хранения изображений на SD-карте.

Шаг 18: Настройки видео

Настройки записи видео такие же, как и настройки захвата изображения.

Шаг 19: Фиксация движения

Настройки фиксации движения вашей камеры наблюдения, также можно скорректировать некоторые дефолтные настройки.

Порог изменения кадра: у камеры достаточно чувствительный, моя проверка показала 5%. Камера фиксирует малейшее изменение изображения, когда я просматривал записи в журнале камеры, я нашел фото и видео записи проходящих людей.

Интервал движения: временной интервал между движением и отсутствием движения.
Фиксация до и Фиксация после: думаю, это понятно.

Минимальное количество кадров движения: количество кадров, которое камера определяет как движение. Если камера фиксирует движение, она пропускает два кадра и проверяет, если это движение то же самое. Если совпадений не будет, камера начинает делать снимки и вести видео. Эти настройки определяются границей смены кадра.

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

Скрытая камера на Raspberry Pi для съемки животных

Вы любите сидеть сложа руки и восхищаться красотой нашего мира, в то время как птицы счастливо чирикают и поют свои песни? Может быть вы помните какие захватывающие кадры природы снимают различные каналы о природе, когда камера находится в самой гуще событий. Мы сделаем скрытую камера на основе Raspberry Pi, благодаря которой вы сможете стать настоящим натуралистом и снимать животных, которые ни о чем не подозревают.

Шаг 1. Суть камеры

Обычно такие скрытые камеры имеют возможность обнаружения движения, которая запускает процесс съемки каждый раз, когда что-то появляется в поле зрения. В таких камерах обычно используют PIR для запуска съемки или записи видео.

К сожалению, использование PIR может привести к тому, что камера не будет запущена или объект съемки исчезнет полностью до срабатывания камеры. С помощью камеры в проекте мы можем решить эту проблему, избавившись от PIR и вместо этого используя систему обнаружения. Мы также сможем фиксировать события, которые происходят до обнаружения движения (благодаря возможностям программного обеспечения), что увеличивает вероятность получения идеальных фото или видео.

Главное теперь взять с собой Raspberry Pi и порыться на кухне в поисках пластмассового контейнера для продуктов.

Если вы используете модуль No-IR Pi Camera (без инфракрасного фильтра) и некоторые ИК-светодиоды, вы можете сделать камеру с возможностью ночного видения.

Чтобы сделать проект проще мы используем с нашей Raspberry Pi библиотеку MotionEyeOS. Она предназначена для видеонаблюдения, но идеально подходит для нашей камеры, поскольку поддерживает неподвижные изображения, а также делает запись видео качества HD, плюс обладает возможностью обнаружения движения.

Шаг 2. Что нужно

Чтобы создать эту простую камеру, вам понадобятся следующие комплектующие:

  • Рекомендуется использовать Raspberry Pi 3 Model B +, но вы можете использовать любой Pi (включая Zero).
  • MicroSD Card – используйте Class 10 для лучшей производительности и большей емкости для большего времени записи.
  • Pi камера – рекомендуется модуль камеры Pi V2, но также будут работать USB веб-камеры.
  • Используйте инфракрасный фильтр для Pi камеры с инфракрасными светодиодами для ночного видения.
  • Портативный аккумулятор с USB-выходом. Выберите большую емкость аккумулятора для более длительного времени работы.
  • Пластиковый контейнер для пищевых продуктов. Используйте один с герметичной крышкой, способной обеспечить защиту от атмосферных воздействий.

Дополнительные детали, которые можно рассмотреть:

    Дополнительная камера (камеры) – для многонаправленной записи.

Вам потребуется небольшой набор инструментов:

  • Отвертка.
  • Горячий клей.
  • Электрическая дрель.
  • Доп. инструменты.

MotionEyeOS – загрузите соответствующий файл изображения для вашей модели Pi.
Win32DiskImager – используется для записи файла образа MEYEOS на карту MicroSD.
WinSCP – не требуется, но удобен для загрузки нескольких медиафайлов из Pi за один раз.

Шаг 3. Создание бокса для Raspberry камеры

Фотографии выше демонстрируют примерный процесс.

  1. Используя маркер, нарисуйте контур объектива камеры на стене контейнера (включая ИК-светодиоды, если используете).
  2. Используя сверло с конусом, сверлите из центра контуров и вырежьте отверстия, пока вы не перестанете видеть границы маркерных отметок.
  3. Используйте инструмент для обрезки и очистки отверстий, если это необходимо.
  4. Если вы устанавливаете дополнительный навес/щит для защиты от дождя, отрежьте его по размеру и закрепите на месте горячим клеем.
  5. Прикрепите кабель от камеры к модулю камеры (следуйте инструкциям, прилагаемым к вашей камере).
  6. Используйте горячий клей для надежного крепления модуля камеры – старайтесь избегать приклеивания к компонентам модуля, это упростит удаление камеры из коробки позже.
  7. Поместите все в коробку.

Шаг 4. Настройка Raspberry Pi

Если вы уже знакомы с малиной Pi, этот шаг, вероятно, будет вам не интересен и вы можете его пропустить.

Установка операционных систем:

Чтобы настроить свою Raspberry Pi, выполните следующие действия:

  1. Вы можете загрузить последнюю версию файла изображения MotionEyeOS из своего GitHub.
  2. После того как вы загрузили изображение, вам нужно его извлечь, для этого используйте winRAR или другие программы.
  3. Вставьте карту MicroSD в компьютер и запишите файл изображения. Если у вас Windows используйте Win32DiskImager.
  4. После завершения записи изображений извлеките карту MicroSD из своего компьютера, вставьте в Raspberry Pi и затем включите ее.
  5. Как только Pi включится и загрузится (как правило, занимает около 30 секунд), к нему можно получить доступ через веб-браузер, вам просто нужно узнать имя хоста или IP-адрес, а затем ввести его в адресную строку браузера.

Легкий способ найти IP-адрес Pi – это консоль управления веб-маршрутизатором. Обычно это делается путем ввода его IP-адреса в адресной строке веб-браузера (например, http://192.168.0.1).

Шаг 5. Настройка MotionEyeOS

На данный момент вы создали свой бокс, подготовили SD-карту Pi, включили все и получили доступ к веб-консоли MotionEyeOS. Пришло время настроить MotionEyeOS в соответствии с вашими требованиями. Ссылки на библиотеку на GitHub мы приводили выше.

Когда вы сначала пытаетесь войти в систему MotionEyeOS, вам будет предложено ввести учетные данные, по умолчанию используется имя пользователя: admin и пароль по умолчанию: –blank–.

Веб-интерфейс достаточно интуитивно понятен, поэтому у вас не должно быть особых проблем:

  1. Рекомендуется установить пароль для двух учетных записей по умолчанию (Admin и User).
  2. Установите правильный часовой пояс, чтобы на мультимедийных файлах была установлена ​​правильная отметка времени.
  3. Включите Wi-Fi и введите свои учетные данные Wi-Fi, вам не нужно подключаться к кабелю Ethernet.
  4. Установите желаемую частоту кадров камеры и разрешение (например, 1-10 кадров в секунду и 1920×1080).
  5. Установите хранилище файлов – оставьте по умолчанию, если используете SD-карту, измените, если используете USB-накопитель.
  6. Вы можете выбрать, нужно ли записывать неподвижные изображения (фото) или видео или оба варианта одновременно.

Поскольку у нас будет скрытая камера для съемки животных, мы будем использовать функцию «Обнаружение движения». Это позволяет событию “движение” инициировать захват и запись изображений и/или видео. Обнаружение движения достигается путем обнаружения изменений в пикселях изображения камеры с учетом различных параметров, которые можно настроить.

Мы используем следующие настройки обнаружения движения – ниже, но предлагаем вам поиграть с опциями до тех пор, пока вы не найдете то, что работает для вас, поскольку каждый сценарий немного отличается:

  • Frame Change Threshold = 1.5%
  • Auto Noise Detection = Off
  • Noise Level = 12%
  • Light Swith Detection = 0% (disabled)
  • Despeckle Filter = Off
  • Motion Gap = 5 seconds
  • Captured Before = 5 frames
  • Captured After = 10 frames
  • Minimum Motion Frames = 5 frames

MotionEyeOS также предоставляет вам возможность включить маску обнаружения, что позволяет исключить области изображения из обнаружения движения.

После того, как вы закончите вносить изменения в настройки, нажмите кнопку «Применить», для обновления потребуется около 10-20 секунд. Обратите внимание, что некоторые изменения потребуют перезагрузки Pi.

Шаг 6. Размещаем камеру

Теперь, когда вы настроили саму Raspberry Pi камеру, пришло время ее разместить. Как вы это сделаете, во многом будет зависеть от того, что вы пытаетесь снять. В нашем случае мы покрыли камеру ветками. Наш “тайник” хорошо сливается с природой и не пугает животных. Но можно использовать, например, камуфляжную упаковку.

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

Длительность работы камеры во многом будет зависеть от емкости используемой батареи и есть ли у вас какие-либо дополнительные элементы, потребляющие электроэнергию (то есть ИК-светодиоды, USB-накопитель и т.п.).

Стоит также скачать, что MotionEyeOS дает вам возможность просматривать захваченные изображения и видео прямо из веб-интерфейса, что довольно удобно. Он также позволяет загружать отдельные мультимедийные файлы и сохранять их на свое устройство для последующего просмотра и совместного использования.

Raspberry Pi: Работа с камерой

В этой статье мы расскажем вам как подключить внешнюю камеру к Raspberry Pi. А также как, написав небольшую программу на Python, делать фотографии, снимать видео и применять графические фильтры к изображениям.

– Как правильно подключить камеру к Raspberry Pi;
– Как управлять камерой с помощью Python;
– Как использовать start_preview() и stop_preview() для вывода изображения с камеры;
– Как делать фотографии с помощью команды capture();
– Как записывать видео с помощью start_recording() и stop_recording();
– Как просматривать видео в программе omxplayer;
– Как изменять яркость и контраст на фотографиях, а также примернять визуальные эффекты.

Для повторения примеров из статьи вам понадобится камера “Camera Module” и одна из моделей Raspberry Pi.

Вот так выглядит модуль камеры для Raspberry Pi, приступим к подключению.

Подключение

Первым делом отсоедините питание от Raspberry Pi, найдите на плате порт для подключения камеры и аккуратно потяните его вверх за боковые выступы. Верхняя часть разъема поднимется примерно на 2 миллиметра и немного отойдет в сторону.

Опустите край кабеля от камеры в открывшийся разъем так, чтобы синяя метка была со стороны аудио разъёма, а контакты смотрели на HDMI разъём.

Аккуратно надавите на крышку разъёма для камеры и она закроется обратно. После подключения всё должно выглядеть как на фото:

Подключите питание, монитор, клавиатуру и мышка к Raspberry Pi и дождитесь пока система полностью загрузится. Из верхнего меню откройте основные настройки системы:

В появившемся окне перейдите во вкладку “Interfaces”, выберите “Enabled” в строчке Camera и нажмите кнопку OK. После включения камеры система попросит ее перезагрузить. Перезагрузите систему. Теперь камера подключена, попробуем с ней поработать.

Просмотр изображения с камеры

Для начала работы с камерой вам необходимо запустить приложение Python 3.

В открывшемся окне в меню выберите “New File” и скопируйте в него следующий код:

from picamera import PiCamera
from time import sleep

camera.start_preview()
sleep(10)
camera.stop_preview()

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

В меню выберите “Save” (или нажмите Ctrl+S) и сохраните файл с именем camera.py в домашнюю директорию вашего пользователя (т.е. просто в ту папку, которую вам прелагает система).

Для запуска программы нажимаем F5. Появится новое окно, в котором в течении следующих 10 секунд будет показано изображение с камеры. Если вы будете вращать камерой, то изображение будет двигаться. Получится примерно так:

Обратите внимание на то, что изображение с камеры будет показываться на экране только если вы подключили монитор. Если вы работает удаленно через SSH или VNC, тогда вы его не увидите.

Вы можете поворачивать изображение с камеры на 90, 180 и 270 градусов. Если вам необходимо повернуть изображени, например, на 180 градусов, то перед запуском превью укажите camera.rotation = 180.

camera.rotation = 180
camera.start_preview()
sleep(10)
camera.stop_preview()

Также вы можете установить прозрачность картинки командой camera.start_preview(alpha=200). Переменная alpha обозначает степень прозрачности и может быть от 0 дл 255.

Делаем первую фотографию

Для того, чтобы сделать фотографию вам необходимо воспользоваться командой camera.capture(). Немного измените код программы:

camera.start_preview()
sleep(5)
camera.capture(‘/home/pi/Desktop/image.jpg’)
camera.stop_preview()

Теперь ваша программа запускает превью, ждет 5 секунд, делает фото, сохраняет его на рабочий стол и закрывает превью. Между включением превью и захватом изображения нам необходимо подождать хотя бы 2 секунды, чтобы камера успела настроить уровень освещенности.

Сохраняете изменения и запускаете программу, нажав F5. На экране появится превью, а через 5 секунд на рабочам столе появится файл image.jpg с вайшей фотографией. Дважды кликните по картинке и она откроется!

Теперь добавьте в программу цикл и запустите ее. Она откроет превью, сделает 5 фотографий с интервалом в 5 секунд и закроет превью.

camera.start_preview()
for i in range(5):
sleep(5)
camera.capture(‘/home/pi/Desktop/image%s.jpg’ % i)
camera.stop_preview()

На рабочем столе появится 5 фотографий. В этом цикле переменная i менялась от 0 до 4, поэтому название первой фотографии будет image0.jpg.

Записываем видео

Для съёмки видео мы будем использовать команды начала и конца записи start_recording() and stop_recording(). Немного измените нашу программу:

camera.start_preview()
camera.start_recording(‘/home/pi/video.h264’)
sleep(10)
camera.stop_recording()
camera.stop_preview()

Запустите код кнопкой F5. Программа запустит превью и начнет записывать видео. Через 10 секунд видео закончится и будет сохранено в файл video.h264 в корневую папку вашего пользователя /home/pi/. Для просмотра видео воспользуйтесь программой omxplayer.

Откройте программу Терминал, нажав на иконку в верхнем меню:

По-умолчанию терминал открывается с локацией в домашней директории пользователя, поэтому для запуска видео вы можете просто ввести следующую команду и нажать Enter:

Откроется окно проигрывателя. Скорее всего видео будет проигрываться с более высокой скоростью, чем оно было записано, т.к. omxplayer использует большую частоту кадров.

Эффекты

Библиотека picamera для Python позволяет использовать большое количество настроект и фильтров, которые могут быть применены как к превью, так и к самой фотографии. Рассмотрим основные из них:

1. Изменение разрешения

По-умолчанию фотография делается такого разрешения, которое настроено на вашем мониторе, но вы можете его изменить с помощью команды camera.resolution(). Минимальное допустимое разрешение фотографий 64×64, а максимальное 2592×1944. Для видео оно составляет 1920×1080. Для использования максимального разрешения также необходимо будет уменьшить частоту кадров до 15 с помощью команды camera.framerate(). Для того чтобы сделать фотографию с максимальным разрешением добавьте следующие строчки перед запуском превью:

camera.resolution = (2592, 1944)
camera.framerate = 15

2. Добавление текста

Вы можете легко добавить поясняющий текст на фотографию, для этого используйте следующую команду после старта превью:

camera.annotate_text = “Hello world!”

Текст появится в верхней части фотографии. Для изменеия размера текста используйте команду camera.annotate_text_size. Размер текста можно изменять от 6 до 160, по-умолчанию используется 32.

Вы можете изменить цвет текста и фона за текстом. Для этого необходимо будет кроме PiCamera также импортировать Color

from picamera import PiCamera, Color

Для того, чтобы вывести желтый текст на синем фоне перед camera.annotate_text укажите следующий код:

camera.annotate_background = Color(‘blue’)
camera.annotate_foreground = Color(‘yellow’)

3. Настройка яркости и контраста

Вы можете настроить яркость на фотографии, установив ее от 0 до 100. По-умолчанию используется 50. Если вы хотите установить яркость, например, равной 70, то укажите следующий код после старта превью:

Для установки контраста используйте команду camera.contrast.

4. Визуальные эффекты

Вы можете использовать camera.image_effect для наложения большого числа различных визуальных эффетов: negative, solarize, sketch, denoise, emboss, oilpaint, hatch, gpen, pastel, watercolor, film, blur, saturation, colorswap, washedout, posterise, colorpoint, colorbalance, cartoon, deinterlace1, deinterlace2, none.

Чтобы применть эффект colorswap добавьте camera.image_effect = ‘colorswap’ после старта превью. С помощью следующей программы вы можете посмотреть все доступные фильтры. Код будет менять визуальные эффекты каждые 5 секунд:

camera.start_preview()
for effect in camera.IMAGE_EFFECTS:
camera.image_effect = effect
camera.annotate_text = “Effect: %s” % effect
sleep(5)
camera.stop_preview()

В результате вы получите примерно вот такой набор изображений с фильтрами:

5. Баланс белого

Для регулировки баланса белого вы можете использовать команду camera.awb_mode и выбрать один из нескольких режимов: off, auto, sunlight, cloudy, shade, tungsten, fluorescent, incandescent, flash и horizon. По-умолчанию используется режим auto. Например, для режима sunlight вам необходимо добавить следующий код после начала превью:

6. Экспозиция

Для выбора режима экспозиции воспользуйтесь командой camera.exposure_mode и выберите один из возможных режимов: off, auto, night, nightpreview, backlight, spotlight, sports, snow, beach, verylong, fixedfps, antishake и fireworks.

Полный список список функций и возможностей библиотеки picamera вы можете найти на официальном сайте.

Попробуйте сделать фотографии в разных режимах с применение различных фильтров. Это очень просто! В следующих статьях мы расскажем вам как сделать фотобудку для друзей или аппарат для съёмки мультиков!

Фотонаблюдение или timelapse видео на Raspberry Pi


Недавно у меня возникла необходимость соорудить некое подобие видеонаблюдения. Требования были довольно простые:

  • возможность наблюдать через интернет
  • не обязателен режим реального времени, достаточно вечером просмотреть основные события за день (скажем, узнать, сидит ли кто-нибудь за вашим любимым компом, пока вы на работе)
  • отсутствие необходимости тратить часы на отсмотр результатов
  • максимально возможное качество картинки
  • минимальная стоимость

Исходя из критериев, можно было бы остановиться на готовых решениях в виде IP-камер. Однако, проведенный на скорую руку анализ рынка показал, что в устройствах, стоимостью до $100, размер картинки редко превышает 640×480 точек, и, при этом, они не могут похвастать хорошими возможностями для настройки софта. То есть, вполне возможно, что купив такую камеру, вам придется мириться с кривизной заводской прошивки и невозможностью в полной мере реализовать свои замыслы.

В противовес готовым решениям, самоделка на Raspberry Pi – это достаточно недорого, куда более увлекательно, и гораздо более гибко, благодаря полноценной ОС на борту и терабайтам готового софта на любой вкус.

Для решения описанных задач был придуман следующий алгоритм работы:

В начале дня (по расписанию) в системе запускается процесс, который делает фотоснимки с некоторым интервалом (скажем, раз в минуту), сохраняет их локально на карту памяти и тут же выкладывает на какой-нибудь облачный диск по WebDAV протоколу. Это обеспечивает некоторое подобие «живого» наблюдения, которое, хоть и не требуется по условиям, но является приятным бонусом. В конце дня (тоже по расписанию) процесс фотосъемки прерывается и запускается сборка видеофайла из фотографий. По окончании сборки, видео выкладывается на тот же облачный диск, что дает возможность быстрого удаленного просмотра цельной avi-шки, без необходимости переключения между фото-файлами (10 часов работы, по кадру в минуту, дадут общий хронометраж видео – всего около минуты, при 10 fps).

В таком подходе, конечно, не реализуется видеонаблюдение в его привычном виде, но решаются все поставленные задачи. Кроме того отпадает необходимость покупать у провайдера выделенный IP, чтобы подключаться к камере напрямую, а также нет нужды заводить отдельный сервер видеонаблюдения, потому что его функции хранения и доступа к данным перекладываются на бесплатный сервис (например Яндекс.Диск).

Итак, железо:
  • Raspberry Pi ($50-$60 в наших краях): я использовал model B, ту что c Ethernet, двумя USB и 256 Мб ОЗУ
  • Logitech C270 ($20): относительно дешевая и популярная HD (1280×720) веб-камера, соответствующая спецификации UVC (как следствие, без проблем работающая в Linux системах)
  • Зарядка от iPhone ($10): на самом деле айфон, конечно, ни при чем, подойдет любой источник питания с выходным током от 1А и разъемом micro-USB. Можно найти китайские импульсные зарядки не дороже $2 за штуку, только проверять их надо тщательно.
  • SD карта на 4 Гб ($6): четыре гига — минимальный объем карты для комфортной работы.
  • Корпус для малины ($1): сделан с помощью дремеля из более-менее подходящей коробки, купленной в строительном гипермаркете.

В сборе все выглядит примерно так:

Поскольку это мой первый опыт работы с Raspberry, чуть-чуть остановлюсь на вещах, возможно уже известных более продвинутым пользователям.

Первый нюанс – это питание периферийных устройств. Дело в том, что при включении Raspberry от одноамперного источника, USB портам достается совсем немного тока. В итоге у меня не получилось подключить одновременно веб-камеру и USB Wi-Fi dongle, или две веб-камеры: одно из устройств работало стабильно, а другое сначала вроде бы заводилось в системе, но через минуту просто отказывалось работать.

Второй нюанс – количество USB портов. Их в малинке всего два, а значит подключить камеру, клавиатуру и wi-fi одновременно не получится. Однако есть пара решений.

Во-первых можно подключить к Raspberry питающий USB хаб, а в него уже воткнуть всю необходимую периферию. У меня, например, все работало с таким:

Это увеличит число доступных портов и даст им всем достаточно тока, хотя и потребует занять еще одну розетку 220В.

Во-вторых, имеет смысл управлять малиной по SSH – тогда не нужно подключать ни клавиатуру, ни мышь, ни монитор. А если очень хочется увидеть графическую оболочку, то можно установить VNC server и получить удаленный доступ к рабочему столу. Делается это примерно так:

запуск сервера на первом порту:

Теперь подключиться к «малиновому» VNC можно клиентом из под рабочей ОС (под Windows, например, отлично работает UltraVNC )

Выбор и установка софта:

В качестве ОС я использовал Raspbian, как наиболее подходящую для непродвинутых пользователей. Нужно скачать образ системы и установить его на карту памяти с помощью специальной утилиты (Win32DiskImager под Windows). Все это подробно описано на странице загрузок официального сайта Raspberry: www.raspberrypi.org/downloads

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

Конечно, это можно сделать и позже, командой

Для захвата фото с веб-камеры настоятельно рекомендую использовать mjpg-streamer. Эта утилита – единственная среди опробованных на данной конфигурации железа, смогла выдать фото в «правильном» разрешении. Остальные инструменты которые мне довелось испытать (motion, ffmpeg, streamer), никак не отдавали HD картинку, предлагая в лучшем случае только 640×480, а то и вовсе отказывались запускаться. К сожалению в виде исполняемых файлов mjpg-streamer не распространен, однако скомпилировать его оказывается не сложнее, чем установить готовый пакет. Чем и займемся (предполагается, что все операции производятся от имени пользователя pi).

Сначала стоит обновить локальный индекс пакетов, доступных для установки:

Также можно запустить апгрейд уже установленных в системе пакетов, если нужно, хотя на практике все работает и без этого:

Чтобы вывести на фотографиях дату и время их создания, нам понадобится пакет imagemagick, в состав которого входит утилита convert. Она обладает поистине неограниченными возможностями по изменению изображений, так что написать в углу десяток цифр с ее помощью оказывается совершенно несложно. Этот же пакет понадобится и для компиляции mjpg-streamer, так что ставим его, не задумываясь:

Склейкой видео из набора фотографий занимается программа aviconv, которую мы тоже установим не самостоятельно, а вместе с пакетом libav-tools, без которого компиляция mjpg-streamer не будет успешной. Ставим:

Еще понадобится пакет libjpeg8-dev, который также содержит необходимые библиотеки для mjpg-streamer:

Для скачивания исходников c sourceforge понадобится subversion:

А само скачивание и компиляция mjpg-streamer делается так:

Последний шаг – установка пакета для работы с удаленной файловой системой по WebDAV и, собственно, ее монтирование:

В процессе монтирования нужно будет ввести имя пользователя и пароль.

Рабочий процесс шаг за шагом:

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

Итак, запускаем mjpg-streamer:

В таком режиме он будет раз в минуту (-d 60000) в текущем каталоге (-f ./) создавать файл с красивым именем, вроде такого: 2013_10_04_12_11_30_picture_000000000.jpg.

Для отрисовки временной метки на изображении используем скрипт примерно такого вида:

Он поставит метку в правом нижнем углу изображения и запишет результат в out.jpg. Получится примерно так:

Для записи на Яндекс.Диск просто копируем нужный файл в /mnt/dav:

Стоит отметить, что само копирование на удаленную файловую систему осуществляется в 2 этапа: сначала файл копируется в локальный кэш где-то в /var/cache/davfs2, а дальше davfs уже занимается собственно переносом файла по сети. Это значит, что команда копирования завершится раньше, чем файл физически окажется доступен в Яндекс.Диске. Поэтому не расстраивайтесь, если не обнаружите на Яндексе только что скопированный файл – скорее всего нужно немного подождать.

Создание видео из набора jpeg-ов нуждается в подготовке: имена файлов должны представлять собой последовательность возрастающих чисел, подчиняющихся определенному шаблону. Вот скрипт, который переименует все jpg файлы в текущем каталоге по возрастанию времени их модификации, а затем запустит конвертацию в avi:

Надо сказать, что avconv – тоже очень мощная утилита, умеющая кодировать практически что угодно во что угодно с доброй сотней параметров. Однако стоит учитывать довольно скромные возможности по софтовому кодированию-декодированию видео у Raspberry, чтобы не возлагать на нее слишком много надежд. Например конвертация набора из примерно 600 файлов в фильм, сжатый в H.264, занимала у меня около двух часов. Поэтому в примере выше я использую кодирование в MJPEG, которое по сути ничего не сжимает, а только склеивает jpg друг с другом. Такая конвертация выполняется за несколько минут и не теряет исходного качества картинок.

Далее, при некоторой сноровке и навыках разработки bash скриптов, можно настроить полностью автоматизированную систему, которая будет, включаться и выключаться по расписанию, убирать за собой мусор, отслеживать доступность свободного места на удаленном диске и т.п. Также через диск можно организовать удаленное управление Raspberry, например, выкладывая в определенный каталог скрипты, которые малинка будет сама забирать и выполнять.

В завершение предлагаю пример самодельного timelapse видео. Обратите внимание, что время в правом нижнем углу — неверное. Это из-за того, что в Raspberry нет часов реального времени, и если ее включить без подключения к интернету, то будет использоваться последнее время работы, без учета часового пояса.

Источники:

http://arduinoplus.ru/raspberry-pi-kamera/

http://robot-on.ru/articles/raspberry-pi-rabota-s-kameroi

http://habr.com/post/196598/

http://mirquadrocopterov.ru/populyarnye-modeli/drony-dlya-nachinayushhih/obzor-byudzhetnogo-kvadrokoptera-syma-x5sw.html

Ссылка на основную публикацию