わけがあり、Intel Perceputual Computing SDK (PERC SDK)を触ることになったが、情報がいまひとつ少ない。depth imageがほしいだけなので、PERCとOpenCVのブリッジを作成し、OpenCVで処理することとした。
depthイメージの取得方法をどうするか考えていたがintelにサンプルと説明のページがあったので、それをベースにすることにした。ページの最後にソースがあるので取得する。
環境さえできていればそのまま動かすことができるはずだが、初期化ではまってしまった。
原因は、カメラをPCのUSB1.0の口ににさしていたためであり、2.0の口に変えることで無事動作した。
BackgroundMaskCleanerは、depth画像にノイズが多い場合にノイズを減らすものである。
中の処理は、MorphologyExを使用してopenとcloseを行っている。
なぜかcで記述しているので自分で書き直したほうがよいだろう。
原理は、説明のページに書かれているが、急いでいるのでBlackBoxとして使用するつもりだが、速度に関しては30fpsに届かないので、速度面でCaptureStreamの中身を調べてみる。
CaptureStreamを自分のプログラムに組み込めば距離情報でマスクされたカラー画像を得ることができる。これでようやくめどがついた。
OpenCV、機械学習、はやりのDeep learningの環境構築の方法、サンプルの動かし方、APIの使い方、Tipsなどをすぐに忘れてしまうので、備忘録として記録している。記憶がなくなるスピードが、早いのでメモしておかないと再現できなくなる確率が高まっている。 最近、再度HDDを飛ばしてしまい、過去の自分のページに再度助けられた。 また、DNNモジュールを触る機会が増えているので、C++からPyhonへと鞍替え中。 内容を気にいっていただければ、twitterで紹介願います。
2013年9月21日土曜日
2013年9月13日金曜日
PERC to OpenCV その2
一月ほど開いてしまったが、締め切りが迫ってしまい、少しお尻に火がつき始めた。
わけがあり、Intel Perceputual Computing SDK (PERC SDK)を触ることになったが、情報がいまひとつ少ない。depth imageがほしいだけなので、PERCとOpenCVのブリッジを作成し、OpenCVで処理することとした。
PERCでは、MatにあたるクラスがPXCImageとなる
ようやくRGBの変換方法がわかった。エラー処理は抜いている。
UtilPipeline pp;
PXCImage* pImage;
PXCImage::ImageData imageData;
cv::Mat matRGB = cv::Mat(cv::Size(640, 480), CV_8UC3);
pp.EnableImage(PXCImage::COLOR_FORMAT_RGB24, 640, 480);
pp.Init();
pp.AcquireFrame(true);
if (pImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::COLOR_FORMAT_RGB24, &imageData) >= PXC_STATUS_NO_ERROR)
{
memcpy(matRGB.data, (uchar*)imageData.planes[0], 640*480*3*sizeof(uchar));
}
pp.ReleaseFrame();
これで、matRGBにカラーデータが格納される
複数からアクセスされることを想定しているため、イメージのリソースにアクセスする前に、調停を行い、アクセス権を取得しなければいけない。また、アクセス権は、短時間で開放しないといけないので、1フレーム毎に、アクセス権が必要となる。
少しめんどくさいし、アクセス権取得のオーバヘッドはどれくらいなのだろうか?
また、他のアプリは想定していないので、アクセス権が取れない場合を想定していないが、まじめに考えるとエラー処理が必要となる。
わけがあり、Intel Perceputual Computing SDK (PERC SDK)を触ることになったが、情報がいまひとつ少ない。depth imageがほしいだけなので、PERCとOpenCVのブリッジを作成し、OpenCVで処理することとした。
PERCでは、MatにあたるクラスがPXCImageとなる
ようやくRGBの変換方法がわかった。エラー処理は抜いている。
UtilPipeline pp;
PXCImage* pImage;
PXCImage::ImageData imageData;
cv::Mat matRGB = cv::Mat(cv::Size(640, 480), CV_8UC3);
pp.EnableImage(PXCImage::COLOR_FORMAT_RGB24, 640, 480);
pp.Init();
pp.AcquireFrame(true);
if (pImage->AcquireAccess(PXCImage::ACCESS_READ, PXCImage::COLOR_FORMAT_RGB24, &imageData) >= PXC_STATUS_NO_ERROR)
{
memcpy(matRGB.data, (uchar*)imageData.planes[0], 640*480*3*sizeof(uchar));
}
pp.ReleaseFrame();
これで、matRGBにカラーデータが格納される
複数からアクセスされることを想定しているため、イメージのリソースにアクセスする前に、調停を行い、アクセス権を取得しなければいけない。また、アクセス権は、短時間で開放しないといけないので、1フレーム毎に、アクセス権が必要となる。
少しめんどくさいし、アクセス権取得のオーバヘッドはどれくらいなのだろうか?
また、他のアプリは想定していないので、アクセス権が取れない場合を想定していないが、まじめに考えるとエラー処理が必要となる。
登録:
投稿 (Atom)