2011-07-29 9 views
1

私はカメラのいくつかの機能を設定できるようにするC++インターフェイスを備えたUSBカメラ(uEye)を持っています。 C++プログラムは、カメラから画像データを読み込み、あらかじめ割り当てられたメモリのどこかに格納することができます。これらはすべてWindows上で動作します。C++とPythonの間でビデオデータを共有する

Pythonでnumpyを使用すると、画像を操作して処理アルゴリズムを処理するための時間を費やすことができます。

私は何をしたいのです:

  1. は、カメラを設定し、(ビデオレートで)画像を得るために、C++プログラムを使用して、
  2. は、Pythonへのデータで
  3. プロセスのデータを渡しますPythonの

私は私は2つのスタンドアロンシステムを持っていることを好むように私はPythonのものにせずにカメラを使用することができます(私はC++でPythonやPythonでC++を埋め込むたくない印象で、午前または使用 カメラなしのPythonのもの)。

これまでのところ、パイプ、ソケット、またはマップされたメモリを使用してデータを共有する方法がありましたが、少量のデータや文字列に限定されているようです。しかし、私が見つけることができないのは、これが十分速く、実装しようとするべきことがあるかどうかを示す指標です。私はこれをしたいと思いますか?

これが悪い考えであれば、何が良い選択肢でしょうか? PythonコードをC++に埋め込むか、その逆にする?あるいは、開発時間の節約がプロセス間通信を機能させるための追加的な努力を相殺しないので、Pythonを一括して削除することもできますか?

+0

私が最後にPythonでグラフィックスアルゴリズムを実装したとき(numpyで)、速度が遅すぎてC++に変換しなければなりませんでした。速度の向上は約20倍でした。だからリアルタイムにやりたいのであれば、再考するべきかもしれません。 – rodrigo

+0

私はあなたの意見を見ます。おそらく、ボトルネックは、Pythonでの処理であり、ファイルを転送媒体として使用することは、Pythonでの処理で達成可能なフレームレートに追いつくのに十分高速です。そして、必要な処理ステップが決まったら(私はmatplotlibでカラフルなプロットを作っています)、すべてをC++に移すことについて考えることができます。私は、ディスクからファイルを読み書きするのをスキップし、同じことをメモリから行うことができればと思っていました。 – Daan

答えて

3

リアルタイムビデオ処理に関するPyPyブログにはrecent postがありました。この例では、mplayerを使用してビデオを表示します。これは、C++プログラムとのインターフェイスを取るよりも望ましい場合があります(Webカメラで動作すると仮定した場合)。そうでない場合は、単純な解決策として、2つのアプリケーションのstdout/stdinを接続するだけです。また、ビデオ処理のためにPyPyを見るのもいいでしょう。

+0

ありがとうございます。 mplayerがオプションではないように、カメラのボードパラメータを制御する必要があると仮定しましょう。 stdin/stdoutに関しては、バイナリ形式で動作するのですか、イメージデータをテキストに変換して戻す必要がありますか?転送速度は問題ではありませんか? – Daan

+0

バイナリデータをパイプすることができますが、転送速度は問題ではありません。 – zeekay

2

デバイスに「C++インターフェイス」が搭載されていると言えば、APIを使用してデバイスにリンクして制御できるヘッダーファイル+ DLLが提供されていると仮定します。このような場合、最も速いアプローチは、PythonでこのAPIをラップすることです(Swigや他のC++からPython APIツールを使用して)。これは、データをメモリへのポインタとして直接渡すだけで、プロシージャコールの数が非常に少ないオーバーヘッドを提供します。

Pythonと "結婚"したくない場合は、C++でも自分自身で制御アプリケーションを書くことができますが、私はAPIをPythonに接続する最も速くて便利な方法を上記と考えています。

+0

C++の制御アプリケーションは既に存在します。それにもかかわらず、私はいくつかのライブラリが(ライブラリとラッピングに使用されている別のコンパイラによって引き起こされている可能性があるので)止まってしまったときに、PythonのAPIラップのLinux実装をWindowsに移植することで、したがって、私は、2つの既存の作業システム(C++とPythonで)を使用して、ラップするのではなく、一緒に演奏する方が簡単かもしれないと考えました。 – Daan

関連する問題