А теперь настало время поговорить о модуле камеры. Благодаря камере, можно делать снимки, передавать изображение по сети и даже обнаруживать какое-либо движение.
В случае с теми, кто еще не пользовался и не умеют пользоваться данной камерой, задаются вопросом, как это сделать, поскольку это может показаться более сложным, чем установка ОС на Raspberry Pi. Но с помощью этой статьи, мы вас убедим, что это не так.
Серия статей «Основы Raspberry Pi»
- Введение в Raspberry Pi
- Установка системы на Raspberry Pi
- Программирование на scratch и python
- Командная консоль и основы Linux
- Контакты GPIO и их программирование
- Создание нового пользователя
- Конфигурация статического IP
- Удаленное подключение к Raspberry Pi
- Установка ОС Raspberry Pi Lite и связь через UART
- Использование камеры на Raspberry Pi
- ШИМ-сигнал в Python
К RPi можно подключить множество различных камер. Мы ориентируемся на использование основной камеры Raspberry, то есть Raspberry Pi Camera HD v2, считающейся самой распространенной.
Сначала несколько слов о технических параметрах камеры:
- Максимальное разрешение: 8 Мп (3280×2464),
- Режимы видео: 1080 p30 (Full-HD), 720p60, 640×480 p90 (VGA),
- Интерфейс : CSI,
- Вес : 3 г,
- Размеры: 25 х 24 х 9 мм.
Модуль Raspberry Pi Camera HD использует CSI (последовательный интерфейс камеры). Благодаря этому, весь этот комплект не нагружает шину USB. Кроме того, этот интерфейс совместим с графическим ускорителем (GPU), встроенным в Raspberry Pi.
Подключение камеры
Начнем с подключения камеры, которая ограничивается только вставкой шлейфа:
- На Raspberry Pi подключите шлейф к разъему CAMERA. Шлейф должен быть направлен серебряными контактами к разъему HDMI.
- Прикрепите шлейф к камере так, чтобы серебряные контакты были обращены к объективу.
При подключении шлейфа сделайте следующее: приподнимите замок разъема (своего рода пластина), вставьте шлейф и нажмите на замок разъема. Вам не нужно беспокоиться о положении камеры, изображение можно поворачивать программно.
Фотографирование
Начнем с основной функции, которая состоит в том, чтобы делать снимки. В первую очередь, как всегда, заходим в меню конфигурации и активируем камеру.
Для захвата фотографий воспользуемся программой Raspistill. Использовать программу для фотографирования довольно легко. Просто введите команду:
raspistill -o test.jpg
Вместо test.jpg можно указать любое имя файла. Фотография будет сделана ровно через 5 секунд после ввода вышеуказанной команды. Файл test.jpg будет сохранен в каталоге, из которого мы запускаем программу Raspistill.
Если у нас подключен монитор или используется VNC для предварительного просмотра изображения, просто найдите фотографию и дважды щелкните по ней, чтобы ее увидеть.
Если фотографии размыты, мы можем изменить фокус, вращая объектив камеры. Операция должна выполняться очень осторожно вручную или с помощью небольшого инструмента. Пожалуйста, будьте осторожны при настройке, так как линзу можно легко повредить, а точнее поцарапать!
Команды
Вот некоторые полезные команды, которые стоит знать:
Отключить предварительный просмотр. Отключите предварительный просмотр, добавив параметр -n :
raspistill -n -o test.jpg
Изменить время захвата. Время можно изменить с помощью параметра -t, за которым следует время в миллисекундах :
raspistill -n -o test.jpg -t 100
Примечание: во избежание проблем с качеством и прочего рекомендуется использовать не менее 100 мс.
Поворот изображения. Просто используйте параметр -rot , который поворачивает изображение на выбранный угол, который будет кратен 90°:
raspistill -n -o test.jpg -t 100 -rot 180
Вертикальное или горизонтальное отражение. У нас есть команды для отражения по горизонтали (-hf) и по вертикали (-vf):
raspistill -n -o test.jpg -t 100 -hf
raspistill -n -o test.jpg -t 100 -vf
Изменить разрешение. Нам не всегда требуется самое высокое разрешение, мы можем сэкономить много места, уменьшив размер загружаемого изображения. Установить ширину можно с помощью опции -w и высоту с помощью -h . Стандартная фотография разрешения VGA будет:
raspistill -n -o test_VGA.jpg -t 100 -w 640 -h 480
Добавить дату и время в файл. Программа Raspistill может запускаться автоматически, например, периодически или при обнаружении определенного события. В этом случае было бы удобно иметь возможность сохранять несколько файлов вместо того, чтобы каждый раз перезаписывать один и тот же файл test.jpg. Программа Raspistill имеет два варианта использования текущего времени в имени файла.
Опция -dt добавляет текущую дату и время к имени файла. В то время как параметр -ts добавляет так называемую метку времени, которая представляет собой количество секунд (это традиционный метод Unix для представления времени). Чтобы использовать эти возможности, в имени файла мы должны вставить маркер %d, который будет заменен на дату, когда была сделана фотография.
Мы можем выполнить следующие две команды для тестирования, например, даты 20.10.2020:
raspistill -n -o test_%d.jpg -t 100 -dt # Сохраним как test_10202041040.jpg
raspistill -n -o test_%d.jpg -t 100 -ts # Сохраним как test_1603196029.jpg
Другие настройки. Есть еще много команд. Наиболее важную информацию можно найти в описании, которое появляется после вызова команды raspistill без дополнительных параметров, тогда вся информация и команды появятся в виде списка. С описанными там атрибутами вы также можете изменять такие параметры, как ISO, баланс белого, яркость и контрастность.
Передача изображений в движении
Еще одно не менее интересное приложение для камеры Raspberry Pi — Motion, позволяющее в том числе передавать изображение по сети. Кроме того, его также можно использовать для отслеживания движения объектов.
Начнем с установки программы, введя команду:
sudo apt install motion
Установленная версия пакета Motion по умолчанию не имеет встроенной поддержки нашей камеры, поэтому нам необходимо установить соответствующий драйвер: Video4Linux (V4L). Для этого вводим следующую команду, отмечая, что предпоследний символ — это строчная буква «L», а не цифра «1»:
sudo modprobe bcm2835-v4l2
Теперь в каталоге /dev появится новое устройство, которое будет соответствовать веб-камере: /dev/video0.
Это стандартный интерфейс, используемый камерами в Linux.
Установленный пакет Motion имеет большие возможности и множество доступных опций. Файл конфигурации по умолчанию — /etc/motion/motion.conf. Доступ к каталогу /etc требует прав администратора, поэтому отредактируйте файл командой:
sudo nano /etc/motion/motion.conf
После запуска файла нам нужно внести некоторые важные изменения. Сначала ищем строку, где стоит опция stream_localhost. По умолчанию включено (on), меняем на off (выключено).
Вы можете использовать сочетание клавиш CTRL + W для поиска текста в nano.
Сохраняем файл и выходим. Затем запускаем пакет Motion командой:
sudo motion
При запуске программы, мы запускаем веб-браузер на нашем ПК. В адресной строке введите IP-адрес с портом 8081 (например, http://192.168.0.250:8081/). Через некоторое время мы должны увидеть небольшой поток передачи с нашей веб-камеры (1 FPS).
Нажмите CTRL + C, чтобы завершить консольную программу.
Чтобы увеличить FPS (кадры в секунду), нужно изменить следующие строки, которые по умолчанию установлены на 20:
stream_maxrate: максимальная скорость кадров в потоке.
Увеличиваем разрешение:
- width: ширину мы устанавливаем на 640,
- high: высоту мы устанавливаем на 480.
Обнаружение движения на Raspberry Pi
Как вы можете видеть, мы превратили Raspberry Pi в веб-камеру. Стоит помнить, что пакет Motion намного превосходит возможности обычных камер. Он позволяет обнаруживать движение, автоматически снимать фото или видео, уведомлять о событиях и т. д.
Более подробную информацию о программе вы можете найти на сайте проекта: https://motion-project.github.io/
Чтобы протестировать камеру, можно запустить, например, опцию, отвечающую за отслеживание движения. Для этого достаточно включить опцию в конфигурационном файле, которая называется locate_motion_mode (меняем с off на on). Движущиеся элементы теперь будут отмечены прямоугольником на потоковом изображении. Чтобы элемент обводился красным прямоугольником, locate_motion_style также нужно изменить на redbox.
В следующей статье поговорим о ШИМ-сигнале в Python, и вообще, как с ним работать.
С Уважением, МониторБанк