Найти тему

Наблюдаю за растениями USB-камера с автофокусом, python+openCV

Оглавление

В целом довольно интересно наблюдать и изучать поведение различных объектов при изменении условий. А тут мне ещё осенью того года попались на глаза адениумы — пустынные растения, что выживают в весьма экстремальных условиях, но при этом довольно красиво цветут. И решил я себе такую радость завести.

Купил совсем маленького и решил понаблюдать за его ростом.

В начале взял простенькую вебку и грузил с неё фото на Народмон, потом решил протестировать ESP32 cam. Обе камеры давали достаточно паршивое качество. Одна старая, другая имела неподходящее расстояние для фокуса. И в результате у меня получился 4хминутный таймлапс, содержащий примерно 3,5 месяца жизни растения. Правда он представляет лишь скромный научный интерес.

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

Камера построена на модуле IMX179, 8Мп, но самое главное — встроенный автофокус, который позволяет снимать даже простенькое макро. Что в данном случае и интересно. Брал на Али, тут.

Собрал установку, сделал фоточку:

Полученная фотография объекта с модуля IMX179
Полученная фотография объекта с модуля IMX179

Что делаем с картинкой?

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

Отличие в данном случае в том, что в качестве МК для получения и обработки картинки используется Orange pi zero 3, к которой подключена через USB камера.

Для получения изображения используется связка OpenCV и python3. для получения с USB-камеры картинки под linux-системами необходимо поставить модуль v4l-utils.

Найти номер камеры для источника в OpenCV можно используя команду lsusb.

Пример базового кода для получения картинки на python при работе на orange pi zero 3 или ином микрокомпьютере:

import cv2 # импорт модуля openCV
camera = '/dev/video1' #указать верно из lsusb
cap = cv2.VideoCapture(camera, cv2.CAP_V4L2) # видео поток с веб камеры параметры для usb-камеры на апельсинке, через модуль v4l-utils
while 1:
ret, frame1 = cap.read()
cv2.imshow("frame1", frame1) # вывести фрейм
cap.release()
cv2.destroyAllWindows()

Установка

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

Для камеры из своих стандартных корпусов сделал коробочку. А плату orange pi zero 3 прикрутил на саморезы. Она отлично поместилась на задней части корпуса.

Общий вид, расстояние между камерой и горшком минимальное
Общий вид, расстояние между камерой и горшком минимальное
Более наглядное расстояние между камерой и объектом
Более наглядное расстояние между камерой и объектом

На апельсинку решил не лепить радиатор, так как отправка картинки раз в 10 минут не является серьёзной задачей для современных МК.

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

Вид сзади, плата МК, "гениально" разместил антенну
Вид сзади, плата МК, "гениально" разместил антенну

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

Итак, поделился фоточками, видео и небольшим применением камеры, апельсинки и python.

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

*а автор тем временем пойдёт придумывать как ему описать ещё одну железку...*