ラズパイで定点観測

ラズパイとカメラモジュールを使って定点観測する方法

この記事ではRaspberry Pi(ラズパイ)でカメラモジュールを使えるようにする設定と、そのカメラを使って一定時間置きに写真撮影をし、それを動画にするまでの方法を説明していく。

定点カメラの機能はスマホにも付いていて、iPhoneでは「タイムラプス」、Androidでは「コマ抜き」の低速度撮影の機能にあたる。今回使用したラズパイは Raspberry Pi3 Model B+ となる。操作はMacのターミナルからSSHでログインして行った。

ラズパイの初期設定はこちらの記事を参考に

Raspberry Piでカメラモジュールを使えるようにする設定

まずは、Raspberry Piでカメラモジュールを使えるようにしていこう。今回使用するカメラモジュールはこちらの OV5647 カメラモジュール である。わずか1000円以下で買うことができた。

HiLetgo OV5647 5MP Raspberry Pi 3 カメラ OV5647 HDカメラモジュール Raspberry Pi に対応 A/B+/2 モデルB ケーブル
HiLetgo OV5647 5MP Raspberry Pi 3 カメラ OV5647 HDカメラモジュール Raspberry Pi に対応 A/B+/2 モデルB ケーブル

OV5647 Camera Module センサータイプ:OV5647色CMOS QSXGA(5メガピクセル) センサーサイズ:3.67*2.74mm(1/4インチフォーマット) ピクセル計算:2592*1944, ピクセルサイズ:1.4*1.4μm

Amazon

用途によってはケースに入った製品の方が使い勝手がよいかもしれない。

For raspberry pi カメラモジュール 5MP Raspberry Pi 4 model b /3 b+ / Pi Zero Camera とケース500W画素 感光チップOV5647センサー
For raspberry pi カメラモジュール 5MP Raspberry Pi 4 model b /3 b+ / Pi Zero Camera とケース500W画素 感光チップOV5647センサー

[Raspberry Pi 4 model b, 3 Model b+, Pi 3b, Pi Zero, Pi Zero Wireless]に適用 固定焦点レンズにOV5647ウェブカメラセンサーを搭載した5メガピクセルセンサー このカメラは、2592 x 1944ピクセルの静止画像に対応しており、1080 p / 30 fps、720 p / 60 fps、および640 x 480 p 60/90のビデオ録画もサポートしています

Amazon

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

Kuman カメラモジュール Raspberry Pi用 日中/夜間モード ズームレンズ 5MP 1080p 感光チップOV5647 Raspberry Pi 4B Model B/B+ A+ RPi 3/2/1に交換 ラズベリーパイSC25
Kuman カメラモジュール Raspberry Pi用 日中/夜間モード ズームレンズ 5MP 1080p 感光チップOV5647 Raspberry Pi 4B Model B/B+ A+ RPi 3/2/1に交換 ラズベリーパイSC25

IR-CUTカメラ:内蔵のIR-CUTカメラは、日中/夜間モードを自動的に切り替えて、画像を鮮明にします。初心者の方が使いやすいです。

AmazonRakuten
Kuman カメラモジュール Raspberry Pi用 夜間 赤外線可視 ラズベリーパイ 500W画素 Pi 4B 3 2 SC15
Kuman カメラモジュール Raspberry Pi用 夜間 赤外線可視 ラズベリーパイ 500W画素 Pi 4B 3 2 SC15

5メガピクセルOV5647センサー、2つの赤外線LEDとフラッシュフィルにサポート。 ラズベリーパイ夜間視力カメラ、すべて改訂パイをサポート。カメラは2592×1944ピクセル静的イメージが可能また1080p 30fps、720p 60fpsと640*480p 60/90ビデオ記録をサポート

AmazonRakuten

動画など重い処理をラズパイで行う場合、CPUが発熱して本体が壊れる恐れがある。ヒートシンクや放熱性のあるケースに入れて必ず熱対策をしよう。

