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

Делаем фотокамеру на Raspberry Pi

12 апреля в 16:16

Уроки / Raspberry

Сегодня мы сделаем один из самых интересных проектов – создадим по-настоящему компактную и портативную фотокамеру на основе Raspberry Pi.

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

 В разных примерах использовались отдельные аккумуляторы, конвертеры и зарядные блоки, но в данном уроке был использован, так называемый PiJuice, который можно заказать на Кикстартере.

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

Также было решено использовать Raspberry Pi Model A+, так как он самый дешевый и самый маленький из доступных Pi, и он отлично подойдет для PiJuice.

Шаг 1. Комплектующие

  • 1 x PiJuice
  • 1 x Raspberry Pi Model A+
  • 1 x модуль камеры Raspberry Pi Camera Board v1.3 (5MP, 1080p)
  • 1 x экран Adafruit TFT 2.2″
  • 1 х кнопочный переключатель
  • 1 x micro SD-карта
  • 10 x пластиковых прокладок
  • 4 х винтов
  • 1 х коннекторы

Также дополнительно нам понадобится приблизительно 15 см тонкой проволоки в изоляционной оболочке.

Шаг 2. Установка и настройка SD-карты

Карта SD должна содержать последнюю версию Raspbian, доступную для загрузки с веб-сайта Raspberry Pi.

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

Лучший способ – запустить скрипт установщика, описанный на странице Adafruit. На этом этапе рекомендуется проверить, что все работает правильно, поэтому подключите экран к Raspberry Pi, прикрепите PiJuice c заряженной батареей и включите ее. Если все пошло по плану, на вашем экране должны отображаться обычные загрузочные сообщения – см. рисунок выше.

Шаг 3. Настройка модуля камеры

Вставьте ленточный кабель камеры в Raspberry Pi. Соединение расположено между аудио и HDMI-портами. Убедитесь, что синяя сторона обращена в сторону от порта HDMI.

Теперь самое время проверить, работает ли камера. Сначала её нужно включить, поэтому перейдите к терминалу и введите:

sudo raspi-config

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

raspistill -o pic.jpg

Это заставит камеру сделать снимок с рисунком заголовка и сохранить его в каталоге:

/home/pi

Шаг 4. Присоедините кнопку

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

Сначала нам нужно припаять коннектор к экрану TFT. Вы заметите GPIO в верхней части экрана. Найдите контактный пин 17 и припаяйте к коннектору, чтобы штырь располагался на нижней стороне экрана. Теперь подключите вывод “мама” перемычки (~ 7 см) к штырю и припаяйте к одному из разъемов на кнопке.

На нижней стороне экрана находится панель с надписью wp. Это земля. Припаяйте черный провод (~ 7 см). Припаяйте другой конец черного провода ко второму разъему кнопки.

Шаг 5. Загружаем программное обеспечение

Программное обеспечение камеры доступно в Github:

https://github.com/PiJuice

Чтобы загрузить программное обеспечение, убедитесь, что ваш Raspberry Pi подключен к Интернету и введите следующие команды в окно терминала:

sudo apt-get install git-core

Теперь создайте каталог для PiCam:

sudo mkdir PiCam
cd / PiCam

Теперь скачайте программное обеспечение:

git clone git: //github.com/pijuice/PiCam.git

Шаг 6. Тестирование камеры

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

sudo python picam.py

Перед началом работы, убедитесь, что ваш текущий каталог является picam, набрав команду:

cd / picam

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

Шаг 7. Сборка камеры

Заключительный этап – собрать все части. У вас уже должны быть Raspberry Pi, PiJuice, модуль камеры и TFT-экран. Как мы написали ранее, вы можете заказать удобный PiJuice на Кикстартере. На этом всё. Хороших вам и качественных фотографий.

Источник: https://ArduinoPlus.ru/delaem-fotokameru-na-raspberry-pi/

Дрон на Raspberry Pi своими руками

Представляем Вам проект квадрокоптера работающий на платформе Multiwii и контролируемый с помощью Raspberry Pi 3 B. Этот квадрокоптер имеет особенность – он использует 2 разных контроллера, и он может пилотироваться с двух различных устройств: дистанционным управлением или смартфоном.

Контроллер Multiwii следит за 4-мя двигателями и распределяет мощность, тогда как Raspberry Pi собирает информацию, которая поступает со смартфона и передает их в Multiwii. Вы также сможете делать снимки и видео в Full HD! Камера Pi находится на спереди дрона. Возможна запись полета или создание снимков на USB флешку.

Рама этого квадрокоптера изготовлена из различных переработанных элементов, задача была: собрать квадрокоптер с иногда тяжелыми элементами … Но мы сделали это!

Мы – это несколько молодых французских студентов, и это было наше первое творение. Проект мы назвали – Drone Pi

Шаг 1: Детали

• Рама – Вы можете купить ее в Интернете, или вы можете сделать ее как мы. Нетрудно создать свою раму, Вам просто нужно сделать X размером приблизительно 0,45 м (для стабильного квадрокоптера), и Вы разместите многоуровневую платформу по центру, чтобы поместить туда электронную начинку.

• 4 мотора (19,52 $). Для квадрокоптера Вам нужны 4 двигателя, но, если вы хотите сделать октокоптер, Вам понадобятся 8 двигателей. Мы используем бесколлекторные двигатели. (мы вернемся к моторам на шаге 2) • 4 ESCs (35.50 $). Электронный регулятор скорости использует для подачи питания на двигатель с информацией о Multiwii. Мы используем 30A ESC.

• Аккумулятор (22,10 $) – Что бы летать, Вам понадобилась батарея. Мы используем 3S 3300mAh.

• Монитор заряда батареи (1.71 $) – он отображает уровень заряда аккумулятора.

• Распределительная плата питания (3.77 $). Эта плата используется для подключения ваших ESC к аккумулятору.

• Т – Разъемы (2 $) – для соединения esc с платой.

• Разъемы 3,5 мм (3.27 $) – для соединения esc и двигателей.

• Пропеллеры (16,79 $) – квадрокоптер с двигателями, но без пропеллеров не является квадрокоптером, поэтому выбирайте свои комплектующие в соответствии с вашей рамой. Для нашей рамы 40 см Вам понадобятся пропеллеры с длиной = 10 и шагом = 4,5. Мы используем 10×4,5 SF.

• Multiwii – этот контроллер использует для управления двигателями и распределения мощности. Мы используем CRIUS AIO PRO Multiwii. Или можно заменить на FTDI FT232r Basic Breakout USB-TTL 3.3v 5v For Arduino Pro Mini MWC MultiWii + – CRIUS MultiWii Standard Edition Flight Controller MWC SE V2.5 for Multicopter

• Монтажная панель (3.40 $). Поскольку двигатели создают большую вибрацию, вам нужно купить какую-нибудь монтажную площадку, чтобы уменьшить тряску их при использовании multiwii.

• Raspberry pi 3 model (39,57 $) – Она также может работать с другой моделью малины pi, но мы только что протестировали ее с помощью Raspi, и она более мощная, чем предыдущая.

• Камера Pi (6.40 $) – для захвата видео и фотосъемки. Его можно запустить только с помощью малины pi

