カメラを使う(libcamera・V4L2)
最後の入出力はカメラです。Linuxでは映像入力を V4L2 という共通の口(/dev/video0)で扱い、USBカメラの多くはこの口にそのまま現れます。一方でRaspberry Piのカメラモジュールは libcamera 系のツールで撮るのが今の主流です。ここでは静止画を1枚撮るところから始め、cronと組み合わせて「定点観測カメラ」に育てるまでを扱います。撮れた画像は、この先のエッジAI(手元で画像を判断する)への入口にもなります。
入出力の締めくくりはカメラだ。温度や光を数字で読むところまで来たなら、次は「映像」という、いちばん情報量の多い入力に手を伸ばしたい。Linux では、このカメラも決まった作法で扱える。
ただしカメラまわりは、ツールの名前が世代でよく変わる。だから「特定のコマンド名を丸暗記する」より、「映像入力はどういう仕組みで扱うのか」という骨格をつかむほうが、後々ずっと役に立つ。
📹 V4L2=映像入力の共通口
Linux でカメラなどの映像入力を束ねる共通の仕組みが V4L2(eio-v4l2)だ。Video4Linux2 の略で、種類の違うカメラを「同じ作法で扱えるようにする」標準の窓口だと思えばよい。
多くの USB カメラは、挿すとこの V4L2 の入口として /dev/video0 という名前で現れる。UART が /dev/ttyUSB0 として見えたのと同じで、カメラも1つのファイルとして扱えるわけだ。
🍓 ラズパイは libcamera 系
ところが Raspberry Pi のカメラモジュール(基板にケーブルで直付けするタイプ)は事情が違う。こちらは近年、libcamera(eio-libcamera)という新しい仕組みで扱うのが主流になった。
libcamera 系では、静止画を撮る rpicam-still、動画を撮る rpicam-vid といったコマンドを使う。これらはピント合わせや露出の調整を賢くこなしてくれる、専用の撮影ツールだ。
📸 まず静止画を1枚
いきなり動画や配信を狙うと、つまずきやすい。最初のゴールは「1枚の静止画が保存できる」ことに絞る。ファイルが1つ出来て、開いてちゃんと写っていれば、カメラは生きていると確定する。
撮れた1枚は、その後のすべての土台になる。ピントや明るさ、画角がここで確認できるし、保存の仕組みも1枚で試せる。派手さは無いが、この一歩が全体の成否を分ける。
⏳ cron で定点観測カメラに
1枚撮れたら、これを「定点観測カメラ」に育てるのは、もうあと一歩だ。前のトピックと同じく cron を使い、「1時間ごとに1枚撮って、日時入りのファイル名で保存する」よう仕込めばよい。
こうして溜まった連番の写真は、あとで順に並べれば、花が咲く様子や空の移り変わりを早送りで見せる「タイムラプス」(eio-timelapse)になる。記録が作品に変わる瞬間だ。
🔎 USBカメラは v4l2-ctl で調べる
USB カメラを挿したのに映らないときは、まず「そもそも認識されているか」を確かめる。V4L2 系のツール v4l2-ctl を使うと、つながっているカメラとそのデバイス名を一覧できる。
どの /dev/video が自分のカメラかを、この一覧で確定させる。カメラが複数あったり、1台が video0 と video1 の両方を占めたりするので、思い込みで番号を決めないことが大事だ。
🤖 エッジAIへの入口
1枚の静止画を撮れるようになったことは、見た目以上に大きい。その画像を、手元の基板の上で「何が写っているか」判定させれば、それはもうエッジAI——クラウドに送らず現場で画像を判断する仕組みの入口だ。
たとえば定点カメラの画像から「人が通ったか」「郵便が届いたか」を判定する、といった応用は、この静止画取得の延長線上にある。まずは撮る、そして保存する。その先にAIがつながっている。
ここまでで GPIO・I2C・SPI・UART・カメラと、実機を動かす入出力をひと通り触ってきた。あとはこれらを組み合わせて、自分だけの装置を組み上げていく番だ。手を動かした数だけ、基板は身近になる。