Raspberry Pi:Аппаратные средства/Использование стандартной USB-камеры
Содержание | Введение | Продукты | Операционная система | Настройка | Основы Linux | Аппаратные средства | Неисправности | Типовые проблемы | Часто возникающие вопросы | Библиотеки | Примеры |
Использование стандартной USB-камеры[1]
Чтобы снимать при помощи Raspberry Pi фото и видео, совсем не обязательно ограничивать себя официальным камера-модулем Raspberry Pi. Для этого может подойти и стандартная USB-вебкамера. Стоит отметить, впрочем, что камера-модуль заметно превосходит стандартные камеры по таким критериям, как качество и конфигурируемость.
Установка 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
Эта команда покажет следующую информацию:
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 1 extraneous bytes before marker 0xd5
Captured frame in 0.00 seconds.
--- Processing captured image...
Writing JPEG image to 'image2.jpg'.
Теперь снимок сделан с самым высоким разрешением, на которое способна эта камера, плюс полоска внизу, показывающая дату создания снимка.
Как убрать полоску с датой
Теперь добавим в команду метку —no-banner:
fswebcam -r 1280x720 --no-banner image3.jpg
Эта команда покажет следующую информацию:
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to 'image3.jpg'.
Теперь картинка в полном разрешении и без полоски с датой.
Плохие снимки
При использовании USB-камеры у вас могут получиться как хорошие, так и совершенно никудышные снимки — как тот, что показан ниже и даже обладает, на наш взгляд, некоторой художественной ценностью (которая, впрочем, «прилипла» к нему совершенно случайно):
Есть камеры получше, есть похуже, но такие дефекты свойственны именно низкокачественным камерам. Если проблема не исчезает, убедитесь, что обновили систему до самой последней версии. Кроме того, имеет смысл попробовать другую USB-камеру, но самым лучшим вариантом, опять же, будет именно камера-модуль.
Bash-скрипт
Создать снимок можно и при помощи собственноручно написанного bash-скрипта. Скрипт, описанный ниже, сохраняет фото в директорию /home/pi/webcam, поэтому для начала нам надо ее создать:
mkdir webcam
Чтобы создать скрипт, откройте любой текстовый редактор и впишите туда следующий код:
#!/bin/bash
DATE=$(date +"%Y-%m-%d_%H%M")
fswebcam -r 1280x720 --no-banner /home/pi/webcam/$DATE.jpg
Этот скрипт будет делать снимок, а затем давать ему название в виде даты. Теперь сохраняем скрипт (допустим, как webcam.sh) и делаем его выполняемым:
chmod +x webcam.sh
Теперь запускаем его при помощи команды:
./webcam.sh
Это запустит команды, указанные в скрипте, и покажет следующую информацию:
--- Opening /dev/video0...
Trying source module v4l2...
/dev/video0 opened.
No input was specified, using the first.
--- Capturing frame...
Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Captured frame in 0.00 seconds.
--- Processing captured image...
Disabling banner.
Writing JPEG image to '/home/pi/webcam/2013-06-07_2338.jpg'.
Таймлапс при помощи cron
Камеру можно настроить таким образом, чтобы она снимала фотографии с определенным интервалом (например, каждую минуту), и делается это при помощи cron.
Сначала открываем cron-таблицу, чтобы отредактировать ее:
crontab -e
На этом этапе система либо спросит, какой редактор вы хотите использовать, либо откроет редактор, указанный по умолчанию. Открыв файл, добавьте туда указанную ниже строчку (с отсылкой к bash-скрипту, описанному выше). Ее задача — настроить камеру таким образом, чтобы она делала снимки каждую минуту:
* * * * * /home/pi/webcam.sh 2>&1
Сохраняем и выходим. После этого мы должны увидеть следующее сообщение:
crontab: installing new crontab
Убедитесь, что созданный вами скрипт не сохраняет снимок в файл с одним и тем же названием. В таком случае этот файл будет просто каждый раз перезаписываться.
Другие инструменты
Ниже — ряд инструментов, которые могут пригодиться при использовании камеры/вебкамеры:
- SSH (безопасная оболочка) — для удаленного доступа к Raspberry Pi по локальной сети.
- SCP — для копирования файлов по SSH (чтобы передать копии снимков с Pi на главный компьютер).
- rsync — для синхронизации папок со снимками на Pi и компьютере.
- cron — для установки интервала между созданием снимков (например, чтобы делать снимок раз в минуту — для таймлапс-видео).