сайт для палких паяльників

Матрица камеры 5 MP, камера имеет объектив с фиксированным фокусом и позволяет получать фотоснимки с разрешением 2592×1944. Видео: 1080p, FPS: 30 кадров в секунду, 720p при 60 кадров в секунду и 640×480 до 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 <size>
-h, --height    : Set image height <size>
-q, --quality   : Set jpeg quality <0 to 100>
-r, --raw       : Add raw bayer data to jpeg metadata
-o, --output    : Output filename <filename> (to write to stdout, use '-o -'). If not specified, no file is saved
-l, --latest    : Link latest complete image to filename <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 <t>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 <number>. 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

Фото будет размером 2592×1944 (5 Мп). Для изменения параметров фото используйте параметры, которые описаны выше.

Сделать фото 640×480:

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 <size>. Default 1920
-h, --height    : Set image height <size>. Default 1080
-b, --bitrate   : Set bitrate. Use bits per second (e.g. 10MBits/s would be -b 10000000)
-o, --output    : Output filename <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 <ms>
-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 <filename> for inline motion vectors
-cs, --camselect        : Select camera <number>. 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

Успехов.

Смотри также:
Translate
Архіви

© 2011-2017 Андрій Корягін, Кременчук - Київ, Україна