なるように、なる

徒然なつぶやき、備忘録です。

えっと、、、

Kinectに手を出しました(*´ω`*)

f:id:Shampagne:20170720054811j:plain

雑な感想・・・

  • 大きい。RealSenseが驚異的に小さく感じる。
  • 機能は豊富。
  • ライブラリの使い方がとても似ている。
    (RealSense使っていたら、なんなく使えた)

Kinectに手を出したのは、RealSenseを使っていて、背景のセグメンテーションするのが大変だったのと、vvvvのプラグインがすでに用意されてたから。つまり、今後の開発に必要なものが用意されてたから。

やっぱり世の中的にはまだKinectのほうが色々と充実している感はある。

ただ、RealSenseの小ささと、近距離(0.2m~)測位は、アプリケーションの広がりを期待ができるように思う。そう考えていると、スマホに3Dセンサが載るまでにいろいろと準備しているといいかも。あまり時間なさそうですが。

Tangoが載ったスマホLenovoが出したし、iPhone8にも載りそうと噂されているし、この時流に乗っていけるように、がんばろ。

 

セグメンテーション

R200はセグメンテーション機能が使えないので、depthを使って自分で実装することにしました。

自力でセグメンテーション

  1. カラー画像とDepth画像を取得する
  2. Depth画像をカラー座標系に座標変換する
  3. パーソントラッキング機能で、カラー画像から人物の中心位置を取得する
  4. 人物の中心位置のdepthをもとに、前後50cm以外の箇所をカラー画像から取り除く

f:id:Shampagne:20170622060833p:plain

ざっくりですが、こんな感じになりました。
エッジ部分があらい、ブロブの内部も除去されてる、遅い。このあたりを改善したいです。

座標変換

カラー画像とDepth画像はカメラの位置がずれてるので、併せて使う場合は座標変換をする必要があります。今回はDepth画像の座標系をカラー画像に変換しました。
座標変換用のクラス「PXCProjection」を使います。
使い方は、こちらのサイトが参考になりました。
あと、RSDKのサンプルにある「Projection」も参考になります。

開発しますとどん

マラソンやらマストドンやらで、全く進捗のあがらない一週間でした。

これはいけない。心機一転、今日から作業再開します。

そのために、直近の「やること」と「やらないこと」を決めた。

もちろん、重要なのは「やらないこと」のほうだ。

時間は有限。大切にしなきゃですね。

小田原から大手町まで走った

HOTHOT2017

小田原から大手町まで走る大会に参加しました。

4月の上旬にふくらはぎを痛めたため、4月まつに15キロくらい走った以外はまったく練習せず、ぶっつけ本番で初ウルトラでした。

制限時間が緩かったので、完走できればいいや、という思いでしたが、それが功を奏して、無事にゴールまで完踏できました(がんばりすぎるとへばっちゃうからね)。

途中はほとんど歩きながらマストドンしてるだけの区間もあったけど、マストドンなかったら走るのやめてたようなような気もします。二コってくれてた人、ありがと。

 

数字の記録

走行距離:87km

走行時間:13時間46分48秒

体重:+0.3kg (翌日調べ)

体脂肪率:-3.5% (翌日調べ)

TOOT:36

 

使えるだけ使う

R200で使える機能を動かしてみたよ。
RSSDKのサンプルコードとドキュメント見ながら実装してみました。

Face
ちゃんと認識してくれていますね。
詰まったのは、「PXCFaceConfiguration::SetTrackingMode()」がエラーになること。「FACE_MODE_COLOR_PLUS_DEPTH」か「FACE_MODE_COLOR」が設定できるはずなんだけど、どちらを指定してもエラーになる。結局スキップしてるんですが、設定しなくても認識してくれています。

f:id:Shampagne:20170601230132p:plain

長男のハルキチに協力してもらいました。

PersonTracking
こちらもばっちりでした。
ただ、残念ながら「QuerySkeletonJoints()」で取得できると思っていた関節位置は、joints num =0となってしまい、R200では取れないようでした。
関節位置は欲しいので、今後OpenPoseを使ってみようと思います。

f:id:Shampagne:20170601230152p:plain



Blob
これは妻(顔出しNG)に手を広げもらっている様子です。
まぁ輪郭は取れているんですが、RSSDKのサンプルと比べると、いまいち精度が悪い。パラメータの調整が必要なのかもしれません。

f:id:Shampagne:20170601230210p:plain


3つの機能を動かしてみましたが、いずれの機能もAPIの呼び方はほぼ一緒なので、すぐに実装できます。「ほぼ」ってところが、若干残念で、「そこ関数名合わせようよ!」みたいのもありましたが。

次は背景の除去です。

どうしようかな~~

 

R200で使える機能

次は手指、、、

参考書に沿ってR200の機能確認を進める予定でした。
次は手・指の予定でした。

ある程度予想はしていたのですが、フロントカメラで動作する機能がR200では使えないものが多くあるようです。手・指の検出機能も、PXCSenseManager::EnableHand()のあとにPXCSenseManager::Init()を実行するとエラーが発生してしまいます。

 

全部試してみる

なら、どの機能が使えるのか、EnableXxx()を全部実行してみました。
結果はこちら。

Enable3DScan() ... Success.
Enable3DSeg() ... Failed.
EnableBlob() ... Success.
EnableEnhancedVideo() ... Success.
EnableFace() ... Success.
EnableHand() ... Failed.
EnableHandCursor() ... Failed.
EnableObjectRecognition() ... Success.
EnablePersonTracking() ... Success.
EnableScenePerception() ... Success.
EnableTouchlessController() ... Failed.
EnableTracker() ... Failed.

 

さて、

ということで、参考書に沿って進める計画は頓挫。
元々の目的に立ち戻って考えると、顔認識(Face)と人物認識(PersonTracking)あたりを深堀りしていくのが良さそう。
顔・体・手を認識する、背景を除去した動画像を作る、これをさっさとやる。