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

 

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

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

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

▼ ラズパイの初期設定はこちらの記事を参考に済ませておいてください。

つかうもの

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

ラズパイ

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

カメラモジュール

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

ケースに入った製品の方が使い勝手は良いかもしれません。こちらもご参考ください。

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

ヒートシンク

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

▼ 3Dプリンターをお持ちなら、ケースを自作するのも良いでしょう。

ラズパイでカメラモジュールの設定

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

USBカメラの扱いについては、こちらの記事に少し書いてますのでご参考ください。

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

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

$ sudo passwd root

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

$ sudo passwd -l root

カメラを認識させる

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

$ sudo raspi-config

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

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

$ vcgencmd get_camera

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

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

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

$ raspistill -o photo.jpg

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

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

ラズパイで時刻の自動設定

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

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

$ sudo vi /etc/rc.local

exit 0 より前の行に timedatectl set-timezone Asia/Tokyo の一行を追記して、ラズパイを再起動します。これで時刻の自動設定は完了です。現在の時間が正しいか確認しておきます。

$ date
Tue Aug  4 09:12:40 JST 2020`

ファイル名に日付を追加

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

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

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

raspistill のデフォルトでは、ファイルサイズが数MBもあり大きすます。画像サイズ指定して保存するには次のようにコマンドを実行します。

$ raspistill -w 480 -h 360 -o `date "+%Y%m%d_%H%M%S"`.jpg

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

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

$ raspistill --help

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

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

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

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

#!/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 コマンドでは、すでにタイムラプスのオプションが装備されているのでそれを使います。次はコマ抜き撮影の例です:

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

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

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

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

$ 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 コマンドを使います。たとえば、次のとおりです。

$ 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 します。

$ 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 をインストールします。

$ sudo apt install libav-tools

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

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

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

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

ラズパイで空の定点観測
ラズパイで空の定点観測

▼ 動画をGIFアニメにする方法はこちらをご参考ください。

▼ 他にも映像関係の記事を書いてますので、ご参考になさってみてください。

記事に関するご質問などがあれば、お問い合わせ までご連絡ください。
この記事で紹介した商品
Pandasで画像・動画処理をはじめよう!
Python学習にオススメの本をご紹介!
関連記事