過去にラズパイを壊してしまったことがある。

Geekworm Raspberry Pi(ラズベリーパイ) 4 B 用アーマー金属ケース パッシブ冷却/シェル熱放散 ラズベリーパイ4 コンピュ ータモデルB適用 (アーマーケース(ファン無し))
Geekworm Raspberry Pi(ラズベリーパイ) 4 B 用アーマー金属ケース パッシブ冷却/シェル熱放散 ラズベリーパイ4 コンピュ ータモデルB適用 (アーマーケース(ファン無し))

Amazon
最新 Raspberry Pi 4 ケース, 超薄型アルミニウム合金ケース+ヒートシンク+ 35x35x10 冷却大超静音ファン Raspberry Pi4 Model B 8gb /4gb / 2gb / 1gb (ラズベリーパイ4モデルB) 対応 (ラズパイ4本体含みません)
最新 Raspberry Pi 4 ケース, 超薄型アルミニウム合金ケース+ヒートシンク+ 35x35x10 冷却大超静音ファン Raspberry Pi4 Model B 8gb /4gb / 2gb / 1gb (ラズベリーパイ4モデルB) 対応 (ラズパイ4本体含みません)

Amazon

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

カメラを設定する上で、Raspberry Piのrootになる必要がるので先に設定しておこう。初期状態のRaspberry Piはrootにパスワードが設定されていないため、デフォルトではrootにログインできないのだ。次のコマンドでrootユーザーにパスワードを設定しておく。

$ sudo passwd root

パスワード設定を解除したかったら、次のコマンドで戻すことができる。

$ sudo passwd -l root

カメラを認識させる

それではいよいよカメラをRaspberry Piに認識させてみよう。Raspberry Piにカメラモジュールを接続したら次の手順で設定を行っていく。

$ sudo raspi-config5 Interfacing OptionsP1 Camera へと進み Yes を選択してカメラを有効にする。再起動後、$ vcgencmd get_camerasupported=1 detected=1 と表示されればカメラモジュールは認識されている。

カメラで画像を撮影してみる

カメラモジュールをRaspberry Piに認識させることができたら、実際に画像を撮影してみよう。撮影を可能にするプログラムは、OS(Raspbian)にすでに標準でインストールされている。raspistillコマンドを使って撮影できるようになっているはずだ。たとえば次のコマンドを実行してみよう。

$ raspistill -o photo.jpg

photo.jpgの名前で画像ファイルが保存され、カメラに写っている景色が撮れたと思う。ところでRaspberry Piにモニターをつけてない場合がある。その場合は、たとえばMacのターミナルから scp コマンドを使って、Raspberry Piにある画像ファイルをダウンロードして確認しよう。

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

画像ファイルに日付を追加する方法

Raspberry Piのカメラで撮影する場合、いつ撮影した写真なのかをファイル名に残せたら便利だ。そこでRaspberry Piの時刻を自動で合わせられるようにしていこう。

Raspberry Piの時刻設定

時刻を手動で合わせてもRaspberry Piにはハードウェア時計が装備されていないため、いくら設定しても再起動するたびに時間はズレてしまう。だからRaspberry Piの起動時にネット接続して、自動で時刻を合わせられるようにしておく。

$ sudo vi /etc/rc.localexit 0 より前の行に timedatectl set-timezone Asia/Tokyo の一行を追記し、Raspberry Piを再起動する。これで時刻を自動で合わせてくれるようになった。次のようにして、時間が正しいか確認しよう。

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

ファイル名に日付を追加

Raspberry Piに時刻の設定ができたところで、ファイル名に日付を入れる方法を紹介する。次のコマンドを実行すると、20200804_092756.jpg のように日付入りでファイルを保存できる。

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

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

