【目的】
Coral USB TPU AcceleratorをWindows端末で(疑似的に)使ってリアルタイムで物体検知できるようにします。
【内容】
【Coral USB TPU AcceleratorをWindows端末で(疑似的に)使う (VirtuaBox編)】の続きです。
Coral社提供のサンプルプログラムを使ったリアルタイム物体検知がうまく動かなかったので、再挑戦します。
【VMにWebカメラを認識させる】
まずはVMにWebカメラを認識させます。
【Coral USB TPU AcceleratorをWindows端末で(疑似的に)使う (VirtuaBox編)】で作ったVMを実行した状態で、以下の操作を行います。
- [デバイス]>[Webカメラ]>[<使いたいカメラを選択>]
上記の操作を行った上で、VM上でターミナル画面を開き以下のコマンドを実行します。
ls /dev/video*
以下のような表示が返ってくればUSBカメラを認識しています。
/dev/video0 /dev/video1
【物体検知用のプログラムの作成】
公式が提供しているgstreamerを使ったサンプルを実行してみましたが、うまく動かすことができませんでした。
OpenCVのVideoCaptureができることは確認していたので自作しようと思いましたが、時間の関係(言い訳)で下記の記事の「MobileNet-SSD-TPU-sync.py」を利用させていただきました。
【RaspberryPi3(USB2.0)とLaptopPC(USB3.1)でGoogle Edge TPU Acceleratorを使用してMobileNet-SSD v2の動作スピードを検証してみました(MS-COCO)】
ちなみについ先日、【github - google-coral】が更新されてOpenCV用のサンプルが追加されていましたが、イマイチなんですよね…
プログラムの内容的には、OpenCVのVideoCaptureを使ってカメラ画像を取得し、取得した画像をTPUの物体検出モデルに投入し、結果をBoundingBoxで表示しています。
今回利用したモデルは「MobileNet SSD v2」という、モバイルデバイスでも使えるように軽量化したモデルです。
高速で比較的高精度の認識ができるのが特徴です。
【プログラムの実行】
下記コマンドを実行することで、上記で保存したプログラムを実行します。
python3 MobileNet-SSD-TPU-sync.py
画像では、85%の確率で「bottle」と66%の確率で「tv」を検出しています。
背景のコンソール画面の数字は検出モデルでの推論にかかった時間です。
一回あたり「0.0165 sec」というかなり高速で検出できています。
Edge TPUを使わずCPUのみで実行した場合、Core i7で0.1秒、ラズパイ3Bで4秒程度かかりますので、Edge TPUによってかなり速度が向上していることがわかります。
なお、検出画面の右上にフレームレートが表示されていますが、「15FPS」しか出ていません。
処理自体が0.016秒で終わっているのであれば60FPS以上出るはずですが、使っているUSBカメラが15FPSまでしか取り込めないため100%の性能が出せない状態になっています。
とはいえ、動くことは確認できたので、とりあえずはこれで良しとします。
【最後に】
とりあえず、擬似的ではありますがWindows環境でEdgeTPUを動かすことは可能になりました。
では、この環境を使ってなにかするのか?といえば、特に考えていません。
業務上Windows端末を使わざるを得ないので、使い慣れた端末を利用しつつEdgeTPUを使った開発が行えるかな?って言うぐらいにしか考えていません。
あと、客先でデモする際にも持ち物を減らせるかな?
客先によっては情報機器は持ち込みが厳しいので、できるだけ持ち込むものは減らしたいですからね。