Raspberry Pi Camera


02.12.2014

Матриця камери 5 MP, камера має об`єктив з фіксованим фокусом і дозволяє отримати фотознімки з роздільною здатністю 2592x1944. Відео: 1080p, FPS: 30 кадрів за секунду, 720p при 60 кадрів за секунду і 640x480 до 90 кадрів за секунду. Камера повністю підтримується операційною системою Raspbian.

RasPiCam

Підключення камери

Будьте обережні! Камеру може пошкодити статична електрика! Модуль камери підключається до Raspberry Pi гнучким шлейфом до роз’єма, що знаходиться між Ethernet та HDMI.

RasPiCamConnector

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

RasPiCam4 RasPiCam5 RasPiCam6

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

RasPiCam3

Перш ніж вмикати камеру рекомендую оновити систему:


sudo apt-get update
sudo apt-get upgrade

Після чого запускаємо raspi-config і вмикаємо підтримку камери:


sudo raspi-config

raspi-config1

Міняємо Disable на Enable

raspi-config2

Перезавантажуємо Raspberry Pi:

raspi-config3

Зйомка з 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 <0 to 100>
-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 <`x,y,w,h`>
-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

Фото буде розміром 2592x1944 (5 Мп). Для зміни параметрів фото використовуйте параметри, які описані вище.

Зробити фото 640x480:


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 <`x,y,w,h`>
-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}`").

RasPiCamConvert

Успіхів.

Дивись також:

Raspberry Pi
Коментарі:
Додати коментар
Code
* - обов'язкові поля

Архіви