Raspberry Pi 4 Model B で遊んでみる

Rasberry Pi 本体
Rasberry Pi 4 Model Bを購入
¥9,275 (2024/06/10時点)
Pi 5はハイスペックすぎる&日本でまだ普及途中っぽい、Pi 3はスペックが不安。

Rasberry Pi OSのインストール
下記の公式手順を参考にする
micro SDカードにOSをインストールする
任意のPCにmicro SDカードを接続し、SDカードにOSイメージをDLする。
OSイメージのDLにはRaspberry Pi Imagerを利用する。Win/Mac/Linux版で分かれてるので適したものをインストールする。
OSはRaspberry Pi OS (64-bit)を利用する。
設定項目
-
hostname
- raspberrypi.local
-
username & password
- 任意のものを
-
wireless LAN
- 2.4GHzのやつを指定した
- Country:JP
-
Locale
- Asia/Tokyo
- jp
-
SSH
- Enable SSHにチェック
- Use password authenticationにチェック
SDカードへのOSインストールが終わったら
PCからSDカードを取り外し、SDカードをラズパイに挿す。
マウス・キーボード・HDMIケーブルもこのタイミングで挿す。
ラズパイ起動
周辺機器の接続ができたら、最後にACアダプタを接続する。
接続した瞬間にラズパイの端のランプが光りだす。赤点灯と緑点滅。
公式によると5分以内に起動するとのこと。それ以上時間がかかる場合は何かしらのエラーが起きてるらしい。
自分の場合は1〜2分ほどで起動完了した。

SDカード
ラズパイにSSD/HDDなどのストレージはないので、SDカードをストレージとして利用する。
SSD/HDD?→ https://chatgpt.com/share/2722b44e-73a8-462c-b7ea-a61282dde53b
容量
- Raspberry Pi OS自体が2GB前後なので、最低でも4GB以上はマストで必要
- 32~64GBが一般的に必要とされる容量っぽい
- ソフトウェアを多数インストールしたり、画像・映像を大量に扱ったりなどする場合は128GBとかも検討の余地あり
- 今回は32GBを採用する
なお、容量によって規格がある。
- SD(Secure Digital)
- 最大2GB、FAT16、古い規格
- SDHC(Secure Digital High Capacity)
- 4GB~32GB、FAT32、現代のデバイスで広く使用
- SDXC(Secure Digital eXtended Capacity)
- 64GB~2TB、exFAT、非常に大容量のデータ保存に適している
Rasberry Pi 4BはSDHC,SDXCに対応してそう。
UHS
Ultra High Speedの略。SDカードの転送速度規格。
今回はUHS-I 3を採用する。
- UHS-I
- バススピード:最大104MB/s
- UHSスピードクラス
- U1(最低書き込み速度10MB/s)
- U3(最低書き込み速度30MB/s)
- 用途:一般的な用途、HDビデオ撮影、写真撮影など。
- UHS-II
- バススピード:最大312MB/s
- UHSスピードクラス:U1、U3(同じく最低書き込み速度10MB/s、30MB/s)
- 用途:4Kビデオ撮影、高速連続撮影など、より高速なデータ転送が必要な用途。
- UHS-III
- バススピード:最大624MB/s
- UHSスピードクラス:U1、U3(同じく最低書き込み速度10MB/s、30MB/s)
- 用途:8Kビデオ撮影、プロフェッショナル用途など、非常に高速なデータ転送が必要な用途。
SDカードリーダー
MacBook AirはSDカードスロットがないのでリーダーを別途用意する必要がある

ACアダプタ
5.1V 3A 充電器コード

カメラモジュール
Raspberry Pi カメラモジュール V3(NoIR)
型番:SC0873

HDMIケーブル
Micro HDMIケーブルを購入

USBマイク

冷却ファン&ヒートシンク付きケース
- 冷却の仕組みが何かしら必要
- 冷却ファン・・・ファン部分の故障が心配。静音性要チェック。
- ヒートシンク・・・機器の熱を吸収して放熱してくれる部品。一定温度を超えると放熱効率は下がる。
- 冷却ファン&ヒートシンク付きのケースがあるので、それを買う↓

