OpenCV は、コンピューター ビジョン向けの優れたライブラリーで、コンピューター ビジョン ソリューション向けのソフトウェアに一般的に使用されており、KudanCV と OpenCV の比較に関してよく質問を受けます。このブログ記事では、KudanCV と OpenCV の違いを紹介します。
OpenCV は、低レベル アルゴリズムのコレクションです。
これらは、上位レベルのソリューションと組み合わせることができます。しかし、OpenCV には画像検出、画像トラッキング、SLAM といった機能は存在せず、実装に役立つビルディング ブロックのみ利用できます。対照的に、KudanCV はこれらの機能をすべて提供し、必要なプログラミングは、画像の登録と、UI およびカメラへの接続のみです。
OpenCV は、パフォーマンスを重視するようにデザインされていません。
OpenCV は汎用インターフェイスを提供しているため、ユース ケースについて仮説を立てません。これは、プロトタイピングには最適ですが、リアルタイム性の制限を持つ低電力のモバイル ハードウェアを使用する場合、製品化には向いていません。これは、SIMD 命令セットをほとんど使用せずに、マルチスレッドを断続的に使用しています。KudanCV では、アセンブリ言語を使用して大量のコアなコードを手動で最適化し、マルチスレッドを保証し、スケーラビリティを確保します。
同じアルゴリズムを使用して、KudanCV は、OpenCV の 11 倍の速度で画像検出 (特徴記述子ベース) を実現し、画像トラッキングでは 120 倍の高速化を達成しました。実際に、KudanCV の画像トラッカーは、最適なハードウェアでは、1000 FPS 以上のパフォーマンスを実現できます。これにより、複数のマーカーの同時トラッキングや、何千におよぶマーカーの検出など、面白い機能を使用できます。また、より多くのデバイスとの互換性を確保します。
KudanCV は、型安全性を備えたシンプルで一貫性のある C++ API を提供します。
OpenCV は、同じ動的にサイズ指定した行列クラスを使用して、ベクトル、行列、およびビットマップ データを表示します。つまり、非正方行列の反転など、操作上のあらゆる制限は通常曖昧なアサーションとともに実行時にのみ適用されます。OpenCV では、開発者の同期が不足していることで、一貫性のない矛盾が生まれる場合があります。例えば、回転を 3 × 3 行列で返すこともありますし、3D ベクトルとして返すこともあります。
KudanCV の API では、コンパイル時に完全な型チェック機能を提供し、C++ のスマート ポインターを使用することで、メモリ リークを心配する必要はありません。また、おかしな操作をした場合、明確なランタイム警告を提供することさえできます。C++ のようなコア言語で無意味な部分の省いた API は、他の言語向けに簡単にラッパーを提供できます。
KudanCV をコアのエンジンとして使用した Kudan AR SDK の詳細は、弊社の製品ページをご覧ください。
記事参照:
2016年 4月 5日 Kudan Limited.
「KudanCV vs. OpenCV for AR」