Здравствуйте, дорогие читатели моего блога.

Сегодня статья посвещана организации процесса фото - и видиосъёмки с микрокомпьютера Raspberry pi с последующим сохранением данных в облако в атоматическом режиме.

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

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

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

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

  • Raspberry pi 3 B +

  • 7 дюймовый сенсорный дисплей для микрокомпьютера

  • Pi camera

  • клавиатура, мышь

  • LAN провод 20 метров

  • удлинитель и блок питания (преобразователь 5В и 2А)

raspberry pi
raspberry pi
lcd raspberry pi
lcd raspberry pi

Этап первый: установка операционной ситемы.

Для микрокомпьютера существуют множество сборок ОС. Я использую  официальную Raspberry PI OS 

На сайте 

 можно скачать специальную программу, которая установит вам данную систему.
Операционная система устанавливается на microSD желательно 8 - 32 Гб памяти.

Этап второй: подключение Pi camera.

Pi camera распозноётся сразу из коробки микрокомпьютером с данной операционной системой.

Подключите камеру до включения микрокомпьютера!!!! Жёстко закрепите камеру, так чтобы не произошло отсоединения шлейфа или касания контактов камер с контактами микрокомпьютера.

Частая проблема с такими камерами - это сгорание при плохом соединении контактов шлейфа и электростатический разряд. Подобная проблема не редкость, но из-за неё микрокомпьютер перестанет обнаруживать pi camera.

Этап третий: подключение сенсорного 7 дюймового дисплея.

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

Этап четвёртый: драйвера для дисплея. 

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

Скачать и установить можно несколькими способами:

Не забудьте предварительно подключить LAN провод или подключиться по WI-FI , чтобы иметь выход в интернет.

Если вы пользуетесь первым способом и вы не знаете как найти ip адрес своего микрокомпьютера, то вам могут помочь данные ИНСТРУКЦИИ

Этап пятый: Настройка конфигурации микрокомпьютера.

Для того чтобы ваша камера заработала необходимо перейти во вкладку Raspberry PI Configuration и поставить галочку напротив команды Enable для параметра "Camera"

Этап шестой: Программа для получения фото и видеозахвата с pi camera

Ранее я с ребятами разрабатывали исследовательский проект "Беспилотный автомобиль"

Как раз на базе raspberry pi  и pi camera была разработана модель трёхколёсного робота ориентирующегося в пространстве.

Из данного проекта была взята программа, но убран алгоритм распознавания границ и цвета.

Код программы:

import picamera
import time  

camera = picamera.PiCamera()
#camera.brightness=50
camera.exposure_compensation=25
camera.resolution=(640,480)
camera.start_preview()
i=0
while True:
  t='im'+str(i)+'.jpg'
  print(t)
  camera.capture(t) 

camera.stop_preview()
camera.close()  


Данная программа делает фотографию в разрешении 640x480.  Можно делать и в более лучшем качестве.

Также можно записать и видео:

import picamera
import time  
camera = picamera.PiCamera()
#camera.brightness=50 
camera.exposure_compensation=25
camera.resolution=(640,480)
camera.start_preview() 

camera.start_recording('video.h264')
camera.wait_recording(3600) # запись видео 1 час
camera.stop_recording()

camera.stop_preview()
camera.close()

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

При данных разрешениях 10 часов непрерывных съёмок даёт объём около 2,2 Гб 

Этап седьмой: передача файлов в облако

В качестве хранилище данных  я выбирал между Яндекс Диском и Google Диском. Пока остановился на яндекс Диске.

Инструкция по настройке диска для автоматической приёма данных с устройства представлено ЗДЕСЬ 

Пример передачи фотграфий на яндекс диск:

import picamera import time 
import yadisk y = yadisk.YaDisk(token="###################################")
print(y.check_token()) 

camera = picamera.PiCamera() 
#camera.brightness=50 
camera.exposure_compensation=25
camera.resolution=(640,480)
camera.start_preview()
i=0 
while True:
  t='im'+str(i)+'.jpg' 
  print(t) 
  camera.capture(t)
  #time.sleep(1)

 camera.stop_preview() 
 camera.close()

Согласно программе, каждый промежуток времени микрокомпьютер отправляет фотографию в папку "Nablyd", расположенной на яндекс диске.

Проще всего отправлять фотографии, но ничего не мешает отправить и видео, просто в этом случае у вас займёт это больше времени.

Время на создание фотографии и её отправку уходит порядка 1 - 2 секунды, поэтому дополнительных задержек нет необходимости ставить.

Видеообзор устройства и процесса видеосъёмки.

Заключение

Данным способом пользуюсь часто и провожу наблюдение за живой природой.

Другие варианты для проведение видео и фотосъёмок не смогли реализоваться в основном для прямой трансляции или записи в облако применяют IP камеру, но у меня такой не было.