raspistill で撮影した写真は、デフォルトではファイルサイズが数MBあり大きすぎる。画像サイズを小さくすることでファイルサイズを抑えることができる。2.4MBもあった写真が119kBまで圧縮できた。

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

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

写真撮影のたび、毎回Raspberry Piにsshでログインして撮影し、scpでファイルをダウンロードして確認するのはあまりに面倒。そこでMac側の操作一発で写真撮影から写真表示までできるシェルスクリプトを書いてみたので参考に。

#!/bin/bash
# Created by Toshihiko Arai.
# https://101010.fun/iot/raspberry-pi-camera.html

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}

さらにディレクトリも自動生成できると便利だが、それは皆さんに任せよう。

Raspberry Piでコマ撮り撮影する

写真の撮影に慣れたところで、いよいよコマ撮り撮影、タイムラプスをやってみよう。ありがたいことに raspistill コマンドにはすでにタイムラプスのオプションが装備されているので、それでコマ撮り撮影が可能だ。次のようにしてコマ撮り撮影する。

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

上のコマンドの意味は、2秒おきに30秒間だけ写真を撮る命令である。-t-tl にはミリ秒で指定してあげる。ちなみに1時間は3600秒、24時間だと86400秒。秒をミリ秒に変換したい場合は1000をかければ良い。

SSHがログアウトしてもプログラムを継続実行させる

さて、長時間のコマ撮り撮影の場合、Raspberry PiとのSSH接続からログアウトしてしまう可能性があるだろう。通常SSHでログインしてシェルを実行すると、ログアウトした時にそのシェルは停止してしまうのだ。

そこで、nohupコマンドを使うことで、ログアウトしてもシェルを実行し続けるようにする。nohup もまたOSに標準で実装されているのでインストールの必要はないはずだ。次の形で実行する。

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

上のシェルは、30秒おきに1日撮影する設定で、色合の調整などのオプションも足している。コマンドの最後の & はバックグラウンドで実行することを意味する。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 が便利だ。avconvは標準ではインストールされていないので、次のようにしてインストールしておこう。もしインストールに失敗するようだったら$ sudo apt updateを一度実行してから再度試すとうまくいくかもしれない。

$ sudo apt install libav-tools

次のコマンドのようにして、撮影した写真をつなげて動画の作成ができる。

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

Raspberry Piで定点観測してみた

Raspberry Piで定点観測中
Raspberry Piで定点観測中

いざ定点観測しようと思ったが、カメラの位置調整で日が暮れそうな時間までかかってしまった。カメラを使う場合は、Raspberry Piにモニターがないと不便かもしれない。

さて、こちらが実際にベランダで定点観測してみた画像だ。このカメラモジュールどうもフィルムカメラっぽい色合いになる。映像に面白みはないかもしれないが、とりあえずタムラプス動画には成功した。

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

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

この記事で扱った関連製品はこちら

HiLetgo OV5647 5MP Raspberry Pi 3 カメラ OV5647 HDカメラモジュール Raspberry Pi に対応 A/B+/2 モデルB ケーブル
HiLetgo OV5647 5MP Raspberry Pi 3 カメラ OV5647 HDカメラモジュール Raspberry Pi に対応 A/B+/2 モデルB ケーブル

OV5647 Camera Module センサータイプ:OV5647色CMOS QSXGA(5メガピクセル) センサーサイズ:3.67*2.74mm(1/4インチフォーマット) ピクセル計算:2592*1944, ピクセルサイズ:1.4*1.4μm

Amazon
For raspberry pi カメラモジュール 5MP Raspberry Pi 4 model b /3 b+ / Pi Zero Camera とケース500W画素 感光チップOV5647センサー
For raspberry pi カメラモジュール 5MP Raspberry Pi 4 model b /3 b+ / Pi Zero Camera とケース500W画素 感光チップOV5647センサー

