導入
AXIS Communicationsのネットワークカメラ群は、業務用監視カメラとして十分な耐久性・可用性を持ちつつ、高性能なチップを搭載し、さらにカメラ上で動作させるアプリケーションのビルドが可能な用に各種リソースを公開しています。よって、実践的なカメラソリューション用のデバイスの選択肢としては、かなり上位に来ると思います。
一方、自作のアプリケーションのビルドが可能なために、c++でコードを書いたり、クロスコンパイルしたりといったハマるポイントの多い開発が含まれてくるので、ノウハウの蓄積がしたいところです。公式でソースコードやドキュメントを公開してくれており、それらを参考にして、自作プログラムをデプロイする流れを説明します。
準備
本体の用意
AXISのカメラはプラットフォームとしてかなりチップなどが共通化されているので、機種が違ってもおおよそ同じ手順でアプリが作成可能です。
ここでは、半天球カメラ
を使うことにします。このM4317にはARTPEC-8 SoCが乗っているので、結構処理能力があると思います。
買ってきたSDカードを挿入します。パスワードの設定や、SSHの有効化はCLI経由でも、コンソールからでも実行可能で、そこまでは済んでいるものとします。
開発マシンと接続
開発機にdockerをインストールしておいてビルドに使います。ビルド後にローカルでAXIS本体と接続、デプロイする流れです。
公式では、Docker,Gitが必須、VSCoodeが推奨となっています。
公式examplesを元にする
公式のGithubに、様々なサンプルアプリケーションが揃っています。Dockerfileもそれぞれのサンプル用に用意されているので、そのままREADMEを読んで、ビルドはできていくはずです。
ビルド用イメージの用意
各サンプルアプリケーションのDockerfileを参考に、Dockerfileを編集、これから作るアプリケーションのビルド環境を構成します。
(https://github.com/AxisCommunications/acap-native-sdk-examples/blob/main/hello-world/Dockerfile)
ARG ARCH=armv7hf
ARG VERSION=12.4.0
ARG UBUNTU_VERSION=24.04
ARG REPO=axisecp
ARG SDK=acap-native-sdk
FROM ${REPO}/${SDK}:${VERSION}-${ARCH}-ubuntu${UBUNTU_VERSION}
# Building the ACAP application
COPY ./app /opt/app/
WORKDIR /opt/app
RUN . /opt/axis/acapsdk/environment-setup* && acap-build ./
上記はhello-worldのDockerfileです。ほぼ、公式提供のイメージそのままですね。自分のアプリケーションで、その他ライブラリを利用するときに、ここに追加されていくイメージです。
注意点としては、AXIS本体のパッケージの更新などは現実的ではないので、扱う機種の最も古い中身に合わせる必要があります。例えば、
////
OpenCVを追加するとき、opencvのlibopencv_core.so, libopencv_imgproc.soなどはlibc.soを参照>AXISのGLIBCのバージョンが2.36までなら、ビルド時のlibcも2.36までのバージョンにすべき、つまりUBUNTUは22.04(GLIBC=2.35)以下が良い。
////
のようなところです。さて、Dockerfileが用意できたところで、これをビルドします。
docker build -t <APP_IMAGE> .
コンテナ内でビルド
公式のexamplesの各アプリケーションにはLICENSE,Makefile,<本体のコード>.c /<本体のコード>.cpp, manifest.jsonなどが格納されています。ビルド用のコンテナを
docker run --rm -it -v $PWD:/temp <APP_IMAGE> /bin/bash
などで立ち上げ、ソースコードやmakefileのあるディレクトリでmakeすると手動でビルドできます。
AXISの提供環境は、手動のビルドよりも手厚くなっていて、Dockerfile内で最後に呼び出している、
RUN . /opt/axis/acapsdk/environment-setup* && acap-build ./
の部分で、環境変数などが自動で設定されたうえで、acap-buildがビルド済みのファイルを生成します。hello-worldのREADMEにあるように、
docker cp $(docker create <APP_IMAGE>):/opt/app ./build
でコピーしてくれば、(バイナリ、.eap、...)などの一連のファイルが得られます。
デプロイ
.eapは全部入りしたパッケージなので、これをAPI経由かコンソールでアップロードすれば、自前アプリケーションのデプロイが完了します。
実行
カメラのWEBコンソール画面から、Apps > インストールしたアプリ > トグル で実行され、hello-worldなら(点が上下に3つ並んだアイコンから)App Logsに結果が出力されるはずです。
まとめ
ソースコードやmakefile、manifest.jsonなどを用意したうえで、それらを読みだしてビルドするところまで、Dockerfile内に書き込んでおくことで、環境構築からビルドまでの一連の処理を一息に進められます。
公式のexamplesがある程度充実していますが、必ずしもバージョンなどは最適になっていないので、注意しつつ進めましょう。
今回は以上です。ありがとうございました。