カメラモジュールの動作確認(libcamera編)
- libcameraのインストール
sudo apt update
sudo apt install -y libcamera-apps
- カメラモジュールを有効にする
sudo vi /boot/firmware/config.txt
↓
追記する
dtoverlay=vc4-kms-v3d
- 再起動
sudo reboot
- libcameraでカメラ撮影
# プレビュー表示
libcamera-hello
# 静止画撮影
libcamera-jpeg -o test.jpg
# 動画撮影(-tオプション撮影時間をミリ秒で指定)
libcamera-vid -t 10000 -o test.h264

カメラモジュール動作確認(rpicam編)
libcamera
はOSSのカメラソフトウェア、rpicam
はOSにプリインストールされているカメラソフトウェア。公式は後者を勧めてるっぽい。
ということでrpicamでも動作確認する。
# プレビュー表示
rpicam-hello
# 静止画撮影
rpicam-jpeg --output test.jpg

rpicamで撮影した映像をRTSPプロトコルで配信する
ここから本編
以下公式ドキュメントを見ながら。
Stream video over a network with rpicam-apps
ラズパイ側の操作
配信を観る際にラズパイのIPを指定する必要があるので、あらかじめ確認しておく。
# ラズパイ自身のIPを確認
hostname -I
IPがわかったところで、配信を開始する。以下コマンドを実行することで配信が開始される。
# 配信を開始する
rpicam-vid -t 0 --inline -o - | cvlc stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/stream1}' :demux=h264
クライアント側の操作
PCで配信映像を見る場合、以下コマンドを実行する。
<ip-addr-of-server>
は先程確認したラズパイのIPで置換する。
vlc rtsp://<ip-addr-of-server>:8554/stream1
iPadやiPhoneで観たい場合はVLCというアプリをAppStoreからインストールし、アプリ内でrtsp://<ip-addr-of-server>:8554/stream1
を入力して「ネットワークストリームを開く」をタップすると配信を観ることができる。
起動時に配信を開始する
crontab -e
でcrontabを開き、以下を記載する。
@reboot rpicam-vid -t 0 --inline -o - | cvlc stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/stream1}' :demux=h264
sudo reboot
で再起動後、配信が自動で開始されていればOK。
ただし、これをやるとラズパイをディスプレイに繋いでも配信のウィンドウがでかでかと全画面で表示されるだけになり、他の操作ができなくなる。
操作をする場合はラズパイ以外のホストからラズパイにSSHして操作する必要がある。
hostname -I
で確認したIPをもとに、SSHする↓
ssh <ラズパイ側のユーザー名>@<ip-addr>
その後、以下操作でVLCのプロセスを探してkillすれば配信を終了できる。
ps aux | grep vlc
sudo kill <PID>
もしくは、rpicam-vidコマンドに-n
オプション(--nopreview)を渡してプレビュー表示をOFFにする。

rpicamの映像に現在日時を表示する
上記画像のように、撮影映像に2024-06-24 08:51:08 +09:00
のような現在日時を表示します。
Post-processingという機能を使います。Post-processingとは「後処理」を意味し、カメラが撮影した映像に後から処理を施すことを指します。
例えば撮影映像にネガ反転処理を加えたり、顔認識処理を加えたりできます。
今回はこの機能を使って、シンプルに現在日時を追加で表示する処理を加えます。
まずは以下のJSONファイルを用意します。ファイル名は任意です。
{
"annotate_cv" : {
"text" : "%F %T %z", //表示するテキスト
"fg" : 255, //テキストの文字色
"bg" : 0, //テキストの背景色
"scale" : 1.0, //フォントサイズ
"thickness" : 2, //フォントのweight
"alpha" : 0.3 //背景ピクセルを上書きするときに適用するアルファの量
}
}
text
に記載されている記号の意味は以下です。
- %F displays the ISO-8601 date (2023-03-07)
- %T displays 24h local time (e.g. "09:57:12")
- %z displays the timezone relative to UTC (e.g. "-0800")
JSONのサンプルは以下のassetsディレクトリにあります。公式ドキュメントにも同じサンプルが書いてあります。
作成したJSONをrpicam-vidコマンドの--post-process-file
オプションに渡せばOKです。
rpicam-vid --post-process-file annotate-date.json -n -t 0 --inline -o - | cvlc stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/stream1}' :demux=h264
参考

動体検知
Post-processingのmotion_detect-stageでできそうな予感