[Raspberry Pi 4 model b, 3 Model b+, Pi 3b, Pi Zero, Pi Zero Wireless]に適用 固定焦点レンズにOV5647ウェブカメラセンサーを搭載した5メガピクセルセンサー このカメラは、2592 x 1944ピクセルの静止画像に対応しており、1080 p / 30 fps、720 p / 60 fps、および640 x 480 p 60/90のビデオ録画もサポートしています

Amazon
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス
Raspberry Pi Zero W - ヘッダー ハンダ付け済み - ラズベリー・パイ ゼロ W ワイヤレス

AmazonRakuten
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入
正規代理店商品 Raspberry Pi 4 Model B (8GB) made in UK element14製 技適マーク入

AmazonRakuten

こんな商品も人気です!

10 インチRaspberry Pi用タッチモニター EleDuino HDMI モバイルディスプレイ 2021最新版 ゲームモニターIPS液晶パネル 1366x768薄い 軽量、自立,USB Type-C標準 HDMI/スピーカー搭載
10 インチRaspberry Pi用タッチモニター EleDuino HDMI モバイルディスプレイ 2021最新版 ゲームモニターIPS液晶パネル 1366x768薄い 軽量、自立,USB Type-C標準 HDMI/スピーカー搭載

Amazon
Raspberry Pi4 Model B DIYメタルケース/ラズベリーパイ4 モデルB ケース/アルミニウム金属ケース/ファンレス/放熱シート付き/ブラック
Raspberry Pi4 Model B DIYメタルケース/ラズベリーパイ4 モデルB ケース/アルミニウム金属ケース/ファンレス/放熱シート付き/ブラック

ラズベリーパイ4用メタルケース スタイリッシュで堅牢なメタルボディ ケーズ全体がヒートシンクの高い放熱性能 アルミ製のファンレスケーズボディー シンプルでコンパクトなモノクローム

AmazonRakuten
Miuzei 最新Raspberry Pi 4 ケース ラスベリー パイ 4 ケース+ 5V 3A 電源Micro USB-C アダプター 冷却ファン+ヒートシンク Raspberry Pi 4 Model B対応
Miuzei 最新Raspberry Pi 4 ケース ラスベリー パイ 4 ケース+ 5V 3A 電源Micro USB-C アダプター 冷却ファン+ヒートシンク Raspberry Pi 4 Model B対応

AmazonRakuten
Freenove Raspberry Pi 4 B 3 B+ 400用の究極のスターターキット、434ページの詳細なチュートリアル、Python C Javaコード、223アイテム、57プロジェクト、無はんだブレッドボード
Freenove Raspberry Pi 4 B 3 B+ 400用の究極のスターターキット、434ページの詳細なチュートリアル、Python C Javaコード、223アイテム、57プロジェクト、無はんだブレッドボード

Amazon

Raspberry Piの参考書

Raspberry Piクックブック 第3版 (Make:PROJECTS)
Raspberry Piクックブック 第3版 (Make:PROJECTS)

本書は、登場以来多くのユーザーの支持を集め続けているマイコンボード「Raspberry Pi」を使いこなすための267本のレシピ集です。 ハードウェアの基本、オペレーティングシステムの使い方、ネットワーク接続、Pythonプログラミングの基本から、高度なPythonプログラミング、GPIO(汎用入出力)、モーター、センサー、ディスプレイ、コンピュータービジョン、Arduinoとの連携まで、幅広いニーズに応えます。

AmazonRakuten
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応
写真や図解でよくわかる ラズパイZeroを使い倒す本 Raspberry Pi Zero/Zero W対応

本書ではRaspberry Pi Zero / Zero Wの概要から必要な周辺機器の説明、OSの導入やセットアップなどといった準備、そしてLinuxに初めて触れる人に向けてLinuxの基礎やシェルの操作などを解説しています。また、準備が整ったら実際に電子部品をRaspberry Pi Zero / Zero Wで制御する方法も解説しました。

