Raspberry Pi Zero Wと公式のPiカメラモジュールV2を使い、超お手軽で格安のアクションカメラを作りたいと思います。
今回の材料
今回用意したのは次の通りです。
用意した材料
- Raspberry Pi Zero W
- 公式のPiカメラモジュールV2.1
- 専用公式ケース
- USB接続マイク
- microUSB変換コネクタ
- モバイル充電器とUSBケーブル
OSには、Raspbian Buster Lite (2019-07-10-raspbian-buster-lite.zip)
撮影方法は標準コマンドのraspividでトライしてみます。
基本設定とアップデート&アップグレード
sudo apt update
58 packages can be upgraded. Run 'apt list --upgradable' to see them.
58パッケージがアップグレード可能ですね。ZeroWだと処理速度が遅いため気長に待ちましょう。
sudo apt upgrade
アップデート&アップグレードが終わったら、raspi-configでいつも通りに以下を設定します。
sudo raspi-config
- パスワードの変更
- ホスト名の命名
- 地域設定でロケールとWi-Fi国名 (ja_JP.utf8 / Asia Tokyo / JP)
- そしてカメラを使えるようインターフェイス設定からカメラを有効にします。
一旦、再起動します。
sudo shuttdown -r now
カメラテスト
動画撮影は標準コマンドツールであるraspividを使います。
静止画はraspistillです。以前に「あんまり監視しないカメラ」を作った時は静止画でした。その時と同じようなオプションが使えて便利です。
標準的な書式
raspivid -o video.h264 -t 10000
ファイル名としてvideo.h264、-tは録画時間の指定です。10000ミリ秒なので10秒です。何も指定しないとデフォルトは5秒の撮影になります。
画面が逆さまだったりした場合は、-vf -hfのオプションを付けてください。
-vf(縦方向反対) -hf(横方向反対)
.h264の拡張子は変換が必要
この.h264の拡張子は、ラズパイのカメラ(Pi camera)で、raspividコマンドでは、このRAWのh264が取得できます。これはmp4にする前の生のRAWデータなので、このままだとMacでは再生できないため、エンコードしなくてはなりません。
ちなみに出来上がった.h264ファイルは約10秒で20MBでした。
公式サイトのraspividの説明によると、MP4Boxでエンコードできるとありました。
Raspberry Pi Zero Wで作業させても大丈夫なくらい軽いようですが、あまり長い録画時間の場合は、取り出してメインのマシンでエンコードした方が良さそうです。
Raspberry Pi 側にインストールするには以下です。
sudo apt install -y gpac
先程のvideo.h264を変換するには以下のコマンドです。
MP4Box -add video.h264 video.mp4
mp4ならどのマシンでも再生できます。変換した動画のサイズは約10秒で7.1MBでした。(なぜか、10秒の撮影を指定したのに12秒になっています)
単純計算するとこうなります。(実際は異なります。撮影する物によってもサイズは変わるでしょう)
録画時間 | サイズ |
約10秒 | 20MB |
約1分 | 120MB |
10分 | 1.2GB |
1時間 | 約7.2GB |
16GBのmicroSDカードで、恐らく10GB弱は空きがあると思います。そしてFAT32フォーマットですから、1ファイル4GBの制限があるため、連続だと30分強が可能です。
運用方法としては、撮影(録画)→ mp4へ変換→ 元ファイル削除、などで空き容量を確保していけば、変換後はファイルサイズは半分以下になるため充分な録画時間を稼げそうです。
10分〜20分くらいの動画を連続で録画するか、外部からの何かのきっかけでスタートさせるかをすれば実用的でしょう。
そうなると、自動的に行うにはPicameraなどのコマンドツールをPythonで制御する必要がありますね。
オプション一覧はlessコマンドを利用します。
raspividのオプションで録画サイズやフレームレートなども指定できます。
raspividコマンドのオプション一覧を表示させる。
raspivid 2>&1 | less
パイプ(|)する前の2>&1を入れるとページ毎に表示してくれます。
何度か試してみて、適切な画質や大きさをテストしてみてください。
sudo raspivid -w 800 -h 600 -t 10000 -o video.h264
デフォルトだとフルHDサイズで25フレーム、データレートが約5メガビットとなっていました。(これはmp4に変換した後のファイルです)

