※この記事は2016年6月20日に公開した記事を再編集し、2022年3月14日に再度公開しました。
立て続けに新機種がリリースされているラズパイが、またまた手元に届きました!海外からお取り寄せした「ラズパイ Zero V1.3」です。今までの無印ラズパイ Zeroと何が違うかというと、上の写真のように、ラズパイのカメラモジュールを付けられるようなりました!
目次
今回は、この「ラズパイ Zero V1.3」とカメラモジュールを、Pythonから操作する方法をご紹介します。
自動実行処理と組み合わせて、定点カメラを作ってみましょう!
1. ラズパイ Zero V1.3
「ラズパイ Zero V1.3」は、その名の通り「ラズパイ Zero」の進化版です。見た目の違いは1箇所だけ。
右端に、カメラモジュール接続用のコネクタが付きました!ここにリボンケーブルを差し込むことができます。Model Bシリーズでは上向きに配置されていましたが、Zeroでは右側から差し込みます。
Zero grows a camera connector – Raspberry Pi
To connect the camera to the Zero, we offer a custom six-inch adapter cable. This converts from the fine-pitch connector format to the coarser pitch used by the camera board.
HDMI端子、USB端子に続いて、カメラ用のコネクタも小型化!
Model Bシリーズにも標準搭載されているコネクタと比べると、若干サイズが小さくなり、6インチのものが採用されています。
(そのことに気付いたのは、実際に差し込もうとした瞬間でした……という話↓↓↓に続きます)
2. カメラモジュールを接続!
Camera Module – Raspberry Pi
現在こちらのページは公開されてません(2019年7月現在)
参考:
Camera Module v2
Camera Module
今回使用するカメラはこちら。v1.3という、少し古いバージョンです。現在はv2.0という新しいバージョンがリリースされています。
それでは早速接続を……
……と思ったら、入りませんでした!
前述の通り、サイズの違いにはここではじめて気がつきました(第41回でも同じようなことをした気がします……)。
この時点では、Raspberry Pi Zero対応のカメラを買わなくてはいけないと思っていたのですが、実際はちょっと違いました。
カメラが差せません!と伝えたところ、上司が買ってきてくれたのがこちらです。
ケーブルを差し替えるだけで、カメラはそのまま使える!?
カメラの裏側をよく見ると、ラズパイに付いているコネクタと同じものが!黒いストッパーの部分を引き出すと、ケーブルが取り外せるようになっていました。
ということで、ケーブルを接続し直して……
接続完了!これで準備ができました!それでは、写真を撮ってみましょう!
3. Raspbianの準備
Download Raspbian for Raspberry Pi
今回は2016年5月27日リリース版を使用します。
いつもどおり最新版のRaspbianをインストールして進めてみたところ、カメラを使う前にフリーズが多発……デスクトップ環境とカメラを同時に使うと負荷が大きすぎるようでした。
そんなわけで、今回も「Raspbian Jessie Lite」を使うことにしました。
詳しいインストール手順については、第41回「見た目も中身もコンパクトに!Raspberry Pi ZeroをCUI環境で動かそう」を参考にしてください。Raspbian Jessie LiteのインストールからNASの導入まで、一気に設定してしまいましょう!
オートログインの設定
sudo raspi-config
「3. Boot Options」-「B2 Console Autologin」の順に選択します。
Wi-Fiの設定
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
/etc/wpa_supplicant/wpa_supplicant.confに追記
network={ ssid="SSID" psk="パスワード" }
sambaのインストール
sudo apt-get update
sudo apt-get install -y samba
sudo mkdir -m 777 /home/pi/nas/
sudo nano /etc/samba/smb.conf
/etc/samba/smb.conf に追記
[nas] path = /home/pi/nas/ guest ok = Yes read only = No
どれも必須ではないのですが、CUI環境で扱う場合には個人的にオススメの設定になります。
今回はプログラミングが入るので、PC間でプログラムファイルをやり取りできるように、NASを導入しておくと便利です。
sambaのインストールがうまくいかない場合は、パーティションの拡張を行うと解決することがあります(詳しくは第41回「見た目も中身もコンパクトに!Raspberry Pi ZeroをCUI環境で動かそう」の「Raspbianのメモリについて」)にて!)。
続いて、カメラの設定を行います。
カメラモジュールの使い方については、公式サイトのドキュメントが用意されているので、こちらを参考に進めましょう。
Camera Module – Raspberry Pi Documentation
sudo raspi-config
「6. Enable Camera」を選択します。
すぐに、カメラを有効にするかどうかを聞かれますので、Yesを選択します(初期状態ではNoが選択されています)。
再起動するかどうかを聞かれますので、さらにYesを選択。再起動後、カメラが使える状態になっています!
4. picameraで撮影!
公式サイトのドキュメントによると、カメラを使う方法にはシェルスクリプトとPythonの2種類が用意されています。
シェルスクリプト版は、デバプラのダウンロード資料「DevicePlus 電子工作マニュアル Vol.3 ~ラズベリーパイを活用してみよう(初級編)〜」で紹介しているので、今回はPython版で進めていきたいと思います!
Python picamera – Raspberry Pi Documentation
まずは「python-picamera」というパッケージをインストールします。
sudo apt-get install python-picamera
picamera
ちなみに、picameraについてのドキュメントページがこちらです。サンプルソースもたくさん紹介されています!
/home/pi/nas/test.py
import picamera camera = picamera.PiCamera() camera.capture('nas/image.jpg')
写真を撮影するだけなら、ドキュメントで紹介されているこの3行だけで可能!
撮影中は端のライトが赤く光ります。
こんな状態で撮影したので、
こんな写真が撮れました(天井の配管ですね……)。
画像ファイルは、プログラムを実行したときのカレントディレクトリ(piユーザーの場合、デフォルトでは /home/pi/ )を基準に保存されます。今回はNASの中に保存したいので、「camera.capture」関数の引数に「nas/image.jpg」と指定しています。
デフォルトの画像サイズは、ディスプレイを接続しているかどうかによって異なるようです。
わたしの環境では、ディスプレイ接続時は横1980px縦1080px、接続していないときは横720px縦480pxの画像が出力されていました。picameraの場合、画像サイズはパラメータで設定できるので、環境に左右されないためにも指定しておくことをオススメします。
写真として保存するだけでなく、カメラにも映っているものをリアルタイムで表示するプレビュー機能もあります。開始と終了を指定するので、「time」ライブラリと一緒に使います。
3. Quick Start — Picamera 1.10 documentation
import time import picamera camera = picamera.PiCamera() try: camera.start_preview() time.sleep(10) camera.stop_preview() finally: camera.close()
上記は、10秒間、ディスプレイにプレビュー画像を表示するプログラムです。CUI操作のRaspbian Jessie Liteですが、映像はきちんと表示できました。
映像は、ラズパイに直接接続しているディスプレイに表示されます。SSH接続で使用している場合、操作しているPCでは見ることはできません。ディスプレイを接続してしまうとせっかくのコンパクトさが活かされなくなってしまう……と考えると、ラズパイ Zeroの場合はあまり出番が無いかもしれませんね。
import picamera camera = picamera.PiCamera() camera.start_recording('nas/video.h264') camera.wait_recording(10) camera.stop_recording()
最後は動画です。
ファイル名には、拡張子「.h264」または「.mjpeg」を含めた文字列を指定します。利用できないファイル形式を指定すると、フリーズして操作不能になってしまうことが多かったので注意しましょう。
ラズパイ公式サイトのサンプルソースでは「time.sleep()」が使われていますが、picameraのドキュメントサイトの解説を見てみると「picamera.wait_recording()」を使うように推奨されていました。
5. 定点カメラを作ろう!
この連載でもおなじみの、cronを使った自動実行シリーズ!写真を撮影・保存するプログラムを作成し、定時実行させてみたいと思います。
/home/pi/nas/camera.py
import picamera import datetime import os now = datetime.datetime.now() dir_name = now.strftime('%Y%m%d') dir_path = '/home/pi/nas/'+dir_name file_name = now.strftime('%H%M%S') if not os.path.exists(dir_path): os.makedirs(dir_path) os.chmod(dir_path, 0777) picamera = picamera.PiCamera() picamera.capture(dir_path+'/'+file_name+'.jpg')
10分毎に写真を撮影し、保存するプログラムです。時間をファイル名として、日付毎にフォルダ分けして写真を保存しています。保存先にNASのディレクトリを指定して、別のPCから取り出すことが可能です。
このプログラムをcronに登録して、自動実行できるようにします。
sudo crontab -e
最終行に1行追記します。
0-59/10 * * * * python /home/pi/nas/camera.py
フォルダの中に、10分毎に画像ファイルが増えていけば、成功です!出力ファイルの時間が正しくない場合は、「raspi-config」からタイムゾーンを設定しましょう。
できました、定点カメラ!
長期間連続して実行させることを考えると、モバイルバッテリーではなく、コンセントから電源を取る方が良さそうですね。植物の成長記録など、時間をかけて少しずつ変化するようなものを対象にするとおもしろそうです!
6. まとめ
GPIOピンが標準搭載ではないラズパイ Zeroは、ボタンやセンサーなどを取り付けるには手間がかかってしまうこと、そして部品を増やすとサイズが大きくなってしまったり、消費電力が増えてしまったり、せっかくのZeroの良さが半減してしまう……ということで、今回の定点カメラのような使い方がオススメです。
ちなみに、ラズパイのカメラを扱っているデバプラ記事は他にもありますよ!こちらも合わせてご覧くださいませ!