Здравствуйте, дорогие читатели моего блога.
Сегодня статья посвещана организации процесса фото - и видиосъёмки с микрокомпьютера Raspberry pi с последующим сохранением данных в облако в атоматическом режиме.
У меня стояла задача создать систему фото- и видеонаблюдения за птицами у кормушки.
Так как кормушка у меня находилась во дворе дома, то я решил собрать устройство на базе raspberry pi с подключённым проводным интернетом.
Это было сделано на случай, если влага или другие погодные условия выведут электронику из строя, то весь видео и фотоматериал останется в облаке.
В качестве оборудования я использовал:
Raspberry pi 3 B +
7 дюймовый сенсорный дисплей для микрокомпьютера
Pi camera
клавиатура, мышь
LAN провод 20 метров
удлинитель и блок питания (преобразователь 5В и 2А)
Этап первый: установка операционной ситемы.
Для микрокомпьютера существуют множество сборок ОС. Я использую официальную Raspberry PI OS
можно скачать специальную программу, которая установит вам данную систему.
Операционная система устанавливается на microSD желательно 8 - 32 Гб памяти.
Этап второй: подключение Pi camera.
Pi camera распозноётся сразу из коробки микрокомпьютером с данной операционной системой.
Подключите камеру до включения микрокомпьютера!!!! Жёстко закрепите камеру, так чтобы не произошло отсоединения шлейфа или касания контактов камер с контактами микрокомпьютера.
Частая проблема с такими камерами - это сгорание при плохом соединении контактов шлейфа и электростатический разряд. Подобная проблема не редкость, но из-за неё микрокомпьютер перестанет обнаруживать pi camera.
Этап третий: подключение сенсорного 7 дюймового дисплея.
Этот этап не обязательный, но он удобен если есть привычка работать в графическом интерфейсе без возможности подключения к большому монитору компьютера.
Этап четвёртый: драйвера для дисплея.
Для этого вам нужно перейти в нужный репозиторий на github и скачать нужную версию для вашего дисплея. Все драйвера можно найти здесь. Там же вы найдёте инструкцию по скачиванию и установке драйверов.
Скачать и установить можно несколькими способами:
используя внешний монитор с HDMI входом
Не забудьте предварительно подключить 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)
andreishe
05.01.2022 20:34+1Настоятельно рекомендую после настройки всего перемонтировать ФС в read only. Иначе после неожиданного пропадания питания есть шанс не загрузиться.
Да и вопрос восстановления съемки после перезагрузки не раскрыт.
sunbeam
06.01.2022 01:00+1Согласно программе, каждый промежуток времени микрокомпьютер отправляет фотографию в папку "Nablyd", расположенной на яндекс диске.
Не видно в приведенном фрагменте программы отправки на яд, только сам захват изображения.
Также в приведенных фрагментах переменная i в цикле не изменяется и файлы будут перезаписываться, а не создаваться новые.
mihnik
06.01.2022 11:42Зачем придумывать велосипед? Есть проект motionEye OS(https://raspberry-valley.azurewebsites.net/MotionEye-OS) для малинки - всё из коробки настраивается: и сохранение и стрим и, если нужно, фото-видео и анализ/события движения в кадре...
Andrykor Автор
06.01.2022 12:07Если бы всё было так просто, то да я бы воспользовался данным модулем, но к сожалению он мне не помог. Никак не мог определить камеру ни usb ни pi camera.
И судя по форумам, это проблема не только у меня.
mihnik
07.01.2022 07:27Странно, не повезло значит. Пробовал на Pi3 с тремя разными usb камерами (одна старый Logitech, две другие безымянный китайские)- завелось с первой попытки, сложность только в выборе камеры из списка системных — их почему то в списке всегда больше, чем реальных камер. а так всё стримится, и движения понимает и с HomeAssistant интегрируется на раз-два.
thegriglat
Почему просто не сделать бесконечный стрим на YouTube с помощью ffmpeg?
сам делаю иногда, код с минимальными правками
вместо SOURCE поставить /dev/video0 (или как там камера определяется в пишке)
Andrykor Автор
Хорошая идея. Но у меня не было задумки выставлять на всеобщее обозрение файлы записи. Я получаю изображения и видеоролики, а потом просматриваю их на наличие хорошего ракурса и момента попадания птиц.
thegriglat
Так можно и не выставлять) приватная трансляция или доступ по ссылке и никому не давать
Andrykor Автор
можно, но не нужно.
slog2
Сколько гигов в месяц сожрёт бесконечный стрим?
thegriglat
Гигов где? на компьютере, откуда идет стрим ничего не сохраняется (ну, если спец не сделать), а есть ли на Ютубе ограничение -- я не знаю, вроде нет
Всякие Lo Fi стримы на ютубе идут месяцами (например https://www.youtube.com/watch?v=5qap5aO4i9A, начат 22 февр. 2020 г. !)
slog2
Имелось ввиду сколько гигов трафика через провайдера. Не у всех же безлиминтый интернет.
thegriglat
ну на самом деле это легко посчитать...
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 -- байты в гигабайты
RosaWoelkchen
а оверхед соединения? на какой фактор помножить ещё?
thegriglat
Ну не знаю, и так 120 Кбайт/сек...
Будет наверное макс 150 Кбайт/сек
thegriglat
Ещё, кстати, тема-то интересная, ffmpeg может вырезать кадры "без движения" (формально если фреймы похожи).
Вчера попробовал -- удобно при использовании статичной камеры, тогда кадры с пустым пейзажем вырезаются и остаются только если что-то происходит. Чтобы не просматривать потом тонны материала
https://superuser.com/questions/984841