MAixPyにはOpenMVのマシンビジョンライブラリが組み込まれています。
これをちょっと試してみました。
OpenMVのドキュメントは以下にあります。MAixPyのマニュアルにもこのimageクラスの説明は掲載されていますが、基本的には本家のコピーのようです。
image — machine vision — MicroPython 1.11 documentation
OpenMVはCPUで全ての処理を行います。オリジナルのOpenMVが動作するカメラモジュール「OpenMV Cam」はSTM32を使用しています。MAixPyで動かす場合でも、KPUは利用されません。
【2019/11/27追記:MAixPyでは、Image.conv3()という、3×3の畳み込みを行うメソッドが追加されています(サンプルスクリプト)。ソースコードを見ると、このメソッドの実装はK210のSDKを使ってKPUのタスクとして実行されているようです。】
画像から直線を抽出するfind_lines()
という関数を試してみました。
スクリプトはこんな感じです。
MAix Goのカメラはかなり広角なので、そのままだと樽型歪みが強く出ます。そのため処理前にレンズ補正をしています。
17行目のimg.lens_corr(1.06,zoom=1.0)
という部分です。
周辺減光もかなりきついのですが、こちらは放置です。
下は動かしてみたスクリーンショットです。スマホの輪郭やキーボードなどの直線が抽出されています。
マシンビジョンというとOpenCVが有名ですが、OpenMVはOpenCVの組み込み機器版という感じで、OpenCVの移植ではなく独自実装だそうです。(MITライセンスのオープンソースです。)
QRコードや顔画像の検出機能もあります。顔画像検出のスクリプトはこんな感じになります。
速度はそこそこ早いですが、やはりKPUを使った顔検出のほうが精度も速度も遥かに早いので、MAixの場合はあえて使用する必要は無いように思います。
OpenMVで画像の一部の領域を切り出してKPUで物体識別、といった組み合わせ方はあるかもしれません。
コメント