はじめに
flyCapture SDKはPoint Grey製のCCDカメラ用のSDKです.
公式にwindows,linuxをサポートしており,言語としてはC/C++/C#をサポートしているようです.今回は個人的な好みからC++を使いたくなかったのでC++以外の言語での環境構築を目指しました.
結果から先に書きますと,C#は1時間ほど格闘して諦めました.pythonは非公式のライブラリを使うことでubuntu上では動作させることができました.以下環境構築の備忘録です.
環境
- パソコン (windows 10 64bit)
- ubuntu 14.04 on VMWare
- visual studio 2015
- python 2.7
- Flea2カメラ(IEEE1394接続)
- Flea3カメラ(usb3.0接続)
今回はwindowsのパソコンにカメラを接続しています.ubuntuに関しては,IEEE1394カードの関係上,別のPCを使えなかったのでVMWare上に用意しました.**が,VMWareではIEEE1394接続のカメラを扱えません.**ということで,最終的にFlea3のカメラを使いました(それなら別のubuntuPCを使えばよかったわけですが,結果的にVMWare上のubuntuでも扱うことができまました.)
失敗した方法
以下失敗した方法です.コメントをいただけると嬉しいです.
Cしゃーぷ
SDK公式にサポートされているはずなので簡単に扱えると思ったのですが,うまくいきませんでした.
導入自体は.exeを落としてきてインストールします.問題はどのDLLを参照に追加すればうまくいくのかが分からなかったという点にあります.
FlyCapture2Managed_v140.dll
を追加するとサンプルコードのビルド自体はできましたが,実行すると「依存関係にあるdllが読み込めない」的な???エラーが出ます.いろいろPATHに追加してみたり参照に追加してみたりしましたが,諦めました.どうも"FlyCapture C#"で調べてもあまりドキュメントが出てきません.素直にC++で書けってか??
ただしC#は絶対うまくいくはずです.なぜなら公式にサポートされているはずなので.
誰か教えてください...
python on Windows
順番的にはubuntuで成功してからwindowsでも動かそうとしました.この時「まぁubuntuで動いたしいいか」と思っていたのは事実です()
まず,SDKは公式にはpythonをサポートしていません.そこで公開されている非公式のラッパーライブラリを使わせていだたくことにしました.ライブラリはいくつか(後述)ありますが,windowsで動きそうだったのはpyFly2
です.理由はsetup.py
にwindows用の記述があったからです.
ということでREADME通りに導入していきましたが,error: Unable to find vcvarsall.bat
というエラーに引っかかりました.これ自体はflyCaptureとは関係なく,コンパイルが必要なライブラリで出るエラーです.ということでVC++ 9.0
を入れたりいろいろ試しましたが,ValueError: [u’path’]
というエラーのところまでいって諦めました.この問題は調べればたくさん出てくるので頑張れば解決できそうですが,コンパイルできてもライブラリが動くかどうかはもう1ステップ先の問題なのでここに時間を割くのは無駄である(と自分に言い聞かせました).
python on Ubuntu(成功した方法)
私が採用した方法です.ubuntu上にpython用ラッパーライブラリを導入しました.まだ,サンプルを走らせたり/読んだりしただけですが扱いやすそうです.
ラッパーライブラリ
"python flyCapture"でググるとすぐに以下の2つのライブラリが見つかります.
pyflycapture2を先に試したのですが,サンプルコードの,カメラの設定を転送するところ?でエラーが出ました.よく分からなかったのですが,pyfly2がうまく動いたのでとりあえずこちらを使わせていただくことにしました.
導入手順
SDKの導入
基本的に導入手順に従っていけば簡単です.注意点としては以下の記述です.
For specific details about using FlyCapture and Linux with a USB 3.0 camera, see TAN2012007 Using Linux with USB 3.0.
USBのバッファサイズ?を2MBから1000MBに変更するように書いてありますが,これをやらないで一定の解像度(転送データサイズ)を超える設定でキャプチャしようとするとプログラムが異常終了してしまいます.私はこれに気づかずに苦労しました(ページの一番最初に書いてありましたが...)
おそらくIEEE1394のカメラなら問題ないのだと思います(が,上記の事情で試していません)
$ flycap
でちゃんとキャプチャできれば成功です.ちなみにVMWareでマウント(?)したUSBデバイスでもちゃんとキャプチャできました.
pyfly2の導入
ubuntuでの導入はgitでクローンしてREADME通りにやれば動きました.
ちなみにsetup.py
に記述するSDKのpathは,普通に入れていれば修正不要なようです.また,DLLのコピーは意味があった?やらなくても動いていたような・・・?
おわりに
pyfly2のサンプルを少し読んでみましたが,example_opencv_integration.py
がドンピシャで欲しいやつって感じです.numpyで取得できればあとは何でもやり放題です.あとは設定の変更や同期等の方法が問題です.pyfly2がAPIをどの程度ラッピングしているのか(C APIを全部ラッピングしている??),気になるところですが...
[追記]実際に使ってみて
gain等のパラメータの設定は可能でしたが,解像度(とおそらくフレームレート)の設定には問題があります.enum型で指定するのですが,最大解像度が_1600x1200Y16
です.今使用しているのはflea3シリーズのカメラで最大解像度が2000x2000
以上ありますので,指定することができません.数値で直接指定できるようなメソッドがあればいいのですが...
おそらくラッパー開発時のSDKのバージョンが古いだけでちょっと変更すれば対応できる気もするのですがそこを頑張る気力は...まぁ解像度を動的に変更する必要がある場面はあまりないと思うので公式サンプルのアプリケーションから変更すればよいかなと.