この辺を小さくしてあげれば、もっと撮影時間は延びますね。
USBマイク
USBマイクが認識されているか確認します。
lsusb
Bus 001 Device 002: ID 0556:0002 Asahi Kasei Microsystems Co., Ltd
Asahi Kasei Microsystemsとありますので、旭化成マイクロシステムズ製ということですね。
これは2018年に購入したので、現在はもっと良いものがあるかも知れません。クリップが付いているので便利に使えそうです。
ちなみに音質などは、Macbookproに搭載のマイクより劣りましたので、Raspberry Pi Zero Wにはちょうど良い性能でしょう。
こちらもモジュールの確認です。
cat /proc/asound/modules
0 snd_bcm2835
1 snd_usb_audio
優先されるのが0の方で、当然ながらUSBのオーディオは1となってます。これ、優先順位というだけなので、録音する際にカード番号とデバイス番号を指定すれば問題ありません。ここでは確認だけです。
何も作業はしませんが、もしもここで表示されていないのなら、マイクに問題があるでしょう。
サウンドカード番号を調べる
arecord -l
arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 1: AK5371 [AK5371], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
USBマイクはカード1、デバイス0でした。(1,0)
録音テスト
arecordコマンドで録音してみます。
arecord -D plughw:1,0 ~/test1.wav
オプションDでハードウェアデバイス名を指定しています。ここでは先程調べたUSBマイク(1,0)の番号です。そしてホームフォルダにWAVEファイルで保存しました。
これを再生してみたいのですが、Raspberry Pi Zero Wにはスピーカーが付いていません。仕方ないので、ファイルを取り出します。
後述してあるsamba共有でファイルを共有させ手元のマシンで再生してみましょう。もしくはscpコマンドで取りに行っても良いです。
scpコマンドが超絶に便利だった
scpコマンドってのがあります。sshと同じ仕組み・・・と簡単に覚えてください。
例:MacからRaspberry Pi Zero W側へ取りに行ってMacに保存する場合
scp pi@192.168.XX.XX: ~/a.txt /Users/raspida/Downloads
この場合は、scpの後にラズパイのアドレス:送りたいファイル、そして最後にMac側の保存したい場所となります。簡潔に書くと以下のようになります。
scp pi@192.168.0.14: test.wav .
ラズパイのアドレスが192.168.0.14として、test.wavをMacのターミナルが始まっているのが自分のユーザーディレクトリだったので、そのまま「.」でOKというシンプルさです。
これ、送る側からだとコマンドの順番が異なりのですけど、Macへアップする場合はセキュリティの問題からまた別にMac側で処理が必要です。そこは面倒なので、Macから取りに行くという形が一番簡便です。
これ、1ファイルだけならと思っていましたが、拡張子毎とか複数ファイルも指定によって簡単に行えますね。
こちらが詳しかった。ありがとうございます。
参考URL: https://qiita.com/rock619/items/2bbbe379ae0fdd2ae00f
マイクの集音量と感度の調整
sambaで共有させ、母艦のMacから取り出して再生したところ、かなり雑音が多く、そして録音の音量が小さかったです。
amixer sset Mic 62 -c 1
繋いだUSBマイクのリミットが0-55だったので、最大の55になっています。
Simple mixer control 'Mic',0
Capabilities: cvolume cswitch cswitch-joined
Capture channels: Front Left - Front Right
Limits: Capture 0 - 55
Front Left: Capture 55 [100%] [24.00dB] [on]
Front Right: Capture 55 [100%] [24.00dB] [on]
arecord -D plughw:1,0 ~/share/test2.wav
もう一度確認したところ、今度はバッチリでした。(sambaで設定したshareフォルダに入れたので母艦のMacから再生させられます。)
コマンドのオプションが分からない場合は、--helpオプションを付けて実行すれば表示されますよ。
arecord --help
-h, --help help
--version print current version
-l, --list-devices list all soundcards and digital audio devices
-L, --list-pcms list device names
-D, --device=NAME select PCM by name
-q, --quiet quiet mode
-t, --file-type TYPE file type (voc, wav, raw or au)
-c, --channels=# channels
-f, --format=FORMAT sample format (case insensitive)
-r, --rate=# sample rate
-d, --duration=# interrupt after # seconds
-s, --samples=# interrupt after # samples per channel
(...続く)
長いんで割愛します。他のコマンドも同様に分からない場合は、--helpでどうぞ。
sambaをインストール
インストールし、設定ファイルを編集します。
sudo apt install samba

途中でWINS設定で<はい><いいえ>の選択肢が出ますが、Windows系がネットワークにあるなら<はい>で宜しいかと思います。私はMacしかないので<いいえ>で進めました。名前解決でホスト名とIPアドレスを紐付けてくれるWindowsサーバーのユーティリティです(たぶん)
samba.confの変更
専用のフォルダを作りました。
sudo mkdir ~/share
smb.confファイルに追記
sudo nano /etc/samba/smb.conf
[share]
comment = Share
path = /home/pi/share
public = yes
read only = no
browsable = yes
force user = pi
shareフォルダは権限を777にでもしておきます。
sudo chmod 777 ~/share
詳しく知りたい方は関連記事をご覧ください。
関連記事:Sambaファイルサーバーの構築
このshareフォルダを受け取り用にして、外部のマシンから撮影した動画を取り出せます。
手ぶれ補正
バイクの走行動画のようなことをやりたいので、振動をどうするかというのは課題です。
ハード的にスタビライザーを取り付けなくても、ソフトウェアでもそれなりに手ぶれ補正を後からかけられます。
バイク(CB250R)で単気筒となるとブレは大きいでしょうから、効果の程はあまり期待できませんが、少し実験で試してみると滑らかなブレになる分だけマシになります。
撮影した動画を何で補正するのか?
MacならAppleの公式ページにあるようにiMovieで動画を手ぶれ補正できます。現在、iMovieが無料どうか忘れましたが、私は入っているので、それで補正をかけてみると、それなりに上手く補正してくれます。

Androidアプリだと手ぶれ補正はGoogleフォトが有名です。スマホで直接撮影するなら便利です。Raspberry Pi Zero Wでの動画なら、一旦は転送しないとなりませんね。
Windowsは・・・サードパーティ製のソフトウェアが必要かも知れません。詳しい方お教えください。
参考:MacのためのiMovie: クリップを手ぶれ補正する
次回
このRaspberry Pi Zero Wをモバイルバッテリーでデイバックに取り付けて、走行動画撮れたらと思います。
そのためには、他にも位置確認できるようにスマホと連携させたり、録画のON/OFFをどうするか、そもそもシャットダウンコマンドをどうするか、簡単であまり面倒では無い方法を考えてみたいと思います。
こちらが続き。いつものBluetoothボタンで制御させました。
簡易ドライブレコーダーZeroWにBluetoothボタンでオンオフ編
コメント