Комментарии (16)


  1. thegriglat
    05.01.2022 16:13
    +1

    Почему просто не сделать бесконечный стрим на YouTube с помощью ffmpeg?

    сам делаю иногда, код с минимальными правками

    VBR="2500k"                                    # Video bitrate
    FPS="30"                                       # FPS
    QUAL="ultrafast"                               # preset, ultrafast is OK for streaming
    YOUTUBE_URL="rtmp://a.rtmp.youtube.com/live2"  # YouTube RTMP URL
    
    SOURCE="/dev/video0"                           # Camera device
    KEY="...."                                     # Stream key (get from youtube studio)
    
    ffmpeg \
        -i "$SOURCE" \
        -vcodec libx264 -pix_fmt yuv420p -preset $QUAL -r $FPS -g $(($FPS * 2)) -b:v $VBR \
        -acodec aac -bufsize 512k \
        -f flv "$YOUTUBE_URL/$KEY"


    вместо SOURCE поставить /dev/video0 (или как там камера определяется в пишке)


    1. Andrykor Автор
      05.01.2022 16:38

      Хорошая идея. Но у меня не было задумки выставлять на всеобщее обозрение файлы записи. Я получаю изображения и видеоролики, а потом просматриваю их на наличие хорошего ракурса и момента попадания птиц.


      1. thegriglat
        05.01.2022 16:41
        +2

        Так можно и не выставлять) приватная трансляция или доступ по ссылке и никому не давать


        1. Andrykor Автор
          06.01.2022 11:00

          можно, но не нужно.


    1. slog2
      05.01.2022 17:17

      Сколько гигов в месяц сожрёт бесконечный стрим?


      1. thegriglat
        05.01.2022 17:27
        +2

        Гигов где? на компьютере, откуда идет стрим ничего не сохраняется (ну, если спец не сделать), а есть ли на Ютубе ограничение -- я не знаю, вроде нет
        Всякие Lo Fi стримы на ютубе идут месяцами (например https://www.youtube.com/watch?v=5qap5aO4i9A, начат 22 февр. 2020 г. !)


        1. slog2
          06.01.2022 02:30

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


      1. thegriglat
        05.01.2022 17:39
        +2

        ну на самом деле это легко посчитать...
        640*480*0.1/8*30 * 31*24*60*60/1024/1024/1024 = ~280-300Gb в месяц если записывать на комп

        числа по порядку
        640 * 480 -- разрешение
        0.1 -- бит на пиксель (0.1-0.3 в зависимости от кодека, дает хорошее качество)
        8 -- бит в байте
        30 -- кадров/сек
        31*24*60*60 -- секунд в месяце
        1024*1024*1024 -- байты в гигабайты


        1. RosaWoelkchen
          06.01.2022 11:01

          а оверхед соединения? на какой фактор помножить ещё?


          1. thegriglat
            06.01.2022 15:04

            Ну не знаю, и так 120 Кбайт/сек...

            Будет наверное макс 150 Кбайт/сек


    1. thegriglat
      06.01.2022 15:09
      +1

      Ещё, кстати, тема-то интересная, ffmpeg может вырезать кадры "без движения" (формально если фреймы похожи).

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

      https://superuser.com/questions/984841


  1. andreishe
    05.01.2022 20:34
    +1

    Настоятельно рекомендую после настройки всего перемонтировать ФС в read only. Иначе после неожиданного пропадания питания есть шанс не загрузиться.

    Да и вопрос восстановления съемки после перезагрузки не раскрыт.


  1. sunbeam
    06.01.2022 01:00
    +1

    Согласно программе, каждый промежуток времени микрокомпьютер отправляет фотографию в папку "Nablyd", расположенной на яндекс диске.

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

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


  1. mihnik
    06.01.2022 11:42

    Зачем придумывать велосипед? Есть проект motionEye OS(https://raspberry-valley.azurewebsites.net/MotionEye-OS) для малинки - всё из коробки настраивается: и сохранение и стрим и, если нужно, фото-видео и анализ/события движения в кадре...


    1. Andrykor Автор
      06.01.2022 12:07

      Если бы всё было так просто, то да я бы воспользовался данным модулем, но к сожалению он мне не помог. Никак не мог определить камеру ни usb ни pi camera.

      И судя по форумам, это проблема не только у меня.


  1. mihnik
    07.01.2022 07:27

    Странно, не повезло значит. Пробовал на Pi3 с тремя разными usb камерами (одна старый Logitech, две другие безымянный китайские)- завелось с первой попытки, сложность только в выборе камеры из списка системных — их почему то в списке всегда больше, чем реальных камер. а так всё стримится, и движения понимает и с HomeAssistant интегрируется на раз-два.