オープンソースソフトウェアは、ロボットビジョン開発者の幅広いニーズを満たします
この記事は、視覚誘導ロボットに関するAspenCore特別プロジェクトの一部です。
ロボットビジョンアプリケーションは複雑な一連の要件をもたらす可能性がありますが、オープンソースライブラリはほぼすべてのニーズに対応するソリューションを提供する準備ができています。開発者は、基本的な画像処理やオブジェクト認識からモーションプランニングや衝突回避に至るまでのオープンソースパッケージを見つけることができます。それでも、開発者が高度なロボットシステムを実装するのに役立ついくつかの重要なオープンソース画像処理パッケージがあります。 (注:このレポートは、より基本的な画像ベースのアルゴリズムのライブラリに焦点を当てており、特にAIベースのロボットビジョン用のオープンソースソフトウェアは除外しています。)
ロボットビジョンソフトウェアに関する記事は、オープンソースコンピュータービジョンライブラリ(OpenCV)[ソース]を強調することに失敗することはありません。利用可能なオープンソースソフトウェアパッケージの中で、OpenCVはおそらく最も広く使用されており、機能が豊富です。 2,500を超えるアルゴリズムを実装するOpenCVディストリビューションは、一連のモジュールで画像処理要件に対応します。これには、特に次のものが含まれます。
-
他のすべてのモジュールで使用される基本的なデータ構造と関数を定義するコア;
-
imgprocは、線形および非線形の画像フィルタリング、幾何学的画像変換、色空間変換、ヒストグラムなどの画像処理機能を提供します。;
-
モーションエスティメーション、背景減算、オブジェクトトラッキングアルゴリズムをサポートする動画。
-
calib3dは、基本的なジオメトリアルゴリズム、カメラキャリブレーション、オブジェクトポーズ推定などを提供します。
-
features2dは、機能検出器、記述子、および記述子の一致を提供します;
-
objdetect、事前定義されたクラスのオブジェクトとインスタンスの検出を提供します;
C ++で記述されたOpenCVは、C ++、Python、Java、およびMatlabのインターフェイスで使用でき、Windows、Linux、Android、およびMacOSをサポートします。 OpenCVは、単一命令、複数データ(SIMD)命令セットのサポートに加えて、gpuモジュールを介して多くの機能にCUDAベースのGPUアクセラレーションを提供し、oclモジュールを介してOpenCLアクセラレーションを提供します。最近リリースされたOpenCV4.0は、人気のあるKinect Fusionアルゴリズムの実装を含む、多くのパフォーマンスの向上と機能をもたらします。
OpenCVは、その機能のために、ロボットの視覚ですばやく移動しようとしている開発者の忍耐力を超える学習曲線を必要とする場合があります。これらの開発者にとって、PythonベースのSimpleCV [ソース]が答えかもしれません。 SimpleCVはOpenCV上に構築されており、高度なロボットビジョン開発者が必要とする機能を提供しますが、経験の浅い開発者が単純なPython関数呼び出しで基本的なマシンビジョン関数を探索するのに役立つアクセス可能なフレームワークを提供します。たとえば、開発者は、SimpleCV Imageクラスの単純な組み込みメソッド(以下のリストのimg.binarize())を使用して画像のしきい値処理などの一般的に使用される関数をすばやく実装し、最終的に図1に示す結果を表示できます。
from SimpleCV import Image、Color、Display#半分と半分のimage.def halfsies(left、right)を実行する関数を作成します。result=left#右側の画像を右側にトリミングします。 Crop =right.crop(right.width / 2.0,0、right.width / 2.0、right.height)#左側の画像に切り抜きを貼り付けます。 result =result.blit(crop、(left.width / 2,0))#結果を返します。 return result#imgur.img =Image( 'http://i.imgur.com/lfAeZ4n.png')#から画像をロードします。90#のしきい値を使用して画像を2値化し、結果を反転します。output=img.binarize( 90).invert()#並べて作成image.result =halfsies(img、output)#結果の画像を表示.result.show()#結果をfile.result.save( 'juniperbinary.png'に保存)
図1.上記のPythonコードの結果(出典:SimpleCV)
OpenCVとSimpleCVは、基本的な画像処理機能に加えて、ロボットシステムがオブジェクトを操作したり、物理環境内で安全に動作したりするために必要な、多数の高レベルの画像処理アルゴリズムを実装しています。これらの計算の多くで使用される基本的なデータ構造の1つは、点群です。これは、オブジェクトを表す多次元データポイントのコレクションです(図2)。カメラから取得したオブジェクトのポイントクラウドは、オブジェクトの識別、位置合わせ、フィッティングなどの基本的なロボット操作に使用されます。点群を操作するために、点群ライブラリ(PCL)[ソース]は、フィルタリング、フィッティング、キーポイント抽出、セグメンテーションなどのアルゴリズムを実装しています。
図2.基本的なトーラスの点群データセット。 (出典:ウィキメディアコモンズ/キエフ)
モノのインターネットテクノロジー