Raspberry Pi 5 に、カメラデバイスを接続する

前回は、Raspberry Pi 5 で、”Lチカ” を通してGPIOの基本的な扱い方を学習しました。今回は、同じく Raspberry Pi 5 に、カメラモジュールを接続して、写真や動画の撮影をやってみます。

前回と同様、チャッピー(ChatGPT)のナビゲートで進めていきたいと思います。

カメラモジュール

初めてのカメラモジュールということで、選んだのは↓この製品です。

お値段は 841円 と、同様のカメラデバイスの中では結構、、、いや、だいぶお安い感じです。

何を見間違ったか、Raspberry Pi の公式と勘違いしてなんとなく買ってしまいましたが、よくみたらどこにもそんなこと書いてありませんでした。たぶん、格安中華製品です。

自分はちょいちょいそういうことをやらかし、変な買い物をしては後悔するなどをしており、とても良くないです。でもまぁ格安だし、初めてだし、練習だし。扱い方を理解できれば今は十分ってことで。

で、届いたのがこちら↓です。

ラベルもブランド名もほとんど何も書かれていない、シンプルな白い箱。

開けてみると、説明も宣伝も挨拶も何もなく、シンプルに製品が収められていました。潔いです。

本体はこんな感じ↓。カメラにはキャップが付いています。

キャップを外すとこんな感じ↓です。

裏側は↓こんな感じになっています。

Raspberry Pi 5 に接続する

早速使ってみます。

製品パッケージにはマニュアルも何も付いていませんが、Amazonの商品ページには次の説明が書かれています。

使用方法:

  1. RasPi 用の電源をオフにしてロックを解除します。まず、RasPi 用の電源がオフになっていることを確認し、適切なツール (爪楊枝など) を使用して CSI スロットから留め金を取り外し、持ち上げられるようにします。
  2. カメラ ケーブルと接続ケーブルを取り付けます。ケーブルの一端を CSI コネクタに挿入し、ケーブルの金属接点のある側がコネクタの対角線を向いていることを確認します。次に、カメラ モジュールの接続ケーブルをケーブルの対応するポートに挿入します。

カメラの固定: カメラ モジュールを RasPi に正しく取り付け、すべての接続がしっかりしていて信頼性があることを確認してから、デバイスの電源をオンにします。システムとカメラ ドライバーを更新します。

まずは、電源をオフにして、カメラモジュールを Raspberry Pi 5 の本体に接続します。

カメラ側のケーブルの先端の形を確認してみると、↓こうなっています。

裏返すと↓こうなっています。

たくさんの電極が見えます。これを Raspberry Pi 側の端子に接続します。

本体側は、↓この端子です。

Raspberry Pi 5 には、カメラ用のスロットが2つ付いてます。CAM/DISP 0 と、CAM/DISP 1 と印字されているのがそれです。

スマホについてるメインカメラとインカメラのような使い方を想定してるのでしょうか。同時に2台接続して、撮影ができるみたいです。

とりあえず今回はカメラは1台です。どちらに挿しても良いですが、数字の若い方がメインっぽい気がするので、 0 の方に挿すことにします。

まず、ツメ(留め金)を開きます。

端子の上の方に被っている茶色い部品です。壊さないように丁寧に、爪で引っ張ったら、開きました。

そしたら、開いたところに、カメラ側の端子を挿し込みます。

向きが重要です。↓この向きです。

裏側から見るとこんな感じ↓。

挿し込んだら、さっき開いた茶色い留め金を押し込んで固定します。

これでOK!

認識できるか確認する

接続が上手くできたのかどうか、動かして確認してみます。

チャッピーによると、コマンドを実行して映像を確認できるとのこと。

はじめ、 libcamera-hellolibcamera-jpeg というコマンドを案内されましたが、コマンドがインストールされておらずダメで、 libcamera-appslibcamera-tools をインストールして試してみろというのでやってみたが、上手く動かず・・・というか、インストールができず。

上手くできたのは rpicam-apps というパッケージでした。

sudo apt install rpicam-apps

このパッケージには、rpicam-hello, rpicam-jpeg, rpicam-raw, rpicam-still, rpicam-vid というコマンドが含まれています。