• Wifi адаптер (3,66 $) – он подключается к Raspi и создает сеть Wi-Fi для передачи информации из приложения смартфона в Raspi, использование внешнего модуля для лучшего уровня сигнала.

• USB-флешка – сохранение видео

• Дистанционное управление + приемник rc – Если вы хотите контролировать свой гул с этим. Вы подключите приемник rc к Multiwii

Шаг 2: Принцип работы

The multiwii

Multiwii – проект с открытым исходным кодом, основанный на Ардуине. Проект является с открытым исходным кодом, поэтому мы можем найти много видов multiwii. Мы используем версию similare CRIUS AIO PRO V2.

Это контроллер полета: его роль заключается в отправке сигналов скорости в esc, чтобы удерживать квадрокоптер в воздухе.

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

Raspberry Pi

В нашем проекте Raspberry Pi играет главную роль. Сначала при включении он создает Wi-Fi сеть с DHCP-сервером (для предоставления IP-адреса), эта сеть Wi-Fi не имеет доступа в Интернет, и это только для связи со смартфоном. Во-вторых, он запускает программу на python (созданную нами), которая запускает Websocket.

Websocket – это постоянная связь между сервером (Raspberry Pi) и клиентом (приложение для смартфона), он будет обрабатывать полученную команду из приложения. Затем эта же прогамма подключается к multiwii через USB. Он будет служить для отправки команд информации, которые поступают со смартфона в multiwii (см. Схему для понимания).

Источники доступны на github (https://github.com/robotoss/Multiwii-raspberry-drone-server )

Приложение

Приложение с помощью html / css / javascript с кордовой. Кордова – это технология, которая позволяет создавать приложение с веб-технологиями, совместимыми с Android, ios и многое другое …

Пользователь считает, что это стандартное приложение для Android, но на самом деле это веб-интерфейс :), легко разрабатывать приложения, подобные этому для web devellopers … Источники доступны в github (https://github.

com/reglisse44/quadcopterControl)

Шаг 3: Рама

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

Диаметр рамы составляет 0,45 м, потому что нам нужен «стабильный квадрокоптер» для съемки, а не «гоночный квадрокоптер». В центре X – 3 уровня (возможно, 4 в будущем), чтобы поставить контроллеры, ESCs и нашу батарею (с подробными чертежами Вы можете ознакомиться выше на фотографиях).

Мы создали платформу для multiwii на верхней части квадрокоптера (рисунок 2), а другая – для батареи (рис. 7 и 8) на нижней части квадрокоптера. Для платформы Multiwii мы хотели поставить Raspberry Pi под multiwii, потому что между ними есть соединения. Для платформы батареи мы хотели взять или снять аккумулятор, чтобы зарядить его. Все фотографии находятся в следующем шаге …

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

Шаг 4: Силовая установка

Для движителя Вам нужны 4 двигателя, 4 ESC (для адаптации напряжения к двигателям), аккумулятор и, наконец Multiwii.

  1. Подключите свои двигатели к вашим ESC. Вы можете инвертировать провод, чтобы инвертировать вращение ваших винтов (см. Схему, чтобы знать направление вращения). В начале, не устанавливайте пропеллеры на двигатели, так как пропеллеры хрупкие и Вы можете их случайно разбить.
  2. Подключите ESC к распределительной плате (соблюдайте цветность).
  3. Если все в порядке, вы можете установить компоненты на раму.
  4. Винты, которые шли в комплекте с двигателем, были слишком большим для пропеллеров, поэтому мы увеличили отверстие для винта.(см. Фотографии)

Шаг 5: Контроллер полета и Raspberry Pi

Теперь мы установим multwii и Raspberry Pi. Для установки двух компонентов в одном и том же месте мы сделали опоры, которые позволяют установить multwii поверх Raspberry Pi, (см. Рисунок).

  1. Установите Raspberry Pi с опорами
  2. Положите multwii на опору с помощью антивибрационной подушки
  3. Подключите ESCs к multiwii с выделенными контактами

Затем мы скомпилируем прошивку multiwii в плату. Чтобы подключить плату multiwii к компьютеру через USB

Чтобы настроить multiwii:

Источник: https://robotos.in/proekty/vozdukh/dron-raspberry-pi-svoimi-rukami

Raspberry Pi. Подключение и работа с CSI-камерой

Рассмотрим методы правильного подключения камеры к Raspberry Pi и работу с ней через терминальное окно и с помощью языка программирования Python.
Материалы по теме: Установка ОС Raspbian, Терминал Linux.

Основы
Подключая камеру к Raspberry помним следующее:

  • камера боится статического электричества, прикасаться к ней во время работы желательно через антистатический материал
  • камера потребляет 250 мА – при использовании посредственного блока питания Малины подключение камеры может вызвать нехватку питания при активной работе камеры
  • в камере нет микрофона
  • верх камеры находится со стороны противоположной выходу шлейфа, но для отражение изображения по вертикали есть специальная команда – об это ниже.

Желательно выполнять подключение камеры к выключенной Raspberry. Быстро выключить Малину можно командой sudo shutdown now

Шлейфовый разъем CSI находится рядом с HDMI:Плюс подключения камеры через этот разъем в отличие от USB – в разгрузке процессора при передаче данных через интерфейс CSI

Для удобства фиксации камеры есть готовые решения, например – Акриловый холдер.Интерфейс камеры должен быть активирован в настройках Raspberry:После активации камеры (если это требовалось) Малину необходимо перезагрузить:sudo reboot now
Для работы с камерой в Raspbian уже предустановлены необходимые утилиты и драйвера. Обновим пакеты для использования свежих версий:sudo apt-get update -y
sudo apt-get dist-upgrade -yЕсли все сделано верно, попробуем получить пробный кадр с камеры – создадим папку для фотографий, перейдем в нее и выполним команду захвата изображения:mkdir ~/pi_cam/
cd ~/pi_cam/
raspistill -v -o test.jpgВ случае фейла следует проверить предыдущие шаги, либо прозвонить контакты разъемов на камере и на Малине.
В ОС Raspbian предустановлены следующие пакеты для работы с камерой:

  • raspivid, raspvidyuv – захват видео
  • raspistill, raspiyuv- получение фотографий
Читайте также:  Выбор квадрокоптера в 2017 - arduino+

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

Пакеты, с названиями, оканчивающимися на “yuv” не используют компонент кодирования – сохраняют “сырую” необработанную информацию, полученную сенсором камеры.

Рассмотрим работу с каждым пакетом, но прежде познакомимся со списком общих для всех пакетов параметров камеры, а далее рассмотрим специфические аргументы и конкретные примеры их применения. Рассмотрим значения параметров. Стоит заметить, что:

  • Если какой то аргумент не указан при обращении к утилите, то применяется его значение по умолчанию.
  • ЕСЛИ КОЛОНКА “ДИАПАЗОН ДОПУСТИМЫХ ЗНАЧЕНИЙ” ПУСТА – значит никаких дополнительных значений передавать не нужно – достаточно передачи самого аргумента.
  • Превью демонстрируется только на подключенном к Raspberry физическом мониторе. В случае доступа к Малине через удаленный рабочий стол (VNC) превью демонстрироваться не будет при любых настройках так как изображение превью посылается напрямую на монитор поверх остальной информации
  • Аналогичная картина с просмотром видео через рабочий стол
