🐧 Linux 総合学習プラットフォーム
実機制御 GPIO/I2C/SPI・RT ・ 中級〜上級

カメラを使う(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つのファイルとして扱えるわけだ。

🔗
たとえV4L2 は「映像入力のための共通コンセント」だ。メーカーや形の違うカメラでも、このコンセントの規格に合わせておけば、アプリ側は同じ差し込み口から映像を受け取れる。
USBカメラWebカメラキャプチャ機器V4L2(共通口)/dev/video0アプリ側は同じ作法で受け取る

🍓 ラズパイは libcamera 系

ところが Raspberry Pi のカメラモジュール(基板にケーブルで直付けするタイプ)は事情が違う。こちらは近年、libcamera(eio-libcamera)という新しい仕組みで扱うのが主流になった。

libcamera 系では、静止画を撮る rpicam-still、動画を撮る rpicam-vid といったコマンドを使う。これらはピント合わせや露出の調整を賢くこなしてくれる、専用の撮影ツールだ。

つまずきこのあたりのコマンド名は変化が速い。以前は raspistill、その後 libcamera-still、さらに rpicam-still と改名されてきた。手元の環境で動く正確な名前は、公式ドキュメントで最新を確認してほしい。
$ rpicam-still -o photo.jpg (カメラモジュールで1枚撮り、photo.jpg として保存する。名前が違う環境では libcamera-still も試す)
💡
ポイントおおまかには「USBカメラ=V4L2/ラズパイのカメラモジュール=libcamera 系」と住み分けて覚える。どちらに当たるかで、使うコマンドの系統が変わる。

📸 まず静止画を1枚

いきなり動画や配信を狙うと、つまずきやすい。最初のゴールは「1枚の静止画が保存できる」ことに絞る。ファイルが1つ出来て、開いてちゃんと写っていれば、カメラは生きていると確定する。

撮れた1枚は、その後のすべての土台になる。ピントや明るさ、画角がここで確認できるし、保存の仕組みも1枚で試せる。派手さは無いが、この一歩が全体の成否を分ける。

コツうまく写らないときは、レンズの保護フィルムを剥がし忘れていないか、ケーブルの向き(ラズパイのカメラは表裏がある)が正しいかを確認する。ソフトより先に、物理の初歩を疑うと早い。

⏳ cron で定点観測カメラに

1枚撮れたら、これを「定点観測カメラ」に育てるのは、もうあと一歩だ。前のトピックと同じく cron を使い、「1時間ごとに1枚撮って、日時入りのファイル名で保存する」よう仕込めばよい。

こうして溜まった連番の写真は、あとで順に並べれば、花が咲く様子や空の移り変わりを早送りで見せる「タイムラプス」(eio-timelapse)になる。記録が作品に変わる瞬間だ。

cron毎時おこす1枚撮る日時つき保存img_09.jpgimg_10.jpgimg_11.jpg連番で溜まる並べて早送り

🔎 USBカメラは v4l2-ctl で調べる

USB カメラを挿したのに映らないときは、まず「そもそも認識されているか」を確かめる。V4L2 系のツール v4l2-ctl を使うと、つながっているカメラとそのデバイス名を一覧できる。

$ v4l2-ctl --list-devices UVC Camera (usb-...): /dev/video0 (このカメラが /dev/video0 に見えている、と分かる。名前が出なければ認識自体を疑う)

どの /dev/video が自分のカメラかを、この一覧で確定させる。カメラが複数あったり、1台が video0 と video1 の両方を占めたりするので、思い込みで番号を決めないことが大事だ。

コツv4l2-ctl はデバイス名の確認だけでなく、対応する解像度やフォーマットの一覧も出せる。「このカメラで何ができるか」を最初に把握しておくと、後の撮影設定で迷わない。

🤖 エッジAIへの入口

1枚の静止画を撮れるようになったことは、見た目以上に大きい。その画像を、手元の基板の上で「何が写っているか」判定させれば、それはもうエッジAI——クラウドに送らず現場で画像を判断する仕組みの入口だ。

たとえば定点カメラの画像から「人が通ったか」「郵便が届いたか」を判定する、といった応用は、この静止画取得の延長線上にある。まずは撮る、そして保存する。その先にAIがつながっている。

💡
ポイントカメラは「V4L2 か libcamera か」を見極め、まず静止画を1枚撮ることから始める。1枚撮れれば、定点観測もタイムラプスも、そしてエッジAIへの道も、すべてそこから地続きだ。

ここまでで GPIO・I2C・SPI・UART・カメラと、実機を動かす入出力をひと通り触ってきた。あとはこれらを組み合わせて、自分だけの装置を組み上げていく番だ。手を動かした数だけ、基板は身近になる。

この項目に出てくる用語

V4L2ぶいふぉーえるつー
Linuxで映像入力機器を統一的に扱う標準の枠組み。/dev/video0等で見える。
libcameraりぶかめら
Raspberry Pi等でカメラを扱う新しめのライブラリとツール群。
タイムラプスたいむらぷす
一定間隔で撮った連番の静止画を並べ、変化を早送りで見せる手法。

関連コマンド

v4l2-ctl

▶ 学習アプリでこの続きを学ぶ・演習する