このうち、rpicam-hello を実行してみると、カメラ映像を確認することができました。

rpicam-hello

そしたら、ウィンドウが立ち上がって、カメラの映像が映りました!

なんか、極端に色がおかしいような・・・? 格安カメラだからしょうがないのかな。

でもまぁ、一応カメラと接続できることは確認できましたね。

写真を撮る

静止写真は、 rpicam-still コマンドで撮影できました。

rpicam-still -o test.jpg

-o オプションで、出力先のファイル名を指定します。

実行したときの様子が↓こちらです。必要があるのかどうかわからないですが、このコマンドでもウィンドウが立ち上がって、カメラ映像が写されました。指定したパス test.jpg に写真が保存されたので、 open コマンドで開いています。

ちなみに、カメラを2台つなげている場合は、 -c オプションでどちらのカメラかを指定するそうです。 -c 0 とやったら 1番のカメラ、 -c 1 としたら 2番のカメラです。

# 1つめのカメラ
rpicam-still -c 0 -o test.jpg

# 2つめのカメラ
rpicam-still -c 1 -o test.jpg

動画を撮る

動画は、 rpicam-vid コマンドで撮影できました。

rpicam-vid --codec h264 -t 10000 -o test.mp4

-t オプションで、撮影する動画の長さを指定できます。単位は ミリ秒。

実行した様子↓。このコマンドでもウィンドウが立ち上がってカメラ映像が映し出されます。こんどは動画なので必要性が理解できます。静止写真のときと同様、録画されたファイルを open コマンドで開きました。

ストリーミングしてみる

ちょっとついでに。チャッピーに聞いたら簡単な方法を教えてくれました。

動画のストリーミング配信にはいろいろな方法がありますが、 Motion JPEG(MJPEG) という画像の形式が簡単便利とのこと。へぇ〜!

ウェブページに埋め込むときに、ただの <img>タグで配置できるとのこと。へぇ〜!

早速やってみます。

Python を使うので、インストールされていない場合は、↓このコマンドでライブラリをインストールしておきます。

sudo apt update
sudo apt install -y python3-flask python3-picamera2 python3-opencv

Pythonコードは↓このような内容で。 mjpeg_server.py という名前で保存します。

# mjpeg_server.py
from flask import Flask, Response
from picamera2 import Picamera2
import cv2
import time

app = Flask(__name__)

picam2 = Picamera2()
picam2.configure(picam2.create_video_configuration(
    main={"size": (640, 480)}
))
picam2.start()
time.sleep(1)

def gen():
    while True:
        frame = picam2.capture_array()
        _, jpeg = cv2.imencode('.jpg', frame)
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' +
               jpeg.tobytes() + b'\r\n')

@app.route('/stream')
def stream():
    return Response(gen(),
        mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8081, threaded=True)

そしたら、実行します。

python3 mjpeg_server.py

これで、画像が配信されました。

ウェブページに埋め込むには、 ↓このように <img> タグを配置します。

<img src="http://192.168.0.18:8081/stream" />

あとがき

なんか色はおかしかったけど、ライブカメラ的なことはわりと簡単にできることがわかりました。

Rasberry Pi を触り始めた当初、ラジコンに積んで、自動運転などできたら楽しそう ということをひとまずの目標にして、必要な部品を試しているのですが、 ライブカメラを搭載すれば、自動運転まではまだ遠いにせよ、一人称視点でラジコンドライブが楽しめるようにはなりそうです。

次は、 "ラジコンに載せてみる" をやってみたいと思います。


プロフィール

コヤナギ トモヤ

まったりウェブ系コーダーしてます。PHP製静的CMS Pickles 2 を開発しています。

RSSフィード

  • このサイトは、 コヤナギ トモヤ の個人サイトです。
  • 個人的な主張や、活動の記録などを掲載しています。 所属する企業、団体、その他の意見や立場を代表するものではありません。
  • 掲載された内容は古くなっている可能性があります。 特に古い記事では、現在の筆者の考えと異なる主張をしていることがありますが、記録としてそのまま残しております。 予めご了承ください。
ページの先頭へ戻る