teriyaki note

好きなものはラーメンと将棋

Raspberry Pi Camera Module V2 の使い方 (Python 3)

Raspberry pi 公式が販売しているカメラモジュール Camera Module V2 を使ってみたメモ

https://www.raspberrypi.org/products/camera-module-v2/

参考にしたもの

公式の情報

Getting started with the Camera Module - Introduction | Raspberry Pi Projects

先人の情報

PythonでRaspberry Pi カメラを制御する
【Raspberry Pi】Camera Module V2を接続する

環境

モジュールの準備

何はともあれ、Raspberry Pi 3 と カメラモジュールを接続します

こちらが詳しいです。向きなどに注意しましょう

studio.beatnix.co.jp

次に、raspi-config > 5. Iterfacing Options > P1. Cameraからカメラを有効にしましょう

Pythonからの操作方法

picameraパッケージのインストール

% pip install --upgrade pip
% pip install picamera

写真を撮影する

from picamera import PiCamera
from time import sleep

camera = PiCamera()
camera.resolution = (800, 600)

camera.start_preview()
sleep(2)
camera.capture("./image.jpg")
camera.stop_preview()
  • camera.resolution(width, height)で撮影する写真のサイズを指定
  • camera.start_preview()でカメラを起動(ラズパイがディスプレイに接続されていると確認できる)
  • cmera.capture([保存したい場所]) で写真を撮影できる
  • camera.stop_preview()でカメラを終了する

基本的な使い方はこれだけ。

こんな感じで撮影できましたか?

f:id:teriyaki398:20181014193545j:plain:w300

動画の録画

動画も撮影できます。

from picamera import PiCamera
from time import sleep

camera = PiCamera()
camera.resolution = (800,600)

camera.start_preview()

camera.start_recording("./movie.h264")
sleep(10)
camera.stop_recording()

camera.stop_preview()

動画も写真とほぼ同様の手順で録画できます。異なるのは、

  • camera.start_recording([保存する場所]) で録画開始
  • sleep([秒数]) で何秒間録画するかを指定
  • camera.stop_recording()で録画停止

の部分だけ。

エフェクト

なぜか多種類のエフェクトが用意されています。ぜひ活用してみましょう。

使用できるエフェクトは以下の通りです。

>>> camera.IMAGE_EFFECTS
{'none': 0, 'negative': 1, 'solarize': 2, 'sketch': 6, 'denoise': 7, 'emboss': 8, 'oilpaint': 9, 'hatch': 10, 'gpen': 11, 'pastel': 12, 'watercolor': 13, 'film': 14, 'blur': 15, 'saturation': 16, 'colorswap': 17, 'washedout': 18, 'posterise': 19, 'colorpoint': 20, 'colorbalance': 21, 'cartoon': 22, 'deinterlace1': 23, 'deinterlace2': 24}

使用する場合は次のように指定します。

camera.image_effect = "[エフェクト名]"

具体例

f:id:teriyaki398:20181014231423j:plain:w300 f:id:teriyaki398:20181014200113j:plain:w300 f:id:teriyaki398:20181014200131j:plain:w300 f:id:teriyaki398:20181014200122j:plain:w300

テキストを挿入する

以下のようにすることで、写真や動画にテキストを表示できます。

camera.annotate_text_size = [フォントサイズ]
camera.annotate_text = [表示したいテキスト]

注意すること

サイズの限度

写真の場合は2592 x 1944で、動画の場合は1920 x 1080までです。

また、最大解像度での撮影を行う際は、

camera.framerate = 15

でフレームレートを15に設定する必要があります。

ファイルフォーマット

写真のフォーマットを変更することもできます。

変更したいときは以下のように指定する。

camera.capture("[ファイルパス]", format="[フォーマット名]")

利用できるフォーマットは以下の通り。

jpeg, png, gif, bmp, yuv, rgb (24-bit RGB), rgba (32-bit RGBA), bgr (24-bit BGR), bgra (32-bit BGRA), raw

動画も同様にフォーマットを変更できます。

camera.start_recording("[ファイルパス]",format="[フォーマット名]")

利用できるフォーマットは以下の通り

h264, mjpeg, yuv (YUV420), rgb (24-bit RGB), rgba (32-bit RGBA), bgr (24-bit BGR), bgra (32-bit BGRA)

カメラを起動してからの待ち時間

公式には、カメラを起動してから最低2秒間は明るさの調整のために待てと書いてあります

試しに0秒から1秒おきに撮影してみました。

0秒時点
f:id:teriyaki398:20181014193538j:plain:w300

1秒時点
f:id:teriyaki398:20181014193541j:plain:w300

2秒時点
f:id:teriyaki398:20181014193545j:plain:w300

確かに0秒時点での写真は全体的に暗く青みがかって見えます。1秒時点と2秒時点の画像もよーく見ると違いますが、そこまで大きな違いは無さそうです。

この辺りは目的に合わせて調整しよう。

画像が180度回転していたら

今回の環境では問題なかったが、上下逆さに撮影されてしまう場合は以下のように指定することで画像を回転できます

camera.rotation = 180

とりあえず主要な機能はこんなところでしょう

詳しい内容は以下で確認できます

10. API - picamera.camera Module — Picamera 1.10 documentation