KindleAmazonRakuten
Raspberry Pi ZeroによるIoT入門- Zero W 対応
Raspberry Pi ZeroによるIoT入門- Zero W 対応

本書は、大人から子供まで、初心者の方でも、ラズパイZeroとラズパイZero WをIoTのデバイスとして使いこなせるようになることを目的とした入門書です。また、ラズパイZeroとラズパイZero WをUSBケーブル1本でパソコンに接続できる便利な「Zero over USB」について、日本で初めて詳しく解説しました。

AmazonRakuten

raspistillのオプション

最後に、raspistill には記事では紹介できなかった機能がたくさんあるので、ヘルプを表示して確認しておくと良いだろう。

$ raspistill --help

parameter mean
-w Set image width <size>
-h Set image height <size>
-q Set jpeg quality 0 to <100>
-r Add raw bayer data to jpeg metadata
-o Output filename <filename> (to write to stdout, use '-o -'). If not specified, no file is saved
-l Link latest complete image to filename <filename>
-v Output verbose information during run
-t Time (in ms) before takes picture and shuts down (if not specified, set to 5s)
-th Set thumbnail parameters (x:y:quality) or none
-d Run a demo mode (cycle through range of camera options, no capture)
-e Encoding to use for output file (jpg, bmp, gif, png)
-x EXIF tag to apply to captures (format as 'key=value') or none
-tl Timelapse mode. Takes a picture every ms. %d == frame number (Try: -o img_%04d.jpg)
-fp Run the preview using the still capture resolution (may reduce preview fps)
-k Wait between captures for a ENTER, X then ENTER to exit
-s Wait between captures for a SIGUSR1 or SIGUSR2 from another process
-g Draw preview to texture instead of using video render component
-gc Capture the GL frame-buffer instead of the camera image
-set Retrieve camera settings and write to stdout
-cs Select camera . Default 0
-bm Enable 'burst capture mode'
-md Force sensor mode. 0=auto. See docs for other modes available
-dt Replace output pattern (%d) with DateTime (MonthDayHourMinSec)
-ts Replace output pattern (%d) with unix timestamp (seconds since 1970)
-fs Starting frame number in output pattern(%d)
-rs JPEG Restart interval (default of 0 for none)
-gps Apply real-time GPS information from gpsd as EXIF tags (requires libgps.so.22)
-sh Set image sharpness (-100 to 100)
-co Set image contrast (-100 to 100)
-br Set image brightness (0 to 100)
-sa Set image saturation (-100 to 100)
-ISO Set capture ISO
-vs Turn on video stabilisation
-ev Set EV compensation - steps of 1/6 stop
-ex Set exposure mode (see Notes)
-fli Set flicker avoid mode (see Notes)
-awb Set AWB mode (see Notes)
-ifx Set image effect (see Notes)
-cfx Set colour effect (U:V)
-mm Set metering mode (see Notes)
-rot Set image rotation (0-359)
-hf Set horizontal flip
-vf Set vertical flip
-roi Set region of interest (x,y,w,d as normalised coordinates [0.0-1.0])
-ss Set shutter speed in microseconds
-awbg Set AWB gains - AWB mode must be off
-drc Set DRC Level (see Notes)
-st Force recomputation of statistics on stills capture pass
-a Enable/Set annotate flags or text
-3d Select stereoscopic mode
-dec Half width/height of stereo image
-3dswap Swap camera order for stereoscopic
-ae Set extra annotation parameters (text size, text colour(hex YUV), bg colour(hex YUV), justify, x, y)
-ag Set the analog gain (floating point)
-dg Set the digital gain (floating point)

Amazonでお得に購入するなら、Amazonギフト券がオススメ!

\Amazonギフトがお得/

コンビニ・ATM・ネットバンキングで¥5,000以上チャージすると、プライム会員は最大2.5%ポイント、通常会員は最大2%ポイントがもらえます!
Amazonギフト券

\この記事をシェアする/