Аргумент Описание Диапазон допустимых значений Значение по умолчанию
-p Параметры окна предпросмотра ширина,высота,x-координата, y-координата
-f Предпросмотр во весь экран no
-n Без предпросмотра
-op Прозрачность окна предпросмотра 0…255 255
-sh Резкость -100…100
-co Контраст -100…100
-br Освещенность 0…100 50
-sa Насыщенность -100…100
-ISO Чувствительность датчика в камере -100…100
-vs Стабилизация видео (только для видео) no
-ev Экспокоррекция -10…10
-ex Экспозиция
  • auto
  • night
  • nightpreview
  • backlight: подсветка позади объекта съемки
  • spotlight: освещение прожектором
  • sports: объект в движении
  • snow: снежный пейзаж
  • beach: пляжный пейзаж
  • verylong: затяжная экспозиция
  • fixedfps: ограничение FPS до фиксированного значения
  • antishake: антитряска
  • fireworks: пейзаж с фейерверками
auto
-awb Баланс белого
  • off
  • auto
  • sun: 5000K…6500K – солнечно
  • cloud:6500K … 12000K облачно
  • shade: в тени
  • tungsten: 2500K … 3500K вольфрам
  • fluorescent: 2500K … 4500K
  • incandescent: раскаленный металл
  • flash: со вспышкой
  • horizon
auto
-ifx Разнообразные эффекты none, negative, solarise, posterise, whiteboard, blackboard, sketch, denoise, emboss, oilpaint, hatch, gpen, pastel, watercolour, film, blur, saturation, colourswap, washedout, colourpoint, colourbalance, cartoon none
-cfx Баланс цветов 0…255:0…255 128:128
-mm Замер экспозиции
  • average: среднее
  • spot: точка
  • backlit: считать изображение с подсветкой
  • matrix: матричный замер
average
-rot Поворот 0 … 359
-hf Отражение по горизонтали No
-vf Отражение по вертикали No
-roi Область интереса сенсора координаты от левого верхнего угла и ширина и высота области 0 … 1,0 … 1,0 … 1,0 … 1 0,0,1,1
-ss Скорость затвора в микросекундах 6000000
-drc Сжатие динамического диапазона off
-st показывать статистику No

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

Аргумент Описание Диапазон допустимых значений Значение по умолчанию
-w Ширина 0…макс макс
-h Высота 0…макс макс
-q Качество 0…100 75
-o Имя файла путь к файлу
-v Вывод в терминал Информация о процессе захвата no
-t Задержка перед действием в миллисекундах
-tl Таймлапс пример: -tl 2000 -o image%04d.jpg 2000 – интервал %04d – шаблон 4х значного числа
-e Кодирование в формат jpg, bmp, gif, and png jpg
-x Добавление EXIF тегов до 32 тегов
-r Сохранение массива Байера в Мeta-данных кодированного избражения

Рассмотрим конкретные примеры использования raspistill:
Захват стандартного изображения через 2 секунды с сохранением в файл image.jpg (в той папке, в которой сейчас находитесь). Разрешение при этом будет стандартным (максимальным)raspistill -t 2000 -o image.jpgТоже самое, но в разрешении 640х480raspistill -o image.jpg -w 640 -h 480Захват изображения с заниженным 5% качеством с сохранением в файл image.jpg (в той папке, в которой сейчас находитесь). При таком качестве размер изображения будет существенно меньшеraspistill -o image.jpg -q 5Получение изображения, кодированного в формат PNG с сохранением в файл image.pngraspistill -o image.png –e pngПолучение стандартного изображения с двумя зашитыми EXIF-тегами: Артист – Борис, GPS-высота – 123,5 мraspistill -o image.jpg -x IFD0.Artist=Boris -x GPS.GPSAltitude=1235/10Создание таймлапс-набора изображений, которые будут захватываться с интервалом в 10 секунда на протяжении 10 минут (600 000 мс) и называться image_num_001_today.jpg, image_num_002_today.jpg и так далее. Завершающее изображение будет иметь имя latest.jpgraspistill -t 600000 -tl 10000 -o image_num_%03d_today.jpg -l latest.jpgЗахват изображений при нажатии клавиши Enter, файлы будут сохраняться рядом и называться my_pics01.jpg my_pics02.jpg и т.д.raspistill -t 0 -k -o my_pics%02d.jpg

raspiyuv

Аргументы запуска в точности как у raspistill (см. выше), из них НЕДОСТУПНЫ только следующие: -q – качество -e – указание целевого формата изображения -x – Добавление EXIF тегов

-r – Сохранение массива Байера в Meta-данных кодированного изображения

https://www.youtube.com/watch?v=XyJlC8Ox2lc

Однако имеется СОБСТВЕННЫЙ аргумент

-rgb – сохранение “сырых” raw-данных в формате RGB888 (8 бит/канал)

raspivid – захват видео

Аргумент Описание Диапазон допустимых значений Значение по умолчанию
-w Ширина 0…макс 1920
-h Высота 0…макс 1080
-b Битрейт видео количество бит в секунду. 10Mbits/s задается -b 10000000
-o Имя файла путь к файлу
-v Вывод в терминал Информация о процессе захвата
-t Задержка перед действием в миллисекундах
-fps Фреймрейт Количество кадров в секунду 2…30
-k Запуск/останов записи по нажатию Enter процесс прерывается нажатием “X”
-sg Сохранение отрезков видео с фиксированной продолжительностью в отдельные файлы Задается длительность одного отрезка и маска файлов -sg 3000 -o video%04d.h264
-wr Ограничение максимального количества файлов при сегментации Применяется с аргументом -sg и по сути реализует циклическую перезапись как в видеорегистраторах

Разрешение по умолчанию – 1080p (1920×1080) Рассмотрим конкретные примеры:

Запись 5-ти секундного стандартного видео (1920×1080, 30 кадров/сек) с сохранением в файл video.h264

raspivid -t 5000 -o video.h264Запись 5-ти секундного ролика с разрешением 1080p и специфическим битрейтом 3.5Mbits/s с сохранением в файл video.h264raspivid -t 5000 -o video.h264 -b 3500000Запись 5 секунд видео стандартного разрешения с частотой кадров 5fps с сохранением в файл video.h264raspivid -t 5000 -o video.h264 -f 5Если к Raspberry подключен монитор через HDMI, то записанное видео можно посмотреть с помощью плеера omxplayer:sudo apt-get install omxplayer #если плеер еще не установлен
omxplayer video.h264Через VNC просмотр видео недоступен

  • 0 – успешное завершение
  • 64 – передана неверная команда (ошибка в синтаксисе)
  • 70 – ошибка в утилите или при связи с камерой
  • 130 – выполнение прервано пользователем (сочетанием клавиш Ctrl + C)

Библиотека PiCamera

