コンピュータービジョンに適した言語ですか?


28

コンテンツベースの画像検索システムを実装しようとしていますが、その前に、このタスクに適したいくつかのプログラミング言語の概要を取得したいと思います(優れたライブラリなどを持っています)。

誰もその種のタスクのためのいくつかの良い言語とライブラリを知っていますか?PythonやJavaはどうですか?

ベスト


スコープは学術プロジェクトです;-)それを言わないでごめんなさい!
jstr

1
私はソフトウェアスタートアップのためにコンピュータービジョングループで3年間働いていました。ラピッドプロトタイピングにはpython + scipy / numpyを使用し、プロダクションコードにはC ++を使用しました。boost :: python重いC ++のラッパーが移植に役立ちました。BLASとLAPACKは、重い数値に使用されます。
WIM

2
@wim-あなたのコメントは、開発のさまざまなフェーズでこれらの言語を使用した理由についてもう少し詳しく説明して、すばらしい答えを出していただろう。
マークブース

1
MatlabまたはOctaveを使用してラピッドプロトタイピングを行い、Armadillo(線形代数用)やMLPACK(機械学習およびパターン認識用)などのツールキットを使用してC ++に変換できます。Armadilloは内部でBLASとLAPACKを使用します(Matlabと同じ)。Armadilloのmexインターフェースを介して、Matlab / OctaveコードとC ++コードを組み合わせることもできます。
mtall 14年

回答:


35

仕事の範囲と規模をより具体的にすることができます(アカデミックプロジェクト?デスクトップまたはモバイルの商用製品?Webベースの商用プロジェクト?)。

いくつかの推奨事項とコメント:

  • Matlabはアカデミックな世界では一般的であり、アイデアをスケッチ/検証するのに非常に適しています。他の研究者(CVおよび機械学習)からの大量のコードにアクセスできます。プロトタイピングとデバッグは非常に高速で簡単になりますが、この環境で開発したものを本番環境に投入するのは困難です。コードの実行内容によっては、メモリ/パフォーマンスの問題が発生する可能性があります(Matlabのプリミティブに関して何をしたいのかを記述できず、ピクセルでループを開始する必要があり、Matlabがインタープリター言語ではない場合がありますこのコンテキストで支援)。データベース、Webサーバーなどとのやり取りは簡単ではなく、時には不可能です(MatlabプログラムがWebフロントエンドによって呼び出されるThriftサーバーになることはありません)。$$$かかります。

  • C ++は、多くのプロダクショングレードのCVシステムで使用されています(Googleの画像検索やストリートビュー、または多くの商用ロボットアプリケーションの規模で考えてください)。OpenCVのような優れたライブラリ、優れたパフォーマンス、運用環境への配置が簡単。機械学習を行う必要がある場合、多くのライブラリがあります(LibSVM / SVMlight、Torch)。「すべてのピクセルでループ」コードに頼る必要がある場合、それはうまく機能します。大規模な検索システムで必要なシステム/ストレージレイヤーのコーディングに使いやすい(例:イメージへの逆インデックスマッピング機能ハッシュを格納するための非常に大きなディスク上のハッシュマップ)。Thrift / Message Packのようなものは、検索プログラムをRPCサーバーに変え、Webフロントエンドから呼び出すことができます。ただし、プロトタイピングにはあまり機敏ではなく、新しいアイデアを試すのは非常にひどく、開発時間が遅い。経験の浅いコーダーの手に渡ると、パフォーマンスや不安定性の問題を追跡するのが難しくなる可能性があります。

  • Pythonは、何らかの形で両者の中間に位置しています。Matlabスタイルの数値計算(numpyとscipyを使用)に使用でき、OpenCVなどのライブラリにバインドできます。あなたはそれでシステム/データ構造のものをすることができ、許容できるパフォーマンスを得ることができます。MatlabやC ++よりも少ないものの、かなりの数の機械学習パッケージがあります。「すべてのピクセルでループ」コードに頼る必要がない限り、パフォーマンスの1:1.5から1:3の比率と2:1から10:1の比率で、C ++でできることのほとんどすべてをコーディングできます。ソースコードサイズ(議論の余地あり)。しかし、プロジェクトの成功次第では、パフォーマンスが問題になるポイントがあり、C ++への書き換えはオプションではありません。


4
また、MatlabはPythonとは異なり、ドキュメントが非常に強力です。
アンドレイRubshtein

1
Cはどうですか?疑わしいときはそれが私の頼りになる言語です。
ゼッタスロー

10

特にあなたのプロジェクトはアカデミックであるため、Mathematicaは非常に優れた適切なソフトウェアシステムです。Mathematica 8には、画像処理、線形代数、数値、GPUなどの包括的な機能セットが付属しています。また、シンボリックシステムでもあるため、方程式の閉形式解を何度も導出できます。コンピュータビジョンタスクには非常に便利です。Mathematicaは、Python、C、C ++、Java、.NETなどのコードとも通信できます。


5

これが学術的なプロジェクトである場合、Matlab、特にImage Processing ToolboxとComputer Vision System Toolboxを使用する必要があります。Matlabでアルゴリズムをプロトタイプ化し、評価するのにかかる時間は、C ++よりも桁違いに短くなります。

Pythonインターフェースを使用した場合でも、OpenCVはMatlabよりも使用がはるかに難しく、本当に必要な場合は、Mexlabからmexを介してCまたはC ++コードを呼び出すことができます。


4

画像検索システム用。クライアント側とサーバー側のコードがあります。サーバー側は、PythonまたはC / C ++のいずれかです。ここではOpenCVが最適です。PythonとC ++の両方のインターフェースがあります。クライアント側については、Javaを使用した方が良いと思います。


3

コンピュータービジョンに最適な言語はC ++です。その主な欠点は、あなたが望むものを達成することがより難しいことです。OpenCVは、コンピュータービジョンに最適なライブラリですが、matlabまたはpythonを使用して同じことを行うことができます。

見てくださいここに

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.