ブログ

Armadillo Base OS:USBカメラの映像を動画で保存する

at_takuma.fukuda
2025年5月8日 21時28分

はじめに

Armadillo Base OSではUVC対応のUSBカメラを使用して画像を取り込むことが出来ます。
電源供給とデータ通信をUSBケーブル1本のみで賄うことが出来るUSBカメラは、
省電力監視カメラシステムの構築に適しています。

この記事では、そのようなシステム構築の第一歩として、
USBカメラから入力された映像を動画ファイルとして保存するコンテナを構築・実行する手順をご紹介します。

コンテナ概要

当社が提供する開発環境ATDEおよびABOSDEを使用すると、Debianベースのコンテナを簡単に構築することが出来ます。
これを使ってUSBカメラから入力された映像を保存するアプリケーションを動作させます。
省電力システムでの使用を想定しているため、エンコーディングなどは行わずに入力された画像をそのまま保存するものとします。
具体的には、ffmpegを使って、MJPG形式の画像をmkvファイルに保存するものとします。
以下の記事を参考としました。
Armadillo-640:USBカメラの画像を保存

コンテナはPC上の開発環境ATDEでビルドして、Armadilloへ転送して実行します。
これにより、Armadilloそのものはインターネットに接続していなくてもWeb上のソフトウェア資産を活用できます。

アプリケーション構築・実行

アプリケーションコンテナの構築と実行の具体的な手順を説明します。
Armadillo-640の製品マニュアルを参照しながら説明を行います。
適宜使用する製品に合わせた読み替えを行っていただくようお願いいたします。

プロジェクト作成

CUIアプリケーションの開発
上記リンク先3.13.2.1.~3.13.3.1.を参考にプロジェクトを作成して開いてください。

packages.txt編集

コンテナにffmpegをインストールするため、
プロジェクト中のpackages.txtを編集して以下を追記します。

ffmpeg

app.conf編集

コンテナからUSBカメラへのアクセスを可能とするため、
プロジェクト中のapp.confを編集して以下を追記します。

add_hotplugs video4linux

main.sh編集

ffmpegを使って動画をファイル保存するためのコマンドを実行するために、
コンテナ起動時に実行されるスクリプトファイルを以下のように書き換えます。

ffmpeg \
 -f v4l2 -input_format mjpeg -video_size 1920x1080 -framerate 30 \
# 入力フォーマットをMJPEG、解像度を1920×1080、フレームレートを30fpsに設定する
 -i /dev/video0 \
# カメラのデバイスファイル名を指定(環境毎に異なるので適宜変更してください)
 -c:v copy \
 -f segment -segment_time 10 -segment_wrap 10 \
#10秒毎にファイルを分割する
  /vol_data/output%02d.mkv
#ファイルの保存先をホストOSからアクセスできるディレクトリに指定します。

コンテナビルド

以下のリンク先を参考にアプリケーション実行用のコンテナイメージをビルドしてください。
3.13.3.4. アプリケーション実行用コンテナイメージの作成

コンテナのインストール

以下のリンク先を参考に、ビルドしたコンテナイメージをArmadilloへインストールしてください。
3.14.7. Armadillo 上でのセットアップ

実行

ArmadilloにUSBカメラを取り付けた状態で以下を参考にアプリケーションを実行してください。 3.14.7.3. アプリケーションの実行

ArmadilloのホストOS上の/var/app/volumes/[プロジェクト名]/ディレクトリ直下に動画ファイルが保存されています。 USBメモリ等で取り出して、PC上で再生して内容を確認してください。

最後に

ここまでの手順でUSBカメラから入力された画像を保存することが出来るようになりました。 このほかのセンサー情報の取得やクラウドサーバとの通信処理、タイマーによる電源制御などと組み合わせて、 省電力のカメラシステムを構築してみましょう。