Raspberry Pi Camera
Матриця камери 5 MP, камера має об`єктив з фіксованим фокусом і дозволяє отримати фотознімки з роздільною здатністю 2592x1944. Відео: 1080p, FPS: 30 кадрів за секунду, 720p при 60 кадрів за секунду і 640x480 до 90 кадрів за секунду. Камера повністю підтримується операційною системою Raspbian.
Підключення камери
Будьте обережні! Камеру може пошкодити статична електрика! Модуль камери підключається до Raspberry Pi гнучким шлейфом до роз’єма, що знаходиться між Ethernet та HDMI.Спочатку витягніть фіксатор, потім вставте шлейф контактами до HDMI роз’єма. Шлейф має заходити без жодних зусиль. Після чого затисніть шлейф фіксатором, обережно засунувши його в роз’єм.
Камера має вагу близько 3 грамів і зовсім маленькі розміри. Для нормальної фіксації камери рекомендую зробити будь який тримач. Тримач, який Ви бачите на фото, надрукований на 3D принтері.
Перш ніж вмикати камеру рекомендую оновити систему:
sudo apt-get update
sudo apt-get upgrade
Після чого запускаємо raspi-config і вмикаємо підтримку камери:
sudo raspi-config
Міняємо Disable на Enable
Перезавантажуємо Raspberry Pi:
Зйомка з 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}`").
Успіхів.
Дивись також:
- Raspberry Pi — що це таке?
- Raspberry Pi — GPIO
- Raspberry Pi — UART
- Raspberry Pi — FT232
- Raspberry Pi — PWM і Сервопривод
- Raspberry Pi — DHT11
- Raspberry Pi - FM Transmitter
- Прошивка AVR мікроконтролерів за допомогою Raspberry Pi
- Raspberry Pi — LCD display 1602
- Raspberry Pi — WiFi
- Raspberry-Pi — I2C (TWI)
- Raspberry Pi - DS18B20
- Raspberry Pi Camera
- nRF24L01+ ATMEGA + Raspberry Pi
- BMP180 + Raspberry Pi + WH1602
- Wi-Fi Метео станція
- Raspbian. Apache + PHP + Python + MySQL
- Встановлюємо Raspbian на Raspberry Pi без клавіатури та монітору
- IR-дистанційне керування. Використання LIRC у Python
- Raspberry Pi. Raspbian. Відправлення пошти через аккаунт Gmail
- Neoway M590 – GSM/GPRS modem
- MPU-6050 – гіроскоп – акселерометр
- HMC5883L Магнітометр
- PWM контролер з інтерфейсом I2С на базі мікросхеми PCA9685
- Метеостанція на Raspberry Pi своїми руками
- Raspberry Pi. Live-stream video
Недавні записи
- Text to speech. Українська мова
- LCD Display ST7567S (IIC)
- Розпізнавання мови (Speech recognition)
- Selenium
- Комп'ютерний зір (Computer Vision)
- Деякі думки про точність вимірювань в електроприводі
- Датчики Холла 120/60 градусів
- Модуль драйверів напівмосту IGBT транзисторів
- Драйвер IGBT транзисторів на A316J
- AS5600. Варіант встановлення на BLDC мотор
Tags
docker sensors rtc led timer wifi remap sms css websocket mongodb bme280 rfid bluetooth esp8266 nodemcu bkp piezo bmp280 i2c mpu-6050 encoder examples avr brushless ngnix nvic displays bldc java-script pmsm barometer pwm lcd ethernet stm32 raspberry-pi capture usart gpio exti atmega meteo solar smd dma adc eeprom eb-500 flask python ssd1306 uart options flash mpx4115a html gps st-link 3d-printer servo dc-dc foc git books battery hih-4000 watchdog dht11 web tim programmator ssd1331 mpu-9250 usb rs-232 motor max1674 soldering
Архіви