実際にデモンストレーションを体験してみた

今回見せてもらったZynq-7000 AP Socボードを用いたデモンストレーションは、以下の写真のような構成でした。

デモの内容としては、カメラで撮影している先の映像からリアルタイムに赤い丸ボタンの座標を追跡するというもの(FPGA側の処理)と、カメラを先端にとりつけたアームのモータをPWM制御するもの(CPU側の処理)を1つのボードから行うことで、カメラの中心に赤い丸ボタンの位置を捉え続けるように、アーム上のカメラ位置を1チップで自動制御するというものです。カメラアーム側に赤と青のケーブルで接続されているのがZynq-7000 AP Socですが、HDMIによるインタフェースを担当するボードも使用されています。

以下の写真は、ボード2枚を上部から撮影したものです。右側がZynq-7000 AP Socで、左側がHDMIインタフェースを担当しているボードです。

また、以下のブロック図が今回のデモンストレーションのシステム構成図です。ボードとカメラやディスプレイの間はHDMI経由で映像の入出力を行います。赤い円領域の追跡処理は、色相での色抽出とテンプレートマッチングによる検出で行われているとのことで、この処理が今回紹介しているOpenCVの高位合成用コードを用いて作成されたものですが、1080pの映像に対して60fpsの処理を実現しているそうです。

今回のアプリケーションでは赤色の円領域を追跡するための前処理として、OpenCVのSobelフィルタ処理が高速に処理されていました。これによって、映像処理部分をハードウェア側に任せることができるので、ソフトウェア(つまりはARMプロセッサ側)のリソースをPWM制御に集中できます。

Zynqのような「OpenCVのコードをハードウェア側に簡単に渡せる機能が提供されているデバイス」が、将来的に標準的なビジョンの処理ルーチン(例えばHOG特徴量やSIFT特徴量、ステレオマッチング処理など)をサポートするとなるとインパクトがあると思います(取材の範疇では、現在のところそういう展開をするロードマップはないという話でした)。

現状こうしたハードウェア向けの処理は、ハードウェアの設計者がHDLなどでハードウェア的に記述して開発したのちに製品化するという、つまりはASICによるオーダーメイドや、特定の目的に対してDSPを開発するというのが主流でした。こういった工程がZynq-7000 AP Socなどのように、すべてソフトウェアでプログラミング可能なプラットフォームが普及してくると、ソフトウェア技術者だけでハードウェア実装までが可能な時代に、組み込み分野も変わって行くことになります。

(デスクトップ向けのオリジナルの)OpenCVライブラリには、GPU化されている部分も多く、それらはGPUのコーディングの知識が無くともC++のコードを書くだけでGPU側での処理に移行させることができます。これと同様の「簡単なハードウェアへの処理の移行が」組み込みボードのハードウェアに対して、まずは基本的な処理に対して実現されたというのがZynq-7000シリーズだと言えるかもしれません。

前回、今回と2回にわたって、Zynq-7000 AP Socという組み込み用ボードのデモを通して、OpenCVを使用する事で、ソフトウェア技術者でもコンピュータビジョンの処理をハードウェア高速化が簡単に行える製品が登場し始めていると現状を紹介しました。B to Bの産業向け組み込みボード製品に限らずスマートフォンやタブレットPCでもあてはまることかもしれませんが、非PC環境ではCPUの処理速度がPCのものほど十分ではないので、ソフトウェア処理だけだとビジョンを用いたアプリケーションの可能性が限られてきた側面(もしくはハードウェア技術のある会社に委託しないと、処理を高速化できなかった)があります。それが、今回紹介したような全てソフトウェアでプログラグラミングができる製品が各社から登場してくることで、FPGA側にビジョン処理を(C++のコードを書くだけで)簡便に受け渡せるような時代が近づいて行きていると言えます。

本連載で筆者が紹介しているようなコンピュータビジョンの各応用が、組み込み分野はもとより、さらに様々なところで実用されていくことを願いまして、今回の中休みの話を終わりにしたいと思います(今回の取材に協力して下さった東京エレクトロン デバイスの方々、ありがとうございました)。