Обзор raspberry pi camera board v2
Содержание:
- 15) Pi Camera in a Kodak
- Особенности камеры для Raspberry Pi
- Raspberry Pi Multi Camera Adapter
- Arducam Camarray Multiple Camera Solutions
- Первоначальная настройка
- 13) Build a Coffee Bean Guardian
- Вариант 1: MotionEyeOS
- Create a Bash Script to Start mjpg_streamer
- Робот-тележка 2.0. Часть 3. Внутри навигационного стека ROS, немного majordomo
- Объяснение программы для Raspberry Pi
- Как подключить USB-камеру к Raspberry
- How to enable the autofocus feature once we’re ready?
- Шаг 1. Суть камеры
- Шлюз WebThings для Raspberry Pi
- Примеры работы через Python
- Объяснение программы для трансляции видеопотока в Raspberry Pi
- Подключение камеры
15) Pi Camera in a Kodak
Own an old Kodak camera that isn’t functioning? Well, perhaps its time to upcycle it to house a Raspberry Pi Zero and Pi Camera, bringing new a new perspective to your photography! With this project, you can refresh your retro camera shooting endeavours again!
This project uses a Kodak Brownie Flash III Camera but it should work with other iterations
Hardware Components:
- Raspberry Pi Zero W & 32GB SD card – flashed with Raspbian Lite
- Small LiPo battery
- Pimoroni Zero LiPo battery shim
- RTC DS3231 module
- Single NeoPixel for indicating status (ready to take photo/taking photo)
- Raspberry Pi Camera Module V2
- Momentary push button for the shutter
- Tilt switch for setting EXIF orientation data automatically
Особенности камеры для 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 Multi Camera Adapter
We released the first revision that supported the 5MP V1.3 Pi camera multiplexing in 2015. Later, we’ve released a newer adapter to add 8MP support in 2018.
Now, you can even use the latest IMX477 High Quality camera modules with it.
Raspberry Pi Multiple Camera Projects
During these years, the users have built many Raspberry Pi multiple camera projects with this adapter, and the following blogs show you 6 of them.
Arducam Camarray Multiple Camera Solutions
In 2019, we had another breakthrough in making the multiple cameras connected work synchronized, which is now the Camarray series. The new solution can merge and resize video inputs from multiple cameras to simulate the resolution and aspect ratio of a single camera that the native driver expects or bypass the limits of the native driver to fully display multiple video inputs with the Arducam V4L2 driver.
As we’ve made it more robust, versatile, and complete for the Raspberry Pi multiple camera solutions, the product released in 2015 has fulfilled its purposes and been replaced by its successors introduced in the following two blogs.
Leave your comments below!
Первоначальная настройка
1. Создаем новую учетную запись:
Помимо этого система обнаружила в локальной сети мой телевизор:
Поначалу она будет выглядеть ужасно:
Основные элементы в интерфейсе Home Assistant – это Entities и Glance. Они представляют собой группы сенсоров / кнопок / информеров, оформленные списком (Entities) или панелью иконок с подписями (Glance).
Также есть Badges – круглые значки, выводимые сверху. Именно в них Home Assistant по умолчанию вывел в системе сенсоры.
Первичную настройку я закончу на том, что удалю из интерфейса все бейджи и выведу карточки для мониторинга ситуации с коронавирусом, показателей системы и статуса Transmission. Также я сразу добавил кнопку для управления Xiaomi Mi LED Desk Lamp.
13) Build a Coffee Bean Guardian
Are you a coffee lover or need a fresh cup of coffee to kickstart the day? If the answer’s yes, chances are you’ve experienced that one fateful morning where your coffee beans ran out, spoiling the way to start your day. Hence, this project can help you monitor your coffee bean supply and auto-refill it!
Software Apps and Online Services:
- Amazon Web Services AWS Lambda
- Amazon Web Services AWS IAM
- Amazon Web Services AWS Rekognition
- Amazon Web Services AWS S3
- Amazon Web Services AWS SNS
- Amazon – Dash Replenishment Service
- Amazon – Login with Amazon
Interested to find out more? You can check out the full tutorial by Terren Peterson on Hackster.io!
Вариант 1: MotionEyeOS
Наиболее простой способ использования Raspberry Pi в качестве сетевой камеры – это использование приложения MotionEye.
MotionEye представляет собой сервер видеонаблюдения, работающий на базе консольной утилиты Motion. Которая, в свою очередь, позволяет распознавать движение на видеопотоке с камеры и выводить этот видеопоток на открытый порт веб-сервера.
MotionEye можно установить на любой компьютер под управлением Linux как обычное приложение, а на Raspberry Pi и некоторых других одноплатных компьютерах также возможно использовать готовую сборку MotionEyeOS – минималистичный Linux-дистрибутив, весящий всего 230Мб и не содержащий в себе ничего, кроме самого MotionEye и минимального количества необходимых для его работы пакетов.
Я считаю, что для IP-камеры удобнее использовать именно готовую сборку. Ведь мы же не будем делать из камеры многозадачное устройство, а раз так – правильнее установить максимально облегченную версию системы.
Поэтому скачиваем образ системы с этой страницы и записываем его на microSD-карту как любой другой Linux-дистрибутив для Raspberry Pi (если вы не знаете как это делать – подробнее все действия описаны в обзорах Raspberry Pi 3 и Raspberry Pi Zero W).
После чего создаем файл wpa_supplicant.conf со следующим содержимым:
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=RU network={ ssid="НАЗВАНИЕ ТОЧКИ ДОСТУПА WIFI" psk="ПАРОЛЬ ОТ WIFI" key_mgmt=WPA-PSK }
И кидаем его в корневую директорию карточки памяти с записанным образом. Это нужно для того, чтобы Zero W автоматически подсоединилась к беспроводной сети.
Затем находим локальный IP-адрес нашей камеры в локальной сети, и открываем его в браузере.
И перед нами открывается веб-интерфейс MotionEye с уже работающей камерой.
Для доступа к видеопотоку камеры и настройкам системы нужно залогиниться под пользователем admin с пустым паролем. В дальнейшем свой пароль можно будет задать в настройках.
К слову, настройки достаточно обширны. Мы можем:
- Менять разрешение и частоту кадров видеопотока
- Включать и отключать систему обнаружения движения на видео
- Задавать место для хранения видеозаписей, которым может быть как собственная память Zero W, так и расшаренный сетевой ресурс, FTP-сервер в интернете или облачные хранилища Dropbox и Google Диск
- Кодек, которым будет кодироваться видео
- Подключать дополнительные камеры, в том числе и сетевые, поддерживающие протоколы RTSP или MJPEG
- Записывать не только видео, но и фото с заданной частотой (или по срабатыванию детектора движения)
- Гибко настраивать сам модуль камеры, меняя в том числе и ISO с экспозицией
- Передавать поток с камеры на сторонний видеосервер
В общем, вещь вполне серьезная. Может быть не настолько, как коммерческие системы видеофиксации, но скорее всего возможности MotionEye закроют все потребности домашнего пользователя по части видеонаблюдения.
А что с недостатками? А главный недостаток заключается в том, что Motion на Raspberry Pi не умеет использовать аппаратное ускорение. Поэтому вся нагрузка при работе с видеопотоком ложится на процессор – далеко не самый мощный даже в третьей “малине” и откровенно слабоватый в Zero и Zero W.
Давайте просто посмотрим примеры видеозаписей, сделанных через MotionEye на Zero W:
- День, 640×480
- День, 800×600
- Ночь, 800×600
- День, 1024×768
- День, 1280×720
- День, 1600×1200
(Кстати, эти записи почему-то по-разному воспроизводятся в разных плеерах. Например, во всеядном Media Player Classic видео в высоких разрешениях идут как очень медленное слайдшоу, в то время как в Lister – встроенном в Total Commander просмотрщике файлов – они проигрываются намного лучше и с большей частотой кадров. Надо будет еще поэкспериментировать с выбором кодеков для сжатия)
Что мы видим? Хорошо пишется видеопоток с разрешением 640×480 пикселей, почти нормально идет видео в разрешении 800×600. На видео в более высоких разрешениях процессорной мощности Raspberry Pi Zero W уже не хватает и fps падает до 2-3 кадров в секунду.
Так что придется идти на компромисс, выбирая между разрешением видео и частотой кадров. Ну и о возможности Raspberry Pi Camera Board снимать в fullHD разрешении можно забыть: снимать-то она может, но видеопоток не будет успевать обрабатываться, поэтому в таком разрешении можно рассчитывать только на фотофиксацию.
Create a Bash Script to Start mjpg_streamer
Once you’ve settled on the settings you like, you should create a bash script that makes it easy to launch with a simple command.
11. Create a new file called startcam.sh by entering:
12. Enter your code. It’s #!/bin/bash in the top line, followed by your mjp_streamer launch line. For example:
(Image credit: Tom’s Hardware)
Hit CTRL+X to exit and hit Y to save
13. Make startcam.sh executable by typing:
You can now launch it anytime you want by typing the following at the command prompt when you’re in your home directory.
14. Add startcam.sh to the bottom of your /etc/rc.local file, above the exit 0 command, if you want it to run every time you boot the Raspberry Pi. Remember to use the full path name (ex: /home/pi/startcam.sh).
(Image credit: Tom’s Hardware)
Робот-тележка 2.0. Часть 3. Внутри навигационного стека ROS, немного majordomo
Tutorial
Эта часть цикла статей по навигации домашнего автономного робота на базе open-source linorobot будет суховата на картинки, так как будет большей частью посвящена теории. «Теория, мой друг, суха, но зеленеет жизни древо», -как говорил классик. Заглянем под капот linorobot, разберем подробно составляющие его навигационного стека ROS, а также n-е количество параметров, стандартно используемых в ROS.
В конце небольшой бонус — как прикрутить робота к другому проекту — majordomo и приподнять автоматизацию своего жилища на новый уровень.
Предыдущие статьи цикла:Робот-тележка 2.0. Часть 2. Управление в rviz и без. Элементы красоты в rvizРобот-тележка 2.0. Часть 1. Автономная навигация домашнего робота на базе ROS
Объяснение программы для Raspberry Pi
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
После того, как все необходимые соединения в схеме сделаны, мы можем подать питание на Raspberry Pi и после загрузки ее операционной системы можно начать писать программу в ней на Python. Подробнее о том, как это можно сделать, можно прочитать в статье про мигание светодиода с помощью Raspberry Pi.
Первым делом в программе нам необходимо подключить используемые библиотеки, инициализировать необходимые переменные и контакты.
Python
import RPi.GPIO as gpio
import picamera
import time
m11=17
m12=27
led=5
buz=26
button=19
RS =18
… ….
… …..
1 |
importRPi.GPIO asgpio importpicamera importtime m11=17 m12=27 led=5 buz=26 button=19 RS=18 ……. …….. |
Функция def capture_image() используется для захвата изображения посетителя с временем и датой.
Python
def capture_image():
lcdcmd(0x01)
lcdprint(«Please Wait..»);
data= time.strftime(«%d_%b_%Y\%H:%M:%S»)
camera.start_preview()
time.sleep(5)
print data
camera.capture(‘/home/pi/Desktop/Visitors/%s.jpg’%data)
camera.stop_preview()
lcdcmd(0x01)
lcdprint(«Image Captured»)
lcdcmd(0xc0)
lcdprint(» Successfully «)
time.sleep(2)
1 |
defcapture_image() lcdcmd(0x01) lcdprint(«Please Wait..»); data=time.strftime(«%d_%b_%Y\%H:%M:%S») camera.start_preview() time.sleep(5) printdata camera.capture(‘/home/pi/Desktop/Visitors/%s.jpg’%data) camera.stop_preview() lcdcmd(0x01) lcdprint(«Image Captured») lcdcmd(0xc0) lcdprint(» Successfully «) time.sleep(2) |
Функция def gate() используется для управления двигателем постоянного тока, который в нашем проекте используется в качестве ворот (Gate).
Python
def gate():
lcdcmd(0x01)
lcdprint(» Welcome «)
gpio.output(m11, 1)
gpio.output(m12, 0)
time.sleep(1.5)
gpio.output(m11, 0)
gpio.output(m12, 0)
time.sleep(3)
gpio.output(m11, 0)
gpio.output(m12, 1)
time.sleep(1.5)
gpio.output(m11, 0)
gpio.output(m12, 0)
lcdcmd(0x01);
lcdprint(» Thank You «)
time.sleep(2)
1 |
defgate() lcdcmd(0x01) lcdprint(» Welcome «) gpio.output(m11,1) gpio.output(m12,) time.sleep(1.5) gpio.output(m11,) gpio.output(m12,) time.sleep(3) gpio.output(m11,) gpio.output(m12,1) time.sleep(1.5) gpio.output(m11,) gpio.output(m12,) lcdcmd(0x01); lcdprint(» Thank You «) time.sleep(2) |
Также запрограммируем ряд функций для работы с ЖК дисплеем (их коды приведены в конце статьи):
- def begin() – для инициализации ЖК дисплея;
- def lcdcmd(ch) – для передачи команд на ЖК дисплей;
- def lcdwrite(ch) – для передачи данных на ЖК дисплей;
- def lcdprint(Str) – для передачи строки на ЖК дисплей.
После этого мы инициализируем ЖК дисплей и камеру и начинаем непрерывно в цикле проверять состояние кнопки. При нажатии кнопки мы будем открывать ворота для входа, будет делаться фотоснимок посетителя и вместе с датой и временем сохраняться в памяти платы.
Python
while 1:
d= time.strftime(«%d %b %Y»)
t= time.strftime(«%H:%M:%S»)
lcdcmd(0x80)
lcdprint(«Time: %s»%t)
lcdcmd(0xc0)
lcdprint(«Date:%s»%d)
gpio.output(led, 1)
if gpio.input(button)==0:
gpio.output(buz, 1)
gpio.output(led, 0)
time.sleep(0.5)
gpio.output(buz, 0)
capture_image()
gate()
time.sleep(0.5)
1 |
while1 d=time.strftime(«%d %b %Y») t=time.strftime(«%H:%M:%S») lcdcmd(0x80) lcdprint(«Time: %s»%t) lcdcmd(0xc0) lcdprint(«Date:%s»%d) gpio.output(led,1) ifgpio.input(button)== gpio.output(buz,1) gpio.output(led,) time.sleep(0.5) gpio.output(buz,) capture_image() gate() time.sleep(0.5) |
Рассмотренную в данном проекте систему мониторинга посетителей на основе платы Raspberry Pi и камеры можно значительно усовершенствовать, дополнив ее системой компьютерного зрения и библиотекой OpenCV, с помощью которой можно сравнивать полученное изображение посетителя с хранящимися в памяти изображениями и осуществлять допуск посетителя только при совпадении его изображения с одним из хранящихся образцов.
Как подключить 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 может быть подключена к одноплатнику. Как можно видеть, это сделать очень легко – главное, четко следовать инструкциям.
How to enable the autofocus feature once we’re ready?
The last thing to do is to automate the focus process with a program.
Step 1: Software-controlled motorized focus
Let’s first get the motors moving.
With a simple python program, we can use the keyboard keys to move the focus motor.
If you are interested in how we’ve done that, here is the python code for software motorized focus control.
Software motorized focus Python code
Now we get a camera module with a software-controlled focus motor. That’s already a big step forward. You won’t have to do the focus near the camera module with your bare hands. Instead, you can sit remotely and adjust the focus with software.
Adjust the focus of a Pi camera with keyboard arrow keys
However, if we want to enable autofocus, we need the Raspberry Pi to decide whether the camera is in focus, and it should stop moving the focus motors. But how would the Pi know?
Step 2: Autofocus enabled by OpenCV
As the biggest open-source computer vision library, OpenCV can help us make the Pi smart enough to tell whether the camera is in focus – by contrast detection.
The intensity difference between adjacent pixels of the sensor naturally increases with correct image focus. Then the Pi can adjust the motor until the maximal contrast is detected.
Arducam provides an OpenCV-powered autofocus example in Python. Here is what the image looks like on Raspbian when it runs.
Raspberry Pi camera autofocus in Raspbian
If you are interested in how we’ve done that, here is the python code for autofocus.
Шаг 1. Суть камеры
Обычно такие скрытые камеры имеют возможность обнаружения движения, которая запускает процесс съемки каждый раз, когда что-то появляется в поле зрения. В таких камерах обычно используют PIR для запуска съемки или записи видео.
PIR — это пироэлектрический инфракрасный датчик движения.
К сожалению, использование PIR может привести к тому, что камера не будет запущена или объект съемки исчезнет полностью до срабатывания камеры. С помощью камеры в проекте мы можем решить эту проблему, избавившись от PIR и вместо этого используя систему обнаружения. Мы также сможем фиксировать события, которые происходят до обнаружения движения (благодаря возможностям программного обеспечения), что увеличивает вероятность получения идеальных фото или видео.
Главное теперь взять с собой Raspberry Pi и порыться на кухне в поисках пластмассового контейнера для продуктов.
Если вы используете модуль No-IR Pi Camera (без инфракрасного фильтра) и некоторые ИК-светодиоды, вы можете сделать камеру с возможностью ночного видения.
Чтобы сделать проект проще мы используем с нашей Raspberry Pi библиотеку MotionEyeOS. Она предназначена для видеонаблюдения, но идеально подходит для нашей камеры, поскольку поддерживает неподвижные изображения, а также делает запись видео качества HD, плюс обладает возможностью обнаружения движения.
Шлюз WebThings для Raspberry Pi
Шлюз WebThings от Mozilla — это программное обеспечение для шлюзов, используемых в системах умного дома, которое позволит напрямую мониторить и контролировать умные устройства через интернет без посредников.
Что вам понадобится
- Компьютер Raspberry Pi и источник питания (для Raspberry Pi 3 требуется не менее 2A)
- microSD card (не менее 8 ГБ, class 10)
- USB адаптер (см. список )
Примечание: Raspberry Pi 3 поставляется с Wi-Fi и Bluetooth. Адаптер USB необходим для подключения устройств по протоколам вроде Zigbee и Z-Wave.
2. Прошейте образ
Прошейте образ на карту microSD. Существуют разные способы записи. Мы рекомендуем использовать Etcher.
- Откройте Etcher
- Вставьте карту памяти в адаптер вашего компьютера.
- Выберите образ в качестве источника
- Выберите карту памяти
- Нажмите “Flash!”
После завершения, извлеките карту памяти.
3. Загрузка Raspberry Pi
- Вставьте карту памяти в Raspberry PI
- Подключите USB адаптеры при наличии
- Подключите питание для начала загрузки
Примечание: Первая загрузка Raspberry Pi может занять 2-3 минуты.
4. Подключение по Wi-Fi
После загрузки шлюз создаст точку доступа “WebThings Gateway XXXX” (где ХХХХ — это четыре цифры из MAC-адреса Raspberry Pi). Подключитесь к этой точке с вашего компьютера или смартфона.
После подключения вы должны увидеть приветственный экран шлюза WebThings, который затем начнёт поиск вашей домашней Wi-Fi сети.
Выберите вашу домашнюю сеть из списка и введите пароль для подключения.
Примечание:
- Если вы подключились к точке доступа “WebThings Gateway XXXX”, но не видите экрана приветствия, попробуйте открыть страницу по адресу 192.168.2.1.
- Raspberry Pi можно подключить к сети и с помощью кабеля Ethernet. В таком случае он попытается получить IP-адрес сети с вашего роутера автоматически. Затем наберите в браузере “http://gateway.local” для первичной настройки шлюза.
- Если вы переместите шлюз в другое место или он потеряет доступ к изначальной сети, то он автоматически перейдёт в режим точки доступа, чтобы вы смогли подключиться к нему и настроить другую сеть.
5. Выбор субдомена
После подключения шлюза к сети, убедитесь, что ваш компьютер или смартфон, с которого вы производите настройку, находится в той же сети. После этого перейдите по адресуgateway.local в браузере.
После этого у вас появится опция зарегистрировать бесплатный субдомен для доступа к шлюзу вне локальной сети через защищённый туннель от Mozilla.
Введите желаемый субдомен и адрес электронной почты (для сброса пароля в будущем), и нажмите «Create».
Примечание:
- Этот шаг можно пропустить и использовать шлюз полностью локально, либо настроив проброс портов и DNS самостоятельно. Однако в этом случае, если в будущем вы всё-таки решите использовать субдомен Mozilla, настройки шлюза придётся полностью сбросить.
- Если страница по адресу gateway.local не открывается, попробуйте узнать IP-адрес шлюза через ваш роутер (ищите в списке подключённых устройство вроде “gateway” или с MAC-адресом, начинающимся на “b8:27:eb”), и попробуйте открыть страницу прямо по IP.
- Если gateway.local и http:// не работают, убедитесь, что и ваш компьютер, и Raspbeery Pi подключены к одной и той же сети.
- Если вы уже регистрировали субдомен ранее, введите его имя и тот адрес электронной почты, который вы использовали при его регистрации. На экране появятся инструкции по получению доступа.
6. Создание аккаунта
После регистрации субдомена откроется страница со следующими этапами настройки шлюза. Введите ваше имя, адрес электронной почты и пароль, и нажмите «Next».
Примечание: Дополнительные аккаунты можно создать позже.
Готово!
После этого должна открыться страничка «Things» для подключения умных устройств к шлюзу.
См. Руководство пользователя шлюза WebThings для дальнейшей настройки.
Примеры работы через Python
Проведём эксперименты с камерой через интегрированную среду разработки Python3.
Тест камеры
- Запустите IDLE, войдя в главное меню и выбрав пункты ProgrammingPython 3 (IDLE)
- Создайте новый файл и сохраните его.
Не сохраняйте файл под именем picamera.py — название зарезервировано для системного файла. Если файл перезаписать — камера не будет работать.
- Введите следующий код.
- testCamera.py
-
# подключаем необходимые библиотекиfrom picamera import PiCamera fromtimeimport sleep # создаём объект для работы с камерой camera = PiCamera() # запускаем предпросмотр сигнала с камеры на экране поверх всех окон camera.start_preview() # 10 секунд смотрим на экран sleep(10) # выключаем предпросмотр camera.stop_preview()
- Сохраните файл комбинацией клавиш и запустите его выполнение, нажав . На десять секунд на экране появится изображение с камеры.
Ваша камера исправна, правильно подключена и готова к работе!
Снимок фото
Изменим код предыдущего примера, чтобы сохранить фотографию с камеры в файл.
- Уменьшите время ожидания следующей команды с десяти до трёх секунд. Для этого измените параметр функции . Не уменьшайте его меньше двух секунд — камере необходима пауза между включением и выполнением снимка. За это время модуль автоматически скорректирует баланс белого и экспозицию.
- Перед последней строкой добавьте функцию и укажите путь, по которому будет находиться наша фотография. У вас должен получиться следующий код:
- saveImage.py
-
# подключаем необходимые библиотекиfrom picamera import PiCamera fromtimeimport sleep # создаём объект для работы с камерой camera = PiCamera() # запускаем предпросмотр сигнала с камеры на экране поверх всех окон camera.start_preview() # даём камере три секунды на автофокусировку и установку баланса белого sleep(3) # делаем снимок и сохраняем его на рабочий стол с именем image.jpg camera.capture('/home/pi/Desktop/image.jpg') # выключаем режим предпросмотра camera.stop_preview()
- Сохраните файл и запустите его. В результате его выполнения на рабочем столе появится фотография с камеры.
Запись видео
Теперь попробуем использовать модуль в режиме видеокамеры — снимем минутный ролик и сохраним его на рабочий стол. Для этого изменим код из предыдущего примера.
- Замените функцию на функции и — для начала и окончания записи.
- Длину ролика можно задать с помощью параметра функции , как мы это делали в предыдущих примерах. Но мы рекомендуем использовать метод — он отслеживает и обрабатывает ошибки записи.
- camera.py
-
from picamera import PiCamera fromtimeimport sleep camera = PiCamera() # Запускаем предпросмотр сигнала с камеры на экране поверх всех окон camera.start_preview() # Начинаем запись видеофайла camera.start_recording('/home/pi/Desktop/video.h264') # Минуту пишем потоковое видео camera.wait_recording(60) # Останавливаем запись camera.stop_recording() # Выключаем предпросмотр camera.stop_preview()
После минутного ожидания, на рабочем столе появится видеофайл с камеры. Для просмотра ролика используйте встроенный плеер.
- https://masterclub.online/topic/14962-kamera-nablyudeniya-dlya-doma
- https://arduinoplus.ru/raspberry-pi-kamera/
- http://wiki.amperka.ru/rpi:camera-install
Объяснение программы для трансляции видеопотока в Raspberry Pi
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Первым делом в программе необходимо подключить (импортировать) необходимые нам библиотеки.
Python
import cv2
import cvui
1 |
importcv2 importcvui |
В следующий фрагмент кода программы вам будет необходимо внести небольшие правки. Вам необходимо будет ввести имя пользователя (username) и пароль (password) для вашего видеорегистратора. Для используемого нами 5-дюймового дисплея ширина и высота составляют 800 и 480 пикселов соответственно.
Python
rtsp_username = «admin»
rtsp_password = «aswinth347653»
width = 800
height = 480
cam_no = 1
1 |
rtsp_username=»admin» rtsp_password=»aswinth347653″ width=800 height=480 cam_no=1 |
Далее мы запрограммируем функцию под названием create_camera, она будет вызываться каждый раз когда мы будем изменять номер камеры для просмотра.
Python
def create_camera (channel):
rtsp = «rtsp://» + rtsp_username + «:» + rtsp_password + «@192.168.29.100:554/Streaming/channels/» + channel + «02»
cap = cv2.VideoCapture()
cap.open(rtsp)
cap.set(3, 640) # ID number for width is 3
cap.set(4, 480) # ID number for height is 480
cap.set(10, 100) # ID number for brightness is 10qq
return cap
1 |
defcreate_camera(channel) rtsp=»rtsp://»+rtsp_username+»:»+rtsp_password+»@192.168.29.100:554/Streaming/channels/»+channel+»02″ cap=cv2.VideoCapture() cap.open(rtsp) cap.set(3,640)# ID number for width is 3 cap.set(4,480)# ID number for height is 480 cap.set(10,100)# ID number for brightness is 10qq returncap |
Внутри основного цикла программы мы будем считывать кадры с видео устройства (в нашем случае видеорегистратора) и конвертировать их до размера полного экрана. Окно дисплея в нашей программе будет называться screen.
Python
success, current_cam = cam.read()
dim = (width, height)
Full_frame = cv2.resize(current_cam, dim, interpolation=cv2.INTER_AREA)
cv2.namedWindow(‘screen’, cv2.WINDOW_NORMAL)
cv2.setWindowProperty(‘screen’, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
1 |
success,current_cam=cam.read() dim=(width,height) Full_frame=cv2.resize(current_cam,dim,interpolation=cv2.INTER_AREA) cv2.namedWindow(‘screen’,cv2.WINDOW_NORMAL) cv2.setWindowProperty(‘screen’,cv2.WND_PROP_FULLSCREEN,cv2.WINDOW_FULLSCREEN) |
Затем мы напишем фрагменты программы для обработки нажатий двух кнопок, размещенных на экране. Команда cvui.button используется для размещения кнопки на заданном месте, а команда cvui.mouse используется для обнаружения нажатия кнопок. Проверку нажатия кнопок мы осуществляем с помощью условий if.
Python
if (cvui.button(Full_frame, width — 100, height — 40, «Next») and cvui.mouse(cvui.CLICK)):
print(«Next Button Pressed»)
cvui.init(‘screen’)
cam_no = cam_no+1
if (cam_no>4):
cam_no=1
del cam
cam = create_camera(str(cam_no))
if (cvui.button(Full_frame, width — 200, height — 40, «Previous») and cvui.mouse(cvui.CLICK)):
print(«Previous Button Pressed»)
cvui.init(‘screen’)
cam_no = cam_no — 1
if (cam_no<1):
cam_no=4
del cam
cam = create_camera(str(cam_no))
1 |
if(cvui.button(Full_frame,width-100,height-40,»Next»)andcvui.mouse(cvui.CLICK)) print(«Next Button Pressed») cvui.init(‘screen’) cam_no=cam_no+1 if(cam_no>4) cam_no=1 delcam cam=create_camera(str(cam_no)) if(cvui.button(Full_frame,width-200,height-40,»Previous»)andcvui.mouse(cvui.CLICK)) print(«Previous Button Pressed») cvui.init(‘screen’) cam_no=cam_no-1 if(cam_no<1) cam_no=4 delcam cam=create_camera(str(cam_no)) |
При нажатии кнопок мы увеличиваем или уменьшаем (в зависимости от того какая кнопка нажата) номер камеры (cam_no), после чего удаляем действующую камеру и создаем новую камеру с помощью функции, рассмотренной выше. Также необходимо каждый раз вызывать функцию cvui.init чтобы обновить экран пользовательского интерфейса.
В заключительной части кода мы будем отображать кадр на экране и осуществлять выход из экрана при нажатии клавиши ‘q’ – при этом мы будем уничтожать все созданные окна.
Python
cv2.imshow(‘screen’, Full_frame)
if cv2.waitKey(1) & 0xFF == ord(‘q’):
cv2.destroyAllWindows()
break
1 |
cv2.imshow(‘screen’,Full_frame) ifcv2.waitKey(1)&0xFF==ord(‘q’) cv2.destroyAllWindows() break |
Подключение камеры
Камеры чувствительны к статическому электричеству. Перед работой с модулем, устраните свой заряд — например прикоснитесь к домашней водопроводной трубе.
Для работы с камерой используйте подключение по HDMI. При работе через виртуальный рабочий стол (VNC) окно с захватом данных с камеры не отобразится.
-
Подключите камеру через FFC/FPC шлейф к Raspberry Pi в разъём CSI-2:
-
Официальная Raspberry Pi High Quality Camera
-
Официальная Raspberry Camera v2
-
Официальная Raspberry Camera v2 NoIR
- Камера (модель D);
- Камера (модель M);
- Камера (модель FPC);
- Камера (модель IR-CUT B);
- Камера (модель Zero).
-
-
Заведите Raspberry Pi.
-
Зайдите в меню конфигурации параметров Raspberry Pi:
Menu
Preferences
Raspberry Pi Configuration -
Перейдите на вкладку Interfaces, а затем переключите состояние пункта Camera из положения Disable в Enable. Сохраните изменения и перезагрузите Raspberry Pi.
На этом настройка камеры закончена и можно смело переходить к примерам работы.