Это библиотека для языка программирования Python позволяющая упростить и автоматизировать работу с камерой Raspberry
Полное описание библиотеки на английском здесь на офф. сайте
В современных версиях дистрибутива Raspbian библиотека уже предустановлена, проверить это можно через консоль Pythonpython3
import picameraВ случае фейла необходимо покинуть консоль введя командуexit()или сочетанием клавиш Ctrl + D и установить библиотеку командойsudo apt-get install python3-picameraРабота с камерой из кода Python аналогично рассмотренным выше терминальным командам. Получить стандартное изображение с камеры можно легко прямо в консоли Питона:import picamera #импортируем библиотеку работы с камерой
camera = picamera.PiCamera() #создаем объект камеры
camera.capture('image.jpg') #вызываем у объекта камеры метод захвата изображения
camera.close() #закрываем сессию работы с камеройИзображение сохраниться в файл image.jpg в текущей папке.

Источник: https://systop.ru/linux/38-raspberry-pi-podklyuchenie-i-rabota-s-csi-kameroy.html

Как подключать камеры к Raspberry Pi и настраивать их

Raspberry Pi – одноплатный компьютер, который возымел популярность еще в момент своего выхода. Это случилось благодаря неплохим техническим характеристикам, простоте работы, а главное – возможности подключения всевозможных модулей. Одним из них, в свою очередь, является Raspberry Pi camera.

Содержание

Raspberry Pi – одноплатный компьютер, который возымел популярность еще в момент своего выхода. Это случилось благодаря неплохим техническим характеристикам, простоте работы, а главное – возможности подключения всевозможных модулей. Одним из них, в свою очередь, является Raspberry Pi camera.

Особенности камеры для Raspberry Pi

Для Raspberry Pi камера появилась в 2014 году, и она стала самым популярным модулем для данного одноплатника. Используя его, пользователи-разработчики получили возможность реализовывать самые разные проекты, в числе которых:

  • телескопы;
  • устройства для слежения за животными;
  • системы видеонаблюдения с функцией распознавания лиц и т. д.

Первая версия камеры имела 5-мегапиксельную матрицу. Производством соответствующих оптических сенсоров занималась компания Omnivision. И уже в конце 2014-го она сняла их с производства, в связи с чем пришлось подыскивать замену.

Вскоре вышла Raspberry Pi camera v2, которая была даже лучше, чем предыдущая. В ней использовался 8-мегапиксельный сенсор от Sony, который имеет название IMX 219 EXMOR RS.

Новая камера научилась снимать с частотой кадров 60 FPS в HD-разрешении, тогда как старая выдавала лишь 30 FPS. И, как и первая генерация, вторая также могла записывать FullHD-видео с 30-кадровым фреймрейтом.

Также устройство стало быстрее, а главное – научилось лучше корректировать баланс белого.

Следует отметить, что Raspberry camera не потребляет процессорное время, так как у нее есть свой видеоускоритель. Это положительно отличает ее от обычных USB-камер.

Как подключить камеру Raspberry Pi

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

Важно: цветовой ключ нужно направить на Ethernet-порт. Подключение, в свою очередь, следует производить только при обесточенной плате.

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

Когда загрузится рабочий стол Raspbian, понадобится:

  • открыть меню;
  • перейти к пункту Preferences;
  • запустить программу Raspberry Pi Configuration.

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

Если устройство исправно и все вышеперечисленное выполнено правильно, к Raspberry Pi подключение камеры должно быть выполнено успешно. Но, конечно, это следует проверить. Для этого после загрузки Raspbian потребуется: открыть меню, перейти к пункту Programming и открыть Python 3.

Запустится IDLE, в котором потребуется создать файл с названием camera.py (можно по-другому, но, чтобы было понятно, лучше оставить так).

Далее нужно написать следующий код:

  • from picamera import PiCamera
  • # вышеуказанная инструкция подключает интересующий модуль
  • from time import sleep
  • # теперь объявим переменную для камеры
  • camera = PiCamera()
  • # затем запустим просмотр поступающего с камеры сигнала так, чтобы изображение выводилось поверх любых окошек
  • start_preview()
  • # пусть картинка выводится 15 секунд
  • sleep(15)
  • # завершаем предпросмотр
  • stop_preview()

Когда код введен, потребуется выполнить сохранение (клавиши CTRL+S), а затем – запустить исполнение кода, что делается нажатием на F5. Если на экране появится картинка, которую видит сенсор, значит Py camera Raspberry работает исправно.

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

При желании возможно самому написать код, но если нет времени, то нужно зайти на GitHub и найти подходящий скрипт на Python – их там около тысячи. Используя какой-нибудь из них, может быть создана IP-камера из Raspberry Pi или что-то другое. Рассматривать инструкции по установке скриптов здесь нет смысла, так как они присутствуют на GitHub.

Как подключить USB-камеру к Raspberry

Что касается того, как выполняется к Raspberry Pi подключение камеры по USB, то следует сказать, что это делается так же, как и во всех дистрибутивах Linux.

Принцип настройки такой:

  • подключение камеры;
  • обновление списка репозиториев и ПО (опционально);
  • установка программы Motion;
  • конфигурирование приложения.

Настройка заключается в изменении содержания двух файлов: motion/motion.conf и default/motion – оба из них находятся в директории etc.

В первом нужно изменить два параметра: DAEMON – на ON и Webcam_local – на OFF. Во, втором, в свою очередь, следует после знака “=” у параметра start_motion_daemon написать yes (по умолчанию стоит – no).

Чтобы запустить Motion Raspberry Pi, нужно запустить его сервис. Это делается командой: service motion start (естественно, под sudo). Останавливается демон той же командой, только вместо start нужно указывать stop.

Если же требуется трансляция в интернет, то нужно в роутере открыть для Raspberry порт 8081. Затем к камере можно будет обращаться так: http://адрес_роутера:8081.

Чтобы проверить работу камеры, нужно в браузере ввести следующий адрес: http://адрес_raspberry:8081. Вот таким нехитрым образом была настроена Raspberry Pi web camera usb.

Выше было рассмотрено, как камера под управлением Raspberry может быть подключена к одноплатнику. Как можно видеть, это сделать очень легко – главное, четко следовать инструкциям.

Источник: https://myraspberry.ru/kak-podklyuchat-kameryi-k-raspberry-pi-i-nastraivat-ix.html

Raspberry Pi Camera

Матрица камеры 5 MP, камера имеет объектив с фиксированным фокусом и позволяет получать фотоснимки с разрешением 2592×1944. Видео: 1080p, FPS: 30 кадров в секунду, 720p при 60 кадров в секунду и 640×480 до 90 кадров в секунду. Камера полностью поддерживается операционной системой Raspbian.

Читайте также:  Как выбрать инвертор для солнечных батарей? - arduino+

Подключение камеры

Будьте осторожны! Статическое электричество может вывести камеру со строя ! Модуль камеры подключается к Raspberry Pi гибким шлейфом в разъем, который расположен между Ethernet и HDMI.

Сначала вытяните фиксатор разъема, вставьте гибкий шлейф контактами к HDMI разъему. Шлейф должен заходить без усилий. После чего зажмите шлейф фиксатором, осторожно засунув его в разъем.

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

