Серед цікавих доповнень Raspberry Pi є модуль відеокамери, призначений для підключення до шини CSI за допомогою стрічкового кабеля. Сама плата камери крихітна. ЇЇ розміри лише 25x20x9 мм, а важить всього 3 грами і поставляється з 15 см стрічковим кабелем. Датчик камери 5 MP, має об'єктив з фіксованим фокусом і дозволяє отримати нерухомі зображення з дозволом 2592x1944. Підтримка відео: 1080p 30 кадрів в секунду (fps), 720p при 60 fps і дозволом 640x480 зі швидкістю до 90 fps. Повна підтримка камери додана до Raspbian ОС, яку потрібно оновити. Підключається камера через роз’єм на платі RPi:
Програмне забезпечення
З моменту свого створення, камера підтримується в останній версії Raspbian, рекомендованій операційній системі для RPi. Перший крок - це отримати останню версію прошивки RPi, яка підтримує камеру. Ви можете зробити це з консолі командами:
sudo apt-get update
sudo apt-get upgrade
Вам необхідно ввімкнути камеру з програми конфігурації RPi, запустивши:
sudo raspi-config
Виберіть "camera" з програми, а потім виберіть "Enable support for Raspberry Pi camera". Ви повинні перезавантажити, коли буде запропоновано програмою raspi-config. Камера включиться при наступному завантаженні RPi і повинні стати доступними кілька додатків для камери:
rapistill - захоплення зображення (фотозйомка)
raspivid - захоплення відео (відеозйомка)
Time-lapse – захоплення зображення через рівні проміжки часу з наступним об’єднанням їх у відео
raspiyuv – захоплення зображення і його збереження у файлах незжатого формату YUV.
Це програми командного рядка. Розглянемо детальніше роботу з ними.
Використання raspistill
З підключеним і включеним модулем камери, введіть наступну команду в терміналі, щоб зробити знімок:
raspistill -o cam.jpg
Якщо у прикладі камера позиціонує перевернуте зображення, то зображення треба повернути на 180° для правильного відображення. Щоб це зробити, необхідно застосовувати розворот одночасно по вертикалі і по горизонталі, використовуючи ключі -vf і -hf:
raspistill -vf -hf -o cam2.jpg
Роздільна здатність
Як вже зазначалось вище, модуль камери дозволяє робити знімки з роздільною здатністю 2592х1944, що дає змогу отримати 5,038,848 пікселів або 5 мегапікселів.
Для зміни роздільної здатності, тобто режиму (mode), скористуйтеся ключем –md, з вказаним далі числовим значенням, вибраним з наведеної нижче таблиці:
Розмір файлу
Фотографія, зробленій за допомогою модуля камери буде мати розмір близько 2.4MB. Це приблизно в 425 фотографій на 1ГБ. Якщо робити 1 фото в хвилину, то вони займуть 1 Гб за 7 годин. Це близько 144MB за годину або 3.3GB за добу.
Bash-сценарій
Щоб не вводити такий довгий командний рядок щоразу при фотографуванні, ви можете створити сценарій Bash, який буде робити фотографію за допомогою камери. Для цього відкрийте редактор nano і запишіть наступний приклад коду:
#!/bin/bash
DATE=$(date +"%Y-%m-%d_%H%M")
raspistill -vf -hf -o /home/pi/camera/$DATE.jpg
Цей сценарій буде фотографувати і зберігати фото у файлі, назвою якого буде позначка часу.
Ви також повинні переконатися, що існує наведений в програмі шлях, створивши папку camera:
mkdir camera
Збережемо код, наприклад, як camera.sh, а потім зробимо файл виконуваним:
chmod +x camera.sh
Тепер запустимо його з:
./camera.sh
Додаткові параметри
Для отримання повного списку можливих опцій, запустіть raspistill без аргументів. Для прокрутки перенаправте стандартний потік помилок stderr на стандартний вивід stdout і вихідний потік на less:
raspistill 2>&1 | less
Використовуйте клавіші зі стрілками для переміщення, а для виходу натисніть q. Також з додатковими параметрами та прикладами їх використання можна ознакйомитись за посиланням (с.112).
Використання raspivid
За допомогою модуля камери, підключеної і включеної, записуємо відео за допомогою наступної команди:
raspivid -o vid.h264
Не забувайте використовувати -hf і -vf, щоб перевернути зображення, якщо потрібно, як з raspistill.
Буде записано 5 секунд відеофайла, вказаного тут як vid.h264 (проміжок часу за замовчуванням).
Вказуємо тривалість відео
Щоб вказати тривалість знятого відео, додають ключ -t з кількістю мілісекунд. Наприклад:
raspivid -o video.h264 -t 10000
Тепер буде записано 10 секунд відео.
Більше параметрів
Для отримання повного списку можливих опцій, запустіть raspivid без аргументів, або перенаправте цю команду на less і використайте прокручування:
raspivid 2>&1 | less
Використовуйте клавіші зі стрілками для переміщення, а для виходу введіть q.
Використання Time-lapse
Для створення покадрового відео, ви просто налаштуйте RPi, щоб зробити знімок через певний інтервал, наприклад, щохвилини, а потім використайте додаток, щоб зшити разом фотографії у відео. Хорошим способом для автоматизації зйомки через певний інтервал є використання cron.
Відкрийте таблицю cron для редагування:
crontab -e
Буде запитано, який редактор ви хотіли б використовувати, або відкриється в редакторі за замовчуванням. Якщо у редакторі відкриється файл, додайте наступний рядок, щоб запланувати зйомку щохвилини (з посиланням на Bash-сценарiй з raspistill):
* * * * * /home/pi/camera.sh 2>&1
Збережіть і вийдіть - ви повинні побачити повідомлення:
crontab: installing new crontab
Переконайтеся, що ваш сценарій не зберігає кожен знімок з одним і тим же ім'ям, бо це буде перезаписувати знімок щоразу.
Зшиваємо зображення разом
Тепер ви повинні будете зшити фотографії разом, щоб отримати відео.
Ви можете зробити це на RPi, використавши mencoder, але обробка буде повільною. Можна віддати перевагу передаванню файлів зображень на комп'ютер або ноутбук і обробленню відео там.
Перейдіть до папки, що містить всі зображення і запишіть імена файлів в текстовий файл. Наприклад, так:
ls *.jpg > stills.txt
На RPi або іншому комп'ютері Linux
Встановіть пакет mencoder:
sudo apt-get install mencoder
Тепер виконайте наступну команду:
mencoder -nosound -ovc lavc -lavcopts vcodec=mpeg4:aspect=16/9:vbitrate=8000000 -vf scale=1920:1080 -o timelapse.avi -mf type=jpeg:fps=24 mf://@stills.txt
Як тільки закінчиться виконання команди, ви повинні отримати відеофайл з ім'ям timelapse.avi, який містить покадрове відео з ваших зображень.
Використання raspiyuv
raspiyuv має той же набір функцій, як raspistill, але замість виведення таких стандартних графічних файлів, таких як .jpg, він генерує вихідні необроблені файли зображень з камери.
Сьогодні доступні три версії «рідних» камер для RPi - звичайна (а), для нічного бачення (б) і «шпигунська» (в):
Майже будь-яка USB-камера, яка підтримується на Linux, також може бути використана з RPi
Використання стандартної USB веб-камери
Якщо ви не маєте модуля камери для RPi, то можна використати звичайну USB веб-камеру. Покажемо, як налаштувати веб-камеру USB на RPi.
Перш ніж почати, перевірте, чи ваша USB веб-камера є однією з тих, про які відомо, що вони сумісні з RPi. Якщо USB веб-камера не знайдена в списку сумісності, не зневіряйтеся, оскільки є ще шанс, що ваша USB веб-камера може бути виявлена RPi.
Щоб перевірити, чи виявлена ваша USB веб-камера на RPi чи ні, підключіть її до USB свого RPi, і введіть в терміналі команду:
lsusb
Якщо після виконання команди не у виведеному списку немає вашої веб-камери, то є ймовірність, що це тому, що ваш RPi має недостатню величину струму на USB, необхідну для веб-камери. У цьому випадку, можете спробувати використати окреме живлення для USB веб-камери, наприклад, живлення від активного USB-хаба, а потім повторіть команду lsusb.
Ще одним способом перевірити, чи підтримується на RPi ваша USB веб-камера, є перевірка каталогу /dev. Якщо є /dev/video0, то це означає, що ваша USB веб-камера визначається RPi.
Якщо USB веб-камера, як і раніше, не розпізнається, то можемо тільки запропонувати купити іншу USB веб-камеру, яка підтримується RPi.
Встановлення fswebcam
По-перше, необхідно встановити пакет fswebcam:
sudo apt-get install fswebcam
Основи використання
Введіть команду fswebcam з назвою файла і буде зроблений знімок за допомогою веб-камери, який зберігається в файлі, назву якого ви вказали:
fswebcam image.jpg
Ця команда покаже наступну інформацію:
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
Adjusting resolution from 384x288 to 352x288.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd4
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'image.jpg'.
Зверніть увагу на невелику роздільну здатність, використану за замовчуванням, і наявність банера, який показує мітку.
Встановлення роздільної здатності
Якщо веб-камера, що використовується, має, наприклад, роздільну здатність 1280 х 720, то, щоб визначити таку роздільну здатність зображення, використайте прапор -r:
fswebcam -r 1280x720 image2.jpg
Зображення буде збережене із заданою роздільною здатністю веб-камери, але з банером.
Вимкнення банера
Тепер додайте прапор --no-banner:
fswebcam -r 1280x720 --no-banner image3.jpg
Отримаєте зображення з повною роздільною здатністю і без банера.
Зверніть увагу, що якість і можливості модуля камери RPi значно перевершують стандартну USB веб-камеру.
Завдання. Зробити фото та записати відео з різними параметрами та ефектами.
(За матеріалами EN: raspberrypi.org)