Raspberry Piでカメラモジュールの使い方【コマ抜き撮影】

Raspberry Piでカメラモジュールの使い方【コマ抜き撮影】
Raspberry Piでカメラモジュールの使い方【コマ抜き撮影】

Raspberry Pi(以下ラズパイ)でカメラモジュールをつかう方法を解説します。Raspberry Piでカメラを認識させるための設定方法は簡単です。またここでは、一定間隔で写真撮影するコマ抜き撮影(タイムラプス)の方法もご紹介いたします。

Raspberry Piの設定は、MacからSSHでログインしてCUIでの遠隔操作で行います。

▼ Raspberry Piの初期設定はこちらの記事を参考に済ませてください。

つかうもの

はじめに、この記事でつかうものをご紹介いたします。

ラズパイ

Raspberry Piは、Raspberry Pi 3B+を使用しましたが、お好きなRaspberry Piで構いません。

カメラモジュール

こちらのカメラモジュールを使用しました。 OV5647 カメラモジュール は、Raspberry Piの基板にあるカメラ端子へ直接つなぐことができます。1000円程度のお値段ですので、お試しにはちょうど良いカメラです。

ズーム機能付だったり、赤外線で夜間も撮影できる高機能なカメラモジュールもあります。

ヒートシンク

動画など重い処理をRaspberry Piで行う場合、CPUが発熱して本体が壊れてしまう可能性があります。必ずヒートシンクや放熱性のあるケースに入れて熱対策をしましょう(私は放熱対策せず、過去にRaspberry Piを壊してしまったことがありますのでご注意ください)。

Raspberry Piでカメラモジュールの設定

それではRaspberry Piでカメラモジュールを使えるように設定していきましょう。

▼ USBカメラの扱いについてはこちら。

rootログインを設定しておく

Raspberry Piでカメラを認識させる上で、ターミナル操作でroot権限になる必要があります。初期状態のRaspberry Piでは、rootにパスワードが設定されていないため、次のコマンドでrootユーザーにパスワード設定をします。

shell
$ sudo passwd root

パスワード設定を解除する場合は次の通りです。

shell
$ sudo passwd -l root

カメラを認識させる

Raspberry Piにカメラモジュールを接続して、次の作業を行なってください。

shell
$ sudo raspi-config

表示されたダイアログの 5 Interfacing OptionsP1 Camera へと進み Yes を選択してカメラを有効にします。Raspberry Piを再起動してください。

次のコマンドを実行して supported=1 detected=1 と表示されれば、カメラモジュールが正常に認識できてることになります。

shell
$ vcgencmd get_camera

これで準備が整いました。次からは実際にカメラで撮影してみましょう。

ラズパイカメラで写真の撮影

写真撮影は標準でインストールされている raspistill コマンドを使って簡単にできます。たとえば次のコマンドを実行してみましょう。

shell
$ raspistill -o photo.jpg

photo.jpgの名前で画像ファイルが保存されましたね。カメラの映像が写真に写っているはずです。

Raspberry Piのカメラで撮影する場合、いつ撮影した写真なのかをファイル名に残せたら便利ですね。そこでRaspberry Piの時刻を設定します。

Raspberry Piで時刻の自動設定

実は、Raspberry Piにはハードウェア時計(RTC)が備わっていないため、時刻を手動で合わせても再起動するたびに時間がズレてしまうなんてことがあります。ですからRaspberry Piの起動時にネット接続して、自動で時刻を合わせられるようにしておきましょう。

設定ファイルをVimで開きます。