Прежде чем включать камеру рекомендуется обновить систему:

sudo apt-get update
sudo apt-get upgrade

После чего запускаем raspi-config и включаем поддержку камеры:

sudo raspi-config

Меняем Disable на Enable

Перезагружаем Raspberry Pi:

Съемка с Raspberry Pi с помощью модуля камеры

Существует два стандартных инструмента для работы с камерой raspivid и raspistill. Камера позволяет работать с графическими эффектами и общими параметрами камеры. Вы можете менять баланс белого, фокусировку, тип фото, экспозицию, ISO,  и т.п.

Фото (raspistill)

Утилита производит захват изображения в формате JPEG. Использование параметров команды raspistill:

usage: raspistill [options] Image parameter commands -?, –help : This help information
-w, –width : Set image width
-h, –height : Set image height
-q, –quality : Set jpeg quality
-r, –raw : Add raw bayer data to jpeg metadata
-o, –output : Output filename (to write to stdout, use '-o -'). If not specified, no file is saved
-l, –latest : Link latest complete image to filename
-v, –verbose : Output verbose information during run
-t, –timeout : Time (in ms) before takes picture and shuts down (if not specified, set to 5s)
-th, –thumb : Set thumbnail parameters (x:y:quality) or none
-d, –demo : Run a demo mode (cycle through range of camera options, no capture)
-e, –encoding : Encoding to use for output file (jpg, bmp, gif, png)
-x, –exif : EXIF tag to apply to captures (format as 'key=value') or none
-tl, –timelapse : Timelapse mode. Takes a picture every ms
-fp, –fullpreview : Run the preview using the still capture resolution (may reduce preview fps)
-k, –keypress : Wait between captures for a ENTER, X then ENTER to exit
-s, –signal : Wait between captures for a SIGUSR1 from another process
-g, –gl : Draw preview to texture instead of using video render component
-gc, –glcapture : Capture the GL frame-buffer instead of the camera image
-set, –settings : Retrieve camera settings and write to stdout
-cs, –camselect : Select camera . Default 0
-bm, –burst : Enable 'burst capture mode' Preview parameter commands -p, –preview : Preview window settings
-f, –fullscreen : Fullscreen preview mode
-op, –opacity : Preview window opacity (0-255)
-n, –nopreview : Do not display a preview window Image parameter commands -sh, –sharpness : Set image sharpness (-100 to 100)
-co, –contrast : Set image contrast (-100 to 100)
-br, –brightness : Set image brightness (0 to 100)
-sa, –saturation : Set image saturation (-100 to 100)
-ISO, –ISO : Set capture ISO
-vs, –vstab : Turn on video stabilisation
-ev, –ev : Set EV compensation
-ex, –exposure : Set exposure mode (see Notes)
-awb, –awb : Set AWB mode (see Notes)
-ifx, –imxfx : Set image effect (see Notes)
-cfx, –colfx : Set colour effect (U:V)
-mm, –metering : Set metering mode (see Notes)
-rot, –rotation : Set image rotation (0-359)
-hf, –hflip : Set horizontal flip
-vf, –vflip : Set vertical flip
-roi, –roi : Set region of interest (x,y,w,d as normalised coordinates [0.0-1.0])
-ss, –shutter : Set shutter speed in microseconds
-awbg, –awbgains : Set AWB gains – AWB mode must be off
-drc, –drc : Set DRC Level

Следующая команда записывает фото, сделанное камерой, в файл photo.jpg. Файл будет записан в текущей директории:

raspistill -o photo.jpg

Фото будет размером 2592×1944 (5 Мп). Для изменения параметров фото используйте параметры, которые описаны выше.

Сделать фото 640×480:

raspistill -o image.jpg -w 640 -h 480

Видео (raspivid)

Утилита производит захват видео в формате H264. Использование параметров команды raspivid:

usage: raspivid [options] Image parameter commands -?, –help : This help information
-w, –width : Set image width . Default 1920
-h, –height : Set image height . Default 1080
-b, –bitrate : Set bitrate. Use bits per second (e.g. 10MBits/s would be -b 10000000)
-o, –output : Output filename (to write to stdout, use '-o -')
-v, –verbose : Output verbose information during run
-t, –timeout : Time (in ms) to capture for. If not specified, set to 5s. Zero to disable
-d, –demo : Run a demo mode (cycle through range of camera options, no capture)
-fps, –framerate : Specify the frames per second to record
-e, –penc : Display preview image *after* encoding (shows compression artifacts)
-g, –intra : Specify the intra refresh period (key frame rate/GoP size). Zero to produce an initial I-frame and then just P-frames.
-pf, –profile : Specify H264 profile to use for encoding
-td, –timed : Cycle between capture and pause. -cycle on,off where on is record time and off is pause time in ms
-s, –signal : Cycle between capture and pause on Signal
-k, –keypress : Cycle between capture and pause on ENTER
-i, –initial : Initial state. Use 'record' or 'pause'. Default 'record'
-qp, –qp : Quantisation parameter. Use approximately 10-40. Default 0 (off)
-ih, –inline : Insert inline headers (SPS, PPS) to stream
-sg, –segment : Segment output file in to multiple files at specified interval
-wr, –wrap : In segment mode, wrap any numbered filename back to 1 when reach number
-sn, –start : In segment mode, start with specified segment number
-sp, –split : In wait mode, create new output file for each start event
-c, –circular : Run encoded data through circular buffer until triggered then save
-x, –vectors : Output filename for inline motion vectors
-cs, –camselect : Select camera . Default 0
-set, –settings : Retrieve camera settings and write to stdout H264 Profile options :
baseline,main,high Preview parameter commands -p, –preview : Preview window settings
-f, –fullscreen : Fullscreen preview mode
-op, –opacity : Preview window opacity (0-255)
-n, –nopreview : Do not display a preview window Image parameter commands -sh, –sharpness : Set image sharpness (-100 to 100)
-co, –contrast : Set image contrast (-100 to 100)
-br, –brightness : Set image brightness (0 to 100)
-sa, –saturation : Set image saturation (-100 to 100)
-ISO, –ISO : Set capture ISO
-vs, –vstab : Turn on video stabilisation
-ev, –ev : Set EV compensation
-ex, –exposure : Set exposure mode (see Notes)
-awb, –awb : Set AWB mode (see Notes)
-ifx, –imxfx : Set image effect (see Notes)
-cfx, –colfx : Set colour effect (U:V)
-mm, –metering : Set metering mode (see Notes)
-rot, –rotation : Set image rotation (0-359)
-hf, –hflip : Set horizontal flip
-vf, –vflip : Set vertical flip
-roi, –roi : Set region of interest (x,y,w,d as normalised coordinates [0.0-1.0])
-ss, –shutter : Set shutter speed in microseconds
-awbg, –awbgains : Set AWB gains – AWB mode must be off
-drc, –drc : Set DRC Level

Следующая команда записывает 20 секунд видео в формате h264:

raspivid -t 20000 -o video.h264

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

Потоковое видео

Для получения потокового видео установим на Raspberry Pi mjpg-streamer. Сначала установим необходимые для mjpg-streamer пакеты:

