導入事例

プラットフォーム

AdamAppSDKを用いたARマーカー認識Pythonアプリケーションの作成

Vieurekaチーム

こんにちは、今年6月からVieurekaチームに配属された新入社員の志村です。


Vieurekaカメラでは様々なアプリケーションを動作させることができ、その開発はソフトウェア開発キット(AdamAppSDK)で簡単に行うことができます。また、先日AdamAppSDKのv1.10がリリースされ、今までのC言語、C++言語に加えてPythonでの開発も可能になりました。そこで今回、初めてAdamAppSDKを触った私が、VRK-C301上で動作するアプリケーションをPythonで開発した過程についてご紹介したいと思います。


AdamAppSDKでは、アプリケーション開発に必要な様々なAPIが提供されており、例えばカメラ画像取得や設定値管理を簡単に行うことができます。またアプリケーションを規定された形式にパッケージングする必要がありますが、makeコマンドを用いることでコンパイルからパッケージングまでも自動的に行ってくれます。そのため、開発者は基本的にソースコードといくつかの設定ファイルを記述するだけで、カメラ上で動作するアプリケーションを作成できます。


今回は、OpenCV contribのARマーカーライブラリArUcoを利用して、VRK-C301でARマーカー認識を行うアプリケーションを作成します(現バージョンのファームウェアはOpenCV contribには対応しておりません)。主な実装としては、画像を取得した際のコールバック関数に認識処理を追加するのみです。また、アプリケーションにはソースコード以外の外部ファイルも含めることができます。今回は、htmlからjavascriptを呼び出し、ARマーカーの認識結果をブラウザで確認できる構成にしてみます。
ソースコードと外部ファイルを作成した後は、これらを配置したディレクトリでmakeするだけでアプリケーションの完成です。


次に、作成したアプリケーションをカメラにインストールしてみます。AdamAppSDKでは、アプリケーション管理を行うGoogle Chromeの拡張機能も提供しています。これを用いて、アプリケーションのインストールや開始などの操作が簡単に行えます。


実際にインストールしたアプリケーションを動作させてみます。以下のような環境で、紙に印刷したARマーカーをVRK-C301で認識します。


認識結果をブラウザ表示させた結果が以下の動画です(広角モデルでの撮影)。


カメラとARマーカーの角度と距離が変化しても、認識できていることが分かるかと思います。参考までに、今回の環境ではFHD(1920x1080)の画像で4~5fps程度の処理速度が出ることが分かりました。今回CPUは1コアしか使っていないので、C/C++言語でマルチスレッド化すれば、15~30fps程度に高速化できることが考えられます。また、望遠モデルを用いた場合、FHDで4cm四方のマーカーを5.5mの距離から認識することができました(4x4ドットマーカーの場合)。例えば、フォークリフトにARマーカーを貼り付けてVieurekaカメラで認識することで工場でフォークリフトなどの生産性を把握したり、小売店舗で棚札に貼ったARマーカーを認識することで自動的に棚割表を生成する、といったユースケースが考えられます。


今回は、AdamAppSDKを用いたVRK-C301上で動作するアプリケーション開発についてご紹介しました。私自身、AdamAppSDKもVieurekaカメラも触るのは初めてでしたが、SDKの学習、SDKのセットアップ、実際のカメラ上でのアプリケーションの動作まで5日程度の期間で行うことができました。AdamAppSDK v1.10のPython対応により、ソースコードがより簡単に記述できるようになったことも、開発速度の向上に寄与していると実感しています。