shell
$ sudo vi /etc/rc.local
exit 0 より前の行に timedatectl set-timezone Asia/Tokyo の一行を追記して、Raspberry Piを再起動します。これで時刻の自動設定は完了です。現在の時間が正しいか確認します。
shell
$ date
Tue Aug  4 09:12:40 JST 2020`

ファイル名に日付を追加

ファイル名に日付を入れる方法です。次のようにインラインでシェルの実行結果を返すようにすると、20200804_092756.jpg のような日付入りファイル名で写真を保存できます。

shell
$ raspistill -o `date "+%Y%m%d_%H%M%S"`.jpg

ファイルサイズ(画質)の変更

raspistill のデフォルトでは、ファイルサイズが数MBもあり大きすます。画像サイズ指定して保存するには次のようにコマンドを実行します。
shell
$ raspistill -w 480 -h 360 -o `date "+%Y%m%d_%H%M%S"`.jpg

2.4MBもあった写真が119kBまで圧縮できました。

raspistill にはたくさんのオブション機能があるので、ヘルプを表示して確認しておきましょう。
shell
$ raspistill --help

写真撮影してプレビューする

ところでRaspberry Piにモニターをつけてない場合、写真を確認する方法としてscp コマンドを使いました。たとえば次のコマンドは、Raspberry Piにあるファイルを、カレントディレクトリへダウンロードします。

shell
$ scp pi@0.local:~/photo.jpg .

写真確認の一連の動作を、シェルスクリプトにしてしまうともっとラクです。たとえば次のような感じです。

bash
#!/bin/bash

HOST='pi@0.local'
DIR='photo'
FILE=`date "+%Y%m%d_%H%M%S"`.jpg

ssh ${HOST} "raspistill  -w 960 -h 720 -co 20 -awb shade -ex auto -o ${DIR}/${FILE} ; exit"
scp ${HOST}:${DIR}/${FILE} ${DIR}/
ssh ${HOST} "rm -f ${DIR}/${FILE}"
open ${DIR}/${FILE}

VS Codeを使っている方ならリモートSSHが便利です。

コマ抜き撮影の方法

ここではコマ抜き撮影(タイムラプス)をやってみます。raspistill コマンドでは、すでにタイムラプスのオプションが装備されているのでそれを使います。次はコマ抜き撮影の例です:

shell
$ raspistill -t 30000 -tl 2000 -o photo/image%04d.jpg

オプション -t で全体の時間制限(ms)を、オプション -tl で撮影する間隔(ms)を指定します。つまり上のコマンドは、2秒おきに30秒間、写真撮影する意味になります。

photoディレクトリに、連番で写真が保存されてます。これでコマ抜き撮影ができました。

もちろん24時間の長時間撮影もディスク容量が許す限り可能です。

shell
$ raspistill -t 86400000 -tl 30000 -w 960 -h 720 -co 20 -awb shade -ex auto -o tomato/image%04d.jpg

このコマンドは、30秒おきに1日(24時間は、86400 x 1000 ms)撮影する命令になります。色合の調整などのオプションも足してます。

ただし、長時間のコマ抜き撮影の場合、SSHをログアウトしてしまう場合もあるでしょう。ログアウトしたと同時に、実行したシェルコマンド(プロセス)も停止してしまうはずです。

SSHをログアウトしてもプログラムを継続するには?

そこで、SSHをログアウトしてもプログラムを継続するには nohup コマンドを使います。たとえば、次のとおりです。

shell
$ nohup raspistill -t 86400000 -tl 30000 -w 960 -h 720 -co 20 -awb shade -ex auto -o tomato/image%04d.jpg > tomato/out.log &
nohup を使えば、SSHをログアウトしてもプロセスは継続します。プロセスが動いているかどうかは $ ps x で確認できます。また、コマンドの最後の & はバックグラウンドで実行することを意味します。nohup で実行中のシェルを止めたい時は、 $ ps x でプロセスIDを調べてその番号を kill します。
shell
$ ps x
  PID TTY      STAT   TIME COMMAND
 1202 ?        Ss     0:00 /lib/systemd/systemd --user
 1205 ?        S      0:00 (sd-pam)
 1418 ?        Sl     0:00 raspistill -t 86400000 -tl 30000 -w 960 -h 720 -co 20
 1464 ?        S      0:00 sshd: pi@pts/0
 1467 pts/0    Ss     0:00 -bash
 1479 pts/0    R+     0:00 ps x

$ kill 1418

コマ抜き写真をつなげて動画にする

コマ抜き写真をつなげて動画にしてみましょう。写真をつなげて動画にするには avconv を使うと便利です。avconv をインストールします。

shell
$ sudo apt install libav-tools

インストールに失敗するようでしたら $ sudo apt update を一度実行してから再度試してください。

次は、複数の写真をつなげて動画を作成する例です:

shell
$ avconv -r 30 -i tomato/image%04d.jpg -vcodec libx264 -vf scale=960:720 tomato/timelapse.mp4

実際にベランダで定点観測して、コマ抜き動画を作ってみました。1000円のカメラモジュールなので画質は期待できませんでしたが、思ったより簡単にRaspberry Piでカメラを扱うことができてよかったです。

Raspberry Piで空の定点観測
Raspberry Piで空の定点観測

▼ 動画をGIFアニメにする方法はこちら。

▼ 他にも映像関係の記事を書いてます。

関連記事

 
最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

スマート農業(スマートアグリ)で使えるセンサー
水耕栽培はじめよう!
関連記事