Телефонуйте » (+38) 096 227 41 41

Модуль камери - відмінний аксесуар для Raspberry Pi, який дозволяє користувачам робити фотознімки і записувати відео в форматі Full HD. В попередньому курсі ми запускали відеокамеру з командного рядка, але Python розширює можливості для роботи.

Відкрийте засіб налаштування Raspberry Pi (RPi) з головного меню:

Переконайтеся, що програмне забезпечення камери дозволене:

Якщо воно не включене, то увімкніть його і перезавантажте RPi, щоб продовжити.

Попередній перегляд камери

Тепер камера підключена, програмне забезпечення дозволене, тому можете приступити до роботи, спробувавши попередній перегляд камери.
Відкрити Python 3 з головного меню:

Відкрийте новий файл і збережіть його як camera.py. Дуже важливо, щоб ви не зберегли його як picamera.py.
Введіть наступний код:

from picamera import PiCamera
from time import sleep

camera = PiCamera()

camera.start_preview()
sleep(10)
camera.stop_preview()

Збережіть за допомогою Ctrl+S і запустіть за допомогою F5. Попередній перегляд камери повинен бути показаний протягом 10 секунд, а потім закриється. Поверніть камеру навколо, щоб переглянути, що бачить камера.
Якщо зображення було перевернуте, то можете розвернути його за допомогою наступного коду:

camera.rotation = 180
camera.start_preview()
sleep(10)
camera.stop_preview()

Можете повернути зображення на 90, 180 або 270 градусів, або можете встановити його в 0, щоб скинути.
Можете змінити прозорість попереднього перегляду камери, встановивши альфа-рівень:

from picamera import PiCamera
from time import sleep

camera = PiCamera()

camera.start_preview(alpha=200)
sleep(10)
camera.stop_preview()

alpha може приймати будь-яке значення від 0 до 255.

Фотозйомка

Найчастіше модуль камери використовується для фотозйомки.
Змініть свій код, зменшивши sleep і додавши рядок camera.capture():

camera.start_preview()
sleep(5)
camera.capture('/home/pi/Desktop/image.jpg')
camera.stop_preview()

Дуже важливо, щоб sleep мало значення не менше 2 секунд перед зйомкою, щоб дати час сенсору  встановити свій рівень освітленості.
Виконайте код і побачите попередній перегляд камери, відкритий протягом 5 секунд перед зйомкою нерухомого зображення. Ви побачите попередній перегляд миттєво пристосований до різної роздільної здатності, як тільки знімок був зроблений.
Фото зберігається на робочому столі. Двічі клацніть файл, щоб відкрити його:

Тепер спробуйте додати цикл, щоб зробити п'ять знімків поспіль:

camera.start_preview()
for i in range(5):
    sleep(5)
    camera.capture('/home/pi/Desktop/image%s.jpg' % i)
camera.stop_preview()

Змінна i містить номер поточної ітерації, від 0 до 4, тому зображення будуть збережені як image0.jpg, image1.jpg і так далі.
Виконати код ще раз, тримаючи камеру в потрібному положенні. Вона буде робити один знімок кожні п'ять секунд.
Після того, як п'ятий знімок зроблений, попередній перегляд закриється. Тепер подивіться на зображення на робочому столі, де побачите п'ять нових знімків.

Запис відео

Ви використовували камеру для зйомки фотографій, а тепер можете перейти до запису відео.
Змініть свій код, щоб замінити capture() на start_recording() і stop_recording():

camera.start_preview()
camera.start_recording('/home/pi/video.h264')
sleep(10)
camera.stop_recording()
camera.stop_preview()

Виконайте код; який запише 10 секунд відео, а потім закриється вікно попереднього перегляду.
Для відтворення відео, вам необхідно відкрити вікно терміналу, натиснувши на значок чорного монітору на панелі завдань:

Введіть таку команду та натисніть Enter для відтворення відео:

omxplayer video.h264

Відтворення відео. Насправді, воно може програватися трохи швидше, ніж було зафіксовано, у зв'язку з іншою швидкістю частоти кадрів в omxplayer.

Ефекти

Доступні також інші налаштування. Ось список з їх значеннями за замовчуванням:

camera.sharpness = 0
camera.contrast = 0
camera.brightness = 50
camera.saturation = 0
camera.ISO = 0
camera.video_stabilization = False
camera.exposure_compensation = 0
camera.exposure_mode = 'auto'
camera.meter_mode = 'average'
camera.awb_mode = 'auto'
camera.image_effect = 'none'
camera.color_effects = None
camera.rotation = 0
camera.hflip = False
camera.vflip = False
camera.crop = (0.0, 0.0, 1.0, 1.0)

Спочатку, створюємо об'єкт camera з класом PiCamera() таким чином: camera = PiCamera(). Тепер можете управляти цим об'єктом camera для того, щоб налаштувати його параметри. Деякі з цих ефектів застосовуються тільки для попереднього перегляду, а не захоплення, а інші встановлюються тільки для захоплення, але багато впливають на обидва режими.
Дозвільна здатність захоплення налаштовується. За замовчуванням вона встановлена на роздільну здатність вашого монітора, але максимальна роздільна здатність становить 2592 x 1944 для нерухомих фотографій і 1920 x 1080 для запису відео. Спробуйте наступний приклад, щоб встановити максимальну роздільну здатність. Зверніть увагу, що вам також необхідно встановити частоту кадрів в 15, щоб включити цю максимальну роздільну здатність:

camera.resolution = (2592, 1944)
camera.framerate = 15
camera.start_preview()
sleep(5)
camera.capture('/home/pi/Desktop/max.jpg')
camera.stop_preview()

Мінімальний розмір зображення допускається 64 х 64. Спробуйте деякі з різних значень роздільної здатності.
До зображення можна легко додавати текст з annotate_text. Спробуйте:

camera.start_preview()
camera.annotate_text = "Hello world!"
sleep(5)
camera.capture('/home/pi/Desktop/text.jpg')
camera.stop_preview()

Можете змінити налаштування яскравості, яке може бути встановлене від 0 до 100. Значення за замовчуванням 50. Спробуйте інше його значення:

camera.start_preview()
camera.brightness = 70
sleep(5)
camera.capture('/home/pi/Desktop/bright.jpg')
camera.stop_preview()

Спробуйте налаштувати яскравість в циклі, і зробити анотацію на зображенні поточним рівнем яскравості:

camera.start_preview()
for i in range(100):
    camera.annotate_text = "Brightness: %s" % i
    camera.brightness = i
    sleep(0.1)
camera.stop_preview()
Подібним чином, спробуйте те ж саме для контрасту:
camera.start_preview()
for i in range(100):
    camera.annotate_text = "Contrast: %s" % i
    camera.contrast = i
    sleep(0.1)
camera.stop_preview()

Розмір тексту анотації можете встановити з наступним кодом:

camera.annotate_text_size = 50

Допустимі розміри від 6 до 160. Значення за замовчуванням 32.
Також можете змінити колір анотацій. Перш за все, переконайтеся, що Color імпортований шляхом внесення змін до вашого рядка import у верхній частині коду:

from picamera import PiCamera, Color
Потім змініть решту частину коду таким чином:
camera.start_preview()
camera.annotate_background = Color('blue')
camera.annotate_foreground = Color('yellow')
camera.annotate_text = " Hello world "
sleep(5)
camera.stop_preview()

Можете використовувати camera.image_effect для застосування певного ефекту для зображення. Існують варіанти: none, negative, solarize, sketch, denoise, emboss, oilpaint, hatch, gpen, pastel, watercolor, film, blur, saturation, colorswap, washedout, posterise, colorpoint, colorbalance, cartoon, deinterlace1 і deinterlace2. За замовчуванням none. Виберіть один з ефектів і спробуйте його, наприклад:

camera.start_preview()
camera.image_effect = 'colorswap'
sleep(5)
camera.capture('/home/pi/Desktop/colorswap.jpg')
camera.stop_preview()

Спробуйте зробити цикл зміни різні ефектів для зображення в попередньому перегляді, щоб перевірити їх:

camera.start_preview()
for effect in camera.IMAGE_EFFECTS:
    camera.image_effect = effect
    camera.annotate_text = "Effect: %s" % effect
    sleep(5)
camera.stop_preview()

Можете використати camera.awb_mode, щоб встановити автоматичний баланс білого для заданого режиму роботи, щоб застосувати певний ефект. Передбачені наступні опції: off, auto, sunlight, cloudy, shade, tungsten, fluorescent, incandescent, flash і horizon. За замовчуванням auto. Виберіть одну з опцій і спробуйте її:

camera.start_preview()
camera.awb_mode = 'sunlight'
sleep(5)
camera.capture('/home/pi/Desktop/sunlight.jpg')
camera.stop_preview()

Можете створити цикл для доступних авто-режимів балансу білого з camera.AWB_MODES.
Можете використати camera.exposure_mode для установки експозиції для заданого режиму роботи, щоб застосувати певний ефект. Передбачені наступні опції: off, auto, night, nightpreview, backlight, spotlight, sports, snow, beach, verylong, fixedfps, antishake і fireworks. За замовчуванням auto. Виберіть одну з опцій і спробуйте її:

camera.start_preview()
camera.exposure_mode = 'beach'
sleep(5)
camera.capture('/home/pi/Desktop/beach.jpg')
camera.stop_preview()

Ви можете циклічно перебрати доступні режими експозиції з camera.EXPOSURE_MODES.

Сповільнена кінозйомка

Популярність сповільненої кінозйомки зросла в останні кілька років з «вибухом» камер смартфонів, дозволяючи робити майже всім те, що було колись доступне лише для спеціалізованих фотографів.
Недолік використання смартфона для такого роду фотографії очевидна; це займає багато часу, і забирає ресурс, який вам може знадобитися для іншого, ну, і набір та прийом телефонних дзвінків. Raspberry Pi з підключеною до нього камерою є хорошою альтернативою, а з акумулятором може виявитися таким самим портативним і універсальний як додатки Android або iPhone, і це має більше сенсу, ніж просто використовувати RPi як цифрову дзеркальну фотокамеру для покадрових фото.
Перед тим, як почати роботу, встановіть ffmpeg:

sudo apt-get install ffmpeg

Потім використайте наведений нижче сценарій на Python, щоб захопити зображення через проміжки часу:

import time
import picamera
 
VIDEO_DAYS = 1
FRAMES_PER_HOUR = 60
FRAMES = FRAMES_PER_HOUR * 24 * VIDEO_DAYS
 
def capture_frame(frame):
    with picamera.PiCamera() as cam:
        time.sleep(2)
        cam.capture('/home/pi/Desktop/frame%03d.jpg' % frame)
 
# Capture the images
for frame in range(FRAMES):
    # Note the time before the capture
    start = time.time()
    capture_frame(frame)
    # Wait for the next capture. Note that we take into
    # account the length of time it took to capture the
    # image when calculating the delay
    time.sleep(
        int(60 * 60 / FRAMES_PER_HOUR) - (time.time() - start)
)

Можете створити колекцію зображень, записаних через проміжки часу 60 хв., за допомогою наведеного сценарію. Для перегляду зображень у вигляді фільму формату mp4, компілюйте зображення за допомоги команди:

ffmpeg -y -f image2 -i /home/pi/Desktop/frame%03d.jpg -r 24 -vcodec libx264 -profile high -preset slow /home/pi/Desktop/timelapse.mp4

Тепер зможете переглянути створене відео на своєму RPi через команду в терміналі:

omxplayer timelapse.mp4

Відео буде програватися на весь екран. Воно може виглядати подібно до цього…

(За матеріалами: raspberrypi.org)

Новини

  • Модуль SMARC запускає Android або Linux на Snapdragon 820
    Модуль SMARC запускає Android або Linux на Snapdragon 820

    SMART 2.0 "Snapdragon 820 SOM" iWave має 3 Гб LPDDR4, 32 Гб eMMC, Wi-Fi та Bluetooth, а також вхідні/вихідні виводи, включаючи GbE, HDMI 2.0, MIPI-CSI, USB 3.0 та PCIe. Комп'ютер розміром 82x50 мм працює на ОС Android Snailbone або вище, з наступною підтримкою Linux. Snapdragon 820 об'єднує чотири 14-нм Cortex з технологією FinFET - два на частоті 2,15 ГГц, а два з 1,6 ГГц, які намагаються імітувати високоякісні Cortex-A72. Крім того, SoC оснащений 624 МГц Adreno 530 GPU, Hexagon 680 DSP і 14-розрядним ISP для Spectra. Snapdragon 820 SOM підтримує кодування H.265 4K@60 та кодування 4K@30.

    in Новини

Записатися на курс