apt-get install cmake
apt-get install subversion
apt-get install libv4l-dev
apt-get install libjpeg8-dev
apt-get install imagemagick

Теперь устанавливаем mjpg-streamer:

wget github.com/jacksonliam/mjpg-streamer/archive/master.zip
unzip ./master -d ./ms
cd ./ms/mjpg-streamer-master/mjpg-streamer-experimental
make clean all

Для настройки mjpg-streamer корректируем файл start.sh:

nano start.sh

Все строки комментируем или удаляем и добавляем две следующие строки:

cd /root/ms/mjpg-streamer-master/mjpg-streamer-experimental
./mjpg_streamer -o “./output_http.so -w ./www” -i “./input_raspicam.so -x 640 -y 480 -fps 10 -ex auto -awb auto -vs -ISO 100”

где:
-x 640 – размер видео по горизонтали
-y 480 – размер видео по вертикали
-fps 10 – частота кадров
-ex auto – автоматическая экспозиция
-awb auto – автоматический баланс белого
-vs – вертикальная синхронизация
-ISO 100 – параметры ISO

Запускаем mjpg-streamer:

./start.sh

Теперь с другого компьютера в этой сети можем просмотреть потоковое видео обычным браузером, используя ссылку: http://192.168.1.100:8080/?action=stream

Посмотреть страницу mjpg-streamer: http://192.168.1.100:8080

Где 192.168.1.100 – IP адрес моего Raspberry Pi. Вам нужно изменить его на адрес своего Raspberry Pi.

Видео можно просматривать также с мобильных устройств – планшетов, смартфонов, и тому подобное. Для просмотра видео на смартфоне с операционной системой Android я использую программу IP Cam Viewer Lite.

Чтобы остановить mjpg-streamer в консоли нажмите Ctrl+c

Time lapse Video

Теперь попробуем сделать Time lapse видео. Этот прием используется для съемки очень медленных процессов. Делается серия фото с определенным интервалом, как правило, от 1 секунды и более (это зависит от скорости процесса, который Вы снимаете).

Затем из набора фото создается видео с помощью любой доступной программы, которая имеет такие функции. Многие фотокамеры умеют делать снимки для Time lapse Video, но Raspberry Pi имеет некоторые преимущества.

Кроме съемки, Raspberry Pi может делать другие вещи, например, включать свет на момент съемки, а затем выключать его. Это весьма уместно, когда съемка идет несколько недель с достаточно большими временными интервалами. Не нужно, чтобы свет горел все время, особенно если съемка требует мощного освещения.

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

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

Итак, самый простой путь для создания серии фото для Time lapse Video – воспользоваться ключом -tl в команде raspistill. Например:

raspistill -t 600000 -tl 10000 -o image_num_%d_today.jpg

Эта команда будет создавать фото каждые 10 (-tl 10000) секунд в течение 10 минут (10 минут = 600000мс). Файлы будут называться image_num_1_today.jpg, image_num_2_today.jpg, image_num_3_today.

jpg и так далее. Для съемки небольшого видео такой метод вполне пригоден. Но при съемках длительных процессов может возникнуть небольшая проблема.

Если питание Raspberry Pi по каким-либо причинам прервется, придется снова запускать команду.

Это меня не устроило. Поэтому я написал скрипт и указал его запуск в crontab. Содержание срипта:

#!/bin/bash echo 11 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio11/direction
echo 1 > /sys/class/gpio/gpio11/value DATE=$(date +”%Y-%m-%d_%H%M”)
raspistill -o /root/camera/$DATE.jpg echo 0 > /sys/class/gpio/gpio11/value
echo 11 > /sys/class/gpio/unexport

Строка в crontab:

*/10 * * * * root /root/camera/camera.bash

Теперь скрипт запускается каждые 10 минут. Даже если Raspberry Pi перезагрузится, скрипт будет запускаться. Скрипт включает свет (к GPIO11 подключена схема, которая включает лампу освещения), делает фото и затем выключает свет.

Собрать видео из полученных фото можно воспользовавшись утилитой avconv. Устанавливается avconv следующей командой:

apt-get install libav-tools

Фото должны иметь имена файлов в своеобразном формате. Пример скрипта, который переименовывает jpg файлы в текущей директории с учетом их даты модификации, запускает конвертацию и записывает видео в файл timelapse.avi:

#!/bin/bash i=0 for f in `ls -tr *.jpg 2>/dev/null` do newf=`printf %06d $i`.jpg echo $f “–>” $newf mv $f $newf i=$((i+1)) done avconv -r 10 -i %06d.jpg -r 10 -vcodec mjpeg -qscale 1 timelapse.avi

Но если обработка материала требует дополнительных действий, таких как предварительная пакетная обработка фото, имеет смысл скопировать фотоматериал на более мощный компьютер и не нагружать этим Raspberry Pi.

Вот что у меня получилось:

Это первое тестовое видео сделано для подбора параметров съемки.

Надписи на фото

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

Модифицируем скрипт чтобы он добавлял в левый верхний угол снятого фото дату и время:

#!/bin/bash echo 11 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio11/direction
echo 1 > /sys/class/gpio/gpio11/value DATE=$(date +”%Y-%m-%d_%H%M”)
timeshtamp=$(date +”%Y.%m.%d %H:%M:%S”) raspistill -o /root/camera/tmp.jpg
convert /root/camera/tmp.jpg -fill black -draw “rectangle 0,0 420,70” -fill white -pointsize 45 -draw “text 10,50 '${timeshtamp}'” /root/camera/$DATE.jpg
rm /root/camera/tmp.jpg echo 0 > /sys/class/gpio/gpio11/value
echo 11 > /sys/class/gpio/unexport

Теперь на всех фото будут дата и время съемки. Сначала на фото рисуется прямоугольник черного цвета (-fill black -draw “rectangle 0,0 420,70”), а затем белым цветом пишется время (-fill white -pointsize 45 -draw “text 10,50 ‘${timeshtamp}'”).

Успехов.

Смотри также:

Источник: http://www.avislab.com/blog/raspberry-pi-camera_ru/

3 камеры на один Raspberry Pi3

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

Были взяты три Pi камеры и кубик управления объективами Canon. Связь с Raspberry Pi осуществлялась через USB, хотя логичнее было подключиться через последовательный порт. Но у Arduino 5 В, а у Raspberry 3 В, и было лень согласовывать напряжения.

Читайте также:  Whirlwind xk x251: обзор - arduino+

Две камеры образовали стереопару, а оставшаяся могла использоваться практически с любыми сменными объективами от Зенита, Nikon и Canon. Причем для последних было реализовано дистанционное управление диафрагмой, фокусировка и автофокусировка.

В отличие от предыдущих многокамерных проектов в этот раз использовался всего один компьютер Raspberry Pi3 и блок переключения камер – Multi Camera Adapter.

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

Переключателей можно подключить к одному компьютеру аж 4 и получить в результате управление 16 камерами. Однако выяснилось, что ведут эти блоки себя немного по-разному, и я пока ограничился единственным и подключил к нему всего 3 камеры.

Мощность нового компьютера Raspberry Pi3 позволяла установить на него OpenCV за разумное время в пару часов и получить относительно резвую картинку даже с преобразованием проекции объектива рыбий глаз в нормальную. Причем это можно было делать именно как преобразование проекции, а не подгонкой параметров дисторсии. Т.е.

знание типа объектива и его фокусного расстояния без длительной калибровки сразу давало удовлетворительный результат.

Установка OpenCV 3 была проведена по инструкции Адриана Розеброка (Adrian Rosebrock) Install guide: Raspberry Pi 3 + Raspbian Jessie + OpenCV 3 для Python 3.

Следуя инструкции, я установил все в виртуальное окружение (Virtualenv), хотя для машины, которая будет выполнять всего одну программу, это пожалуй лишнее.

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

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

Поэтому оттачивая графический интерфейс, я надеюсь в дальнейшем сэкономить время и при написании программ для камер, которым интерфейс вообще не требуется. Требования к интерфейсу были следующие: Он должен был быть виден на экране, подключенном через HDMI при включенном предпросмотре силами GPU.

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

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

Это очень удобно при юстировке оптической системы. Для широкоугольных объективов смещение и перекос на десятую мм уже смертелен и часто стопорный винт уже дает неприемлемое смещение объектива.

Однако основное назначение программы это формирование изображения для предпросмотра средствами OpenCV, как на экране подключенного через HDMI монитора, так и на удаленном рабочем столе через VNC. С учетом имеющегося опыта интерфейс был реализован на Tkinter и Python 3. У Адриана есть хороший пример и на эту тему OpenCV with Tkinter, но для Python 2.

Синтаксис может и не сильно отличается, но достаточно, чтобы можно было прямо воспользоваться кодом. Кроме того, необходимость двойного преобразования форматов наводит на мысль о использовании других средств для создания графического интерфейса.  Сперва надо переставить каналы и преобразовать из формата OpenCV в формат PIL/Pillow (Pillow – форк библиотеки PIL, Python Imaging Library), а затем этот формат преобразовать в формат ImageTk.

image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)image = Image.fromarray(image)image = ImageTk.PhotoImage(image)

Ниже представлены несколько снимков экрана, демонстрирующие возможности того что у меня получилось.

Рассмотрим подробнее возможности, предоставляемые меню:

Приведены два снимка меню, как они выглядят в разных режимах. А теперь рассмотрим построчно:

  1. Режим камеры (P, auto, off) и размер снимка
  2. Баланс белого. В центре предустановленные режимы. При off слева уровень красного, справа синего
  3. B&W – черно белый снимок, full – полноэкранный режим для монитора HDMI, DP – исправление искажений для объективов рыбий глаз
  4. Кнопка позволяет вывести в следующей строке выдержку, выбранную автоматикой
  5. Ручная установка выдержки
  6. Предпросмотр через GPU и монитор, подключенный к HDMI, Stop – остановка всех режимов просмотра
  7. Изменение масштаба выводимой картинки. Для GPU, если задан размер кадра больший экрана, это фрагмент, для CV просто увеличение изображения
  8. Сдвиг вправо-влево увеличенного изображения
  9. Выбор камеры. L -левая стереокамера, R- правая. При выборе камеры кнопка меняет цвет на красный
  10. Предпросмотр средствами CV всей картинки и два варианта вывода стерео изображения. ST- последовательно делаются два снимка, объединяются в одно изображение и выводятся на экран, ST1 – снимки выводятся сразу после съемки по отдельности
  11. Частота кадров. Определяет максимальную по длительности выдержку
  12. Чувствительность. 0(автомат), 100, 200, 400, 800
  13.  Компенсация экспозиции
  14. Контраст
  15.  Dynamic Range Compression – сжатие динамического диапазона
  16. Управление диафрагмой объективов Canon. Закрыть на пол деления (cd+), открыть (cd-), полностью открыть (cdo)
  17. Управление фокусировкой объективов Canon. inf к бесконечности, macro к ближнему плану, AF – автоматическая фокусировка. Когда выбраны не управляемые объективы, кнопки сереют
  18. Кнопка производит замер локального контраста  и выводит его в поле рядом. Этот параметр служит для оценки качества фокусировки и используется при автофокусировке. В процессе автофокусировки выводятся текущие значения. Последняя в ряду кнопка, запускающая другой алгоритм фокусировки. Более быстрый чем на предыдущей строке, но все равно около 15 секунд
  19. Кнопки разных режимов съемки. F1- без исправления искажений, но с записью параметров в EXIF, F2 с исправлениями, если стоит соответствующая галочка в строке 3, но без EXIF, SF – съемка стереопары и запись единым кадром, DP – съемка и запись стереопары с коррекцией вне зависимости от галочки и вычисление и запись карты глубин.

Исправление искажений при постановке галочки в поле DP. Срабатывает на лету.

Для коррекции искажений за основу взят пример opencv-python-fisheye-example. Рассмотрим подпрограмму делающую исправленный стереоснимок:

# Стереоснимокdef sinxv3s():    global flag,frs    if flag==0:        sels()    else:        flag=0        picam2()        panelB = None        panelA = None        camera.resolution = (480, 640)        camsetcv()        rawCapture = PiRGBArray(camera, size=(480, 640))        time.sleep(0.1)        j=0        k=0        for frame in camera.capture_continuous(rawCapture, format=”bgr”, use_video_port=True):            if j==0:                image0 = frame.array                                                gp.output(7, False)                                j=1            else:                image1 = frame.array                                gp.output(7, True)                                j=0                rawCapture.truncate(0)            k=k+1            if k == 2:                break        # Меняем проекцию с рыбьего глаза на прямолинейную        if flagdp.get() == 1:            fc=120*fcams/(z1+20)            cx=240-6*xt*(1-z1/100)            K = np.array([[  fc,     0.  ,  cx],                          [    0.  ,   fc,   320],                          [    0.  ,     0.  ,     1.  ]])            # Дисторсию кладем равной нулю            D = np.array([0., 0., 0., 0.])            # используем Knew для масштабирования            Knew = K.copy()            fsc=0.89 +(100-z1)/(500-2*z1)            Knew[(0,1), (0,1)] = fsc*Knew[(0,1), (0,1)]            image0 = cv2.fisheye.undistortImage(image0, K, D=D, Knew=Knew)            image1 = cv2.fisheye.undistortImage(image1, K, D=D, Knew=Knew)        imgL = image0        imgR = image1        rows,cols,ch = imgL.shape        # Совмещение изображений        M = np.float32([[1,0,-14],[0,1,-17]])#сдвиг x,y        M1 = cv2.getRotationMatrix2D((cols/2,rows/2),-3.3,1)#угол, масштаб        # Применяем сдвиг и поворот        dst = cv2.warpAffine(imgL,M1,(cols,rows))         dst = cv2.warpAffine(dst,M,(910,610))        # Объединяем изображения        dst[0:610, 455:910] = imgR[0:610, 10:465]#y1:y2,x1:x2        # Записываем стереопару        frs=frs+1        cv2.imwrite(“/home/pi/fotopicam/”+ffs+”st%03d.jpg” % frs, dst) # Вывод изображения на экран        image = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)        image = Image.fromarray(image)        image = ImageTk.PhotoImage(image)        if panelA is None :            panelA = Label(image=image)            panelA.image = image            panelA.grid(row=0,column=0,rowspan=24)        else:            panelA.configure(image=image)            panelA.image = image         root.update()        while flag==0:            time.sleep(0.1)            root.update()        panelA.grid_forget()

Используется функция image = cv2.fisheye.undistortImage(image, K, D, Knew). Где К матрица вида:

fc – фокусное расстояние в пикселях. Т.е. если у нас  объектив рыбий глаз с фокусным расстоянием 18 мм, матрица размером 36х24 мм и кадр 640х480 пикселей, то фокусное расстояние будет равно 320.

Фокусное расстояние в матрице встречается дважды, предполагается, что объектив может быть анаморфотным и иметь разное фокусное расстояние в вертикальной горизонтальной плоскостях. cx и cy координаты центра. D – дисторсия, мы ее полагаем равной 0.

Сделав серию снимков шахматной доски, можно вычислить точные значения коэффициентов для конкретного объектива. Угол обзора и фокусное расстояние в мм можно получить командой: finfo=cv2.calibrationMatrixValues(K,(640,480),36,24)
В идеале надо максимально совместить изображения, физически перемещая и вращая камеры.

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

Вычисление карты глубин:

Для вычисления карты глубин в OpenCV есть несколько функций. У меня лучше получилось с StereoBM. Важно отметить, что результат сильно зависит от качества совмещения по вертикали и исправления искажений. Модуль вычисления карты глубин приведен ниже.

# Карта глубинdef sinxv4s(): global flag,frs if flag==0: sels() else: flag=0 picam2() panelB = None panelA = None camera.resolution = (480, 640) camsetcv() rawCapture = PiRGBArray(camera, size=(480, 640)) time.sleep(0.1) j=0 k=0 for frame in camera.capture_continuous(rawCapture, format=”bgr”, use_video_port=True): if j==0: image0 = frame.array gp.output(7, False) j=1 else: image1 = frame.array gp.output(7, True) j=0 rawCapture.truncate(0) k=k+1 if k == 2: break # Правим дисторсию if flagdp.get() >= 0: fc=120*fcams/(z1+20) cx=240-6*xt*(1-z1/100) K = np.array([[ fc, 0. , cx], [ 0. , fc, 320], [ 0. , 0. , 1. ]]) D = np.array([0., 0., 0., 0.]) Knew = K.copy() fsc=0.89 +(100-z1)/(500-2*z1) Knew[(0,1), (0,1)] = fsc*Knew[(0,1), (0,1)] image0 = cv2.fisheye.undistortImage(image0, K, D=D, Knew=Knew) image1 = cv2.fisheye.undistortImage(image1, K, D=D, Knew=Knew) imgL = image0 imgR = image1 rows,cols,ch = imgL.shape # Совмещение изображений mm=(z1-100)/4 -17 M = np.float32([[1,0,-14],[0,1,mm]])#сдвиг x,y M1 = cv2.getRotationMatrix2D((cols/2,rows/2),-3.3,1)#угол, масштаб # Применяем сдвиг и поворот dst = cv2.warpAffine(imgL,M1,(cols,rows)) dst = cv2.warpAffine(dst,M,(910,610)) # Объединяем изображения dst[0:610, 455:910] = imgR[0:610, 10:465]#y1:y2,x1:x2 # Записываем стереопару frs=frs+1 cv2.imwrite(“/home/pi/fotopicam/”+ffs+”st%03d.jpg” % frs, dst) # Вычисляем карту глубин stereo = cv2.StereoBM_create(numDisparities=32, blockSize=25) imge = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY) imgR1 = imge[0:610, 455:910] imgL1 = imge[0:610, 0:455] disp = stereo.compute(imgL1,imgR1) cv2.imwrite(“/home/pi/fotopicam/”+ffs+”stdp%03d.jpg” % frs, disp) image = (disp-0)/1 imge[0:610, 455:910] = image[0:610, 0:455] image = Image.fromarray(imge) image = ImageTk.PhotoImage(image) if panelA is None : panelA = Label(image=image) panelA.image = image panelA.grid(row=0,column=0,rowspan=24) else: panelA.configure(image=image) panelA.image = image root.update() while flag==0: time.sleep(0.1) root.update() panelA.grid_forget()

Автофокусировка:

Результат фокусировки на миру. Реализован простейший алгоритм. Сперва сдвигаем объектив на минимальную дистанцию, затем движемся к бесконечности, анализируя локальный контраст с помощью оператора Лапласа.

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

Ниже приведена подпрограмма, отвечающая за фокусировку.

# Быстрая фокусировкаdef fcanon4(): global flag if flag==0: sels() else: flag=0 picam3() panelB = None panelA = None camera.resolution = (640, 480) camera.rotation = 180 fram=int(Spinbox1.get()) camera.framerate = fram #camera.zoom = (0,0,1,1) serialcmd = “800000000006” #Сфокусироваться на минимальную дистанцию port.write(serialcmd.encode()) rawCapture = PiRGBArray(camera, size=(640, 480)) time.sleep(0.1) fm=0 for frame in camera.capture_continuous(rawCapture, format=”bgr”, use_video_port=True): canfi() image = frame.array gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) fm = cv2.Laplacian(gray, cv2.CV_64F).var() labelf.config(text= str(int(fm))) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = Image.fromarray(image) image = ImageTk.PhotoImage(image) if panelA is None : panelA = Label(image=image) panelA.image = image panelA.grid(row=0,column=0,rowspan=22) else: panelA.configure(image=image) panelA.image = image rawCapture.truncate(0) root.update() if flag == 1: break if fm > 30: break for frame in camera.capture_continuous(rawCapture, format=”bgr”, use_video_port=True): fm1=fm serialcmd = “8000000007t03” port.write(serialcmd.encode()) image = frame.array gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) fm = cv2.Laplacian(gray, cv2.CV_64F).var() labelf.config(text= str(int(fm))) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = Image.fromarray(image) image = ImageTk.PhotoImage(image) if panelA is None : panelA = Label(image=image) panelA.image = image panelA.grid(row=0,column=0,rowspan=22) else: panelA.configure(image=image) panelA.image = image rawCapture.truncate(0) root.update() if flag == 1: break if fm1 > fm: break serialcmd = “8000000007t]-” port.write(serialcmd.encode()) time.sleep(0.1) port.write(serialcmd.encode()) panelA.grid_forget() panelB = None panelA = None flag=1

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

Снимок сделан объективом Canon  EF 135 мм.

Кстати, не сложно объединить данную конструкцию с кубиком вращающим камеру и реализовать слежение.

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

Просмотр стереопары через телефон:

Просмотр стерео картинок на компьютере подробнее описан в статьях Стереокамера на 2-х Raspberry Pi и Стереосъемка.

Управлять камерой можно с телефона или компьютера через VNC, а если к камере подключен монитор, то можно воспользоваться Bluetooth клавиатурой с сенсорной панелью.

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

 

10.10.2016

Установите проигрыватель Flash

Источник: http://www.rwpbb.ru/raspberrypi/cvpicam.html

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