Deep Tech. Blog

ガジェットや技術についての紹介や自身のメモとして記事を書いていくブログ

【Looking Glass Portrait】Looking Glass Portraitが届いたので開封

Looking Glass Portrait

昨年Kickstarterで支援したLooking Glass PortraitプロジェクトからリワードとしてLooking Glass Portraitが1台届いたので開封して初期動作確認をしておこうと思います. Looking Glass Portraitの詳細は下記のkickstarterのページから確認することができます. 以前から8.9インチ版のLooking Glassは持っていたのですが,PC等のデバイスが必須でスタンドアロンでの動作ができず普段使いはなかなかできていませんでした. その点Looking Glass Portraitはラズパイ4を内蔵していて,スタンドアロン動作が可能と言うことで3D写真・ビデオを部屋に飾りたいということで支援してみました.

kickstarter Looking Glass Portrait:https://www.kickstarter.com/projects/lookingglass/looking-glass-portrait?lang=ja

開封

早速開封ですが,下の写真が製品の外箱になります. FedExからこの外箱が更に段ボールで保護された状態で届きました.

f:id:deep_tech:20210514100847j:plain
外箱

外箱の蓋を開けるとLooking Glass Factoryのロゴと挨拶が見えました.

f:id:deep_tech:20210514100853j:plain
蓋を開けた状態

一番上に合ったのはキャリングケースに入ったLooking Glass Portraitでした. このケースはオプションだった気がするので,オプションでケースを選んでいなかったらLooking Glass Portraitが直接置かれていたのかも知れません.

f:id:deep_tech:20210514100858j:plain
ケース

下の写真がこちらがパッケージ一式です. 説明書的なものと,HDMIケーブル,USB-Cケーブル,USB-Cアダプタ,ロゴシールが入っていました.

f:id:deep_tech:20210514100904j:plain
パッケージ一式

説明書はシンプルで内側にStandaloneモードでの利用方法,外側にDesktop mode)での利用方法の記載がありました.

f:id:deep_tech:20210514100909j:plain
説明書(Standalone)
f:id:deep_tech:20210514100915j:plain
説明書(Desktop)

キャリングケースを開けるとLooking Glass Portraitが姿を現しました.

f:id:deep_tech:20210514100920j:plain
ケース内の製品

更に保護ラップを剥がすと下のような感じです. Looking Glass Portraitの内側は全面的に鏡面になっていて,周辺がよく映り込みます. ぱっと見だと前面にカバーガラスでもあるかのように見えたのですが,そういったカバーガラスはなく,内側は触れることができます.

f:id:deep_tech:20210514100927j:plain
Looking Glass Portrait 保護ラップ除去

本体裏側に本体を立てておくためのプレートが装着されていて,それを本体底面に装着することで本体を立たせることができます. USBケーブル・アダプタは同梱されていましたが,直ぐ近くにあったUSB-Cケーブルで接続した様子が下図になります.

f:id:deep_tech:20210514100950j:plain
USBケーブル接続

本体横の電源ボタンを押すとLooking Glass Factoryのロゴを表示されて起動したことが分かります. また,本体前面の縁がLEDで光るようになっているので,この光でも電源状態が分かります. この縁のLEDはON/OFF可能なようです. 画面上の白い点はゴミです.エアダスターなどで飛ばして除去ました.

f:id:deep_tech:20210514101021j:plain
本体起動

本体が起動したら標準で本体に入っているサンプルコンテンツが再生されます. 視差が分かり易いサンプルを表示した様子が下図になります. 静止画だけでなく動画もサンプルとして収録されていました. 8.9インチ版と主観的にはほぼ同等の画質かなと言う気はします.スクリーンドアっぽいジャギジャギした効果はやはり見えます.

f:id:deep_tech:20210514101027j:plain
サンプル例1-1
f:id:deep_tech:20210514101035j:plain
サンプル1-2
f:id:deep_tech:20210514101042j:plain
サンプル2-1
f:id:deep_tech:20210514101049j:plain
サンプル2-2

まとめ

支援していたLooking Glass Portraitが届いたので開封して,初期動作確認を行ないました. 折角iPhoneを持っているので,自前のコンテンツなども表示できるか試しておこうと思います.

【WH-1000XM4】BluetoothドングルでPCの音声をWH-1000XM4で聴く

Bluetoothドングルはまともにつかえるのか?

前回の記事でShanling M0とPCを接続することで,各種コーデックでPCの音声をWH-1000XM4で聴くことができるようになったのですが,残念ながらビデオを視聴する際には音声の遅延が気になってしまうという結果でした.

BluetoothドングルをPCに接続すればSBCでWH-1000XM4に音声を送ることができることは分かっているものの,昔からBluetoothドングルはBluetoothスタックがどーのとかでまともに動かなかったりしていたので,いまいち使う気になりませんでした.ところが,Amazonで検索してみるとBluetooth 5.0対応のドングルが1000円程度で買えるということが分かりました.これくらいなら使えなくても許せるなと言うことで実際に買ってWH-1000XM4との音声通信を試してみました.

私が購入したのは下のリンクにある,ZAPOOSブランドの「Bluetoothアダプタ 5.0 ~」というもので安くて評価も多かったので選びました.

開封

  1. パッケージ

    この手のパッケージは開けにくいのが定番ですが,不安になるくらい簡単に開きます.

    f:id:deep_tech:20200911005652j:plain
    パッケージ

  2. 内容物一式

    ドライバが入ったCDと簡単な説明書が入っていました.

    f:id:deep_tech:20200911005758j:plain
    内容物一式

設定

  1. 付属のドライバCDからBluetoothドングルのドライバをインストール
  2. Bluetoothドングルを接続しろと言われるので接続して待っているとインストール完了
  3. スマホの「Headphone connect」アプリからWH-1000XM4を接続可能状態に変更
  4. 設定からWH-1000XM4とのペアリング
  5. PCのオーディオ出力先をWH-1000XM4に変更

所感

音質

昔のSBCの音質を体験している身からすると余り期待していなかったのですが,AACと差は感じられませんでした.DSEE ExtremeのON/OFFである程度が違いが感じられるので,DSEEが良い感じにしているという気もします.

ちょっと調べてみると,SBCの音質が悪くないと言うことは調査されているようです.

下記は参考URLです.

遅延

Youtube等のビデオを視聴しても遅延は気になりません.もちろん僅かにはあるのですが,気にならない程度です.

安定性

まだ数時間しか使っていませんが,特にBluetoothドングルとWH-1000XM4との通信が不安定と言うこともなく使えています.Bluetoothも長い年月を経て安定したと言うことでしょうか.

まとめ

予想以上にBluetoothドングルが安定して動作して,WH-1000XM4で音声を聴く分にも音質・遅延ともに問題無いレベルだったため,Shanling M0を折角買ったのはなんだったんだという気分になりました.

1000円程度で快適なPCオーディオ環境を手に入れることができて良い買い物だったと感じました.

【WH-1000XM4】Shanling M0でPCの音声をWH-1000XM4で聴く

PCの音声をWH-1000XM4で聴く

先日の記事で書いたようにこれまでCAS-1というスピーカーを使ってiPhoneからの音楽を聴いたり,PCとCAS-1をUSB接続してPCからの音声を再生したりしていました.周りにノイズ発生源がない状況ではCAS-1の方が音が良いと判断しているのですが,ダイソンのファンヒーターなどを使った環境ではうるさいので,WH-1000XM4でノイズを消しつつ,PCで作業ができたりすると良いのではないかと思った次第です.

PCはマイクロタワータイプのもので,Bluetoothドングルは付いていません.Bluetoothドングルを追加すればSBCやaptX等で聴けるとは思いますが,これまでBluetoothドングルが安定して動作した経験がないため据え置き型のPCとヘッドホンなどのワイヤレス機器で音声を聴かない方針にしています.では,どのようにしてPCの音声をWH-1000XM4で再生するかというと,今回購入したShanling M0がそれを可能にしてくれます.

Shanling M0は一見すると普通のメディアプレイヤーなのですが,他に(あまり)ない機能として,USB DACとして利用しつつ,音声をBluetoothでワイヤレス機器に送信可能という機能が搭載されています.今回はその機能でPCの音声をWH-1000XM4で再生することを試みます.

Shanling M0:SHANLING M0 - 伊藤屋国際

開封

  1. 外箱

    こんな感じで商品が届きました.私が購入したのは本体とケースのセットです.

    f:id:deep_tech:20200906225531j:plain
    外箱

  2. パッケージ

    本体用パッケージとケース用のパッケージの2つが入っていました.

    f:id:deep_tech:20200906225642j:plain
    パッケージ

  3. 内容物

    購入価格は13,000円程度でしたが,結構綺麗なパッケージで嬉しいですね.

    f:id:deep_tech:20200906225753j:plain
    内容物

  4. 本体確認

    小さくていいですね.触ると金属っぽい冷たさが気持ちよいです.質感も悪くないですね.

    f:id:deep_tech:20200906230050j:plain
    本体前面

    本体下部にはUSB-C端子とステレオピンジャックがあります.

    f:id:deep_tech:20200906230114j:plain
    本体下部

    側面のダイヤルは音声調整と電源ボタンを兼ねています.

    f:id:deep_tech:20200906230139j:plain
    本体側面(電源ボタン)

設定

まずはShanling M0とWH-1000XM4をペアリングします.

  1. ホーム画面を右にスワイプ

    f:id:deep_tech:20200906230548j:plain
    ホーム画面

  2. システム設定を選択

    f:id:deep_tech:20200906230648j:plain
    システム設定

  3. Bluetooth設定

    f:id:deep_tech:20200906230714j:plain
    Bluetooth設定

  4. バイスの検索でWH-1000XM4を指定

    予めWH-1000XM4をペアリング可能な状態にしておく必要があります.Shanling M0はLDACでの音声送信も可能ですが,WH-1000XM4の2台同時接続を試すためにここではAACでの接続を行なっています.

    f:id:deep_tech:20200906230758j:plain
    バイスの検索

  5. ペアリングの確認

    ペアリングが成功したらBluetooth設定画面にWH-1000XM4が表示されます.

    f:id:deep_tech:20200906231017j:plain
    ペアリング済み

動作確認

上記手順でShanling M0の音声をWH-1000XM4でワイヤレスで聴くことが可能になりました.では,いよいよShanling M0をPCに接続してUSB DACとして動作させます.

PCにShanling M0を接続すると下の写真のようにDACで動作していることが分かります.USB DACとして動作させるには,PC側に公式サイトで配布されているUSBドライバが必要になりますので,予めダウンロード&インストールを行なっておきましょう.Shanling M0側でもUSBモードを変更する必要がありますので御注意を.

f:id:deep_tech:20200906231202j:plain
USB DACとして動作

結果としては,PCの音声はWH-1000XM4で聴くことができるようになったのですが,問題も判明しました.

音声の遅延が明確に認識出来る程度発生

Youtubeやその他のビデオを見るとリップシンクが出来ていないのが明確です.音楽を聴く分にはLDACの高音質での再生も可能ですし,AACで2台同時接続も可能でした.それだけに,ちょっとビデオを見るのはきつい感じがします.遅延の程度としては初代AirPodsを僅かに遅くしたくらいの遅延です.この遅延はLDACでもAACでも変わらなかったため,現状手のうちようがありません.また,iPhoneとWH-1000XM4を接続してビデオを見ても大きな遅延は感じないため,Shanling M0起因の遅延だと思います.

まとめ

PCとShanling M0をUSB DACとして,Shanling M0とWH-1000XM4をワイヤレスで接続することで快適なPC作業環境の構築を目指しましたが,予想外の音声遅延によってビデオを見るにはちょっと厳しいという結果になりました.PCの音楽を聴いたりする程度であれば特に問題無いため,全く使えないというわけではありません.もしかしたら,Shanlingシリーズの別モデルであればこのあたりの遅延が少なかったりするかも知れませんので,機会を見て試してみようと思います.

【WH-1000XM4】イヤーパッドカバー EarTouch multi Ver.1.1をWH-1000XM4に装着

大事に使いたいからイヤーパッドカバー

前回の記事に続いてWH-1000XM4についての記事になります.しばらくWH-1000XM4を装着していて,やはりこの時期にヘッドホンは蒸れて汗がイヤーパッドに付いたりして,長く使っていくには製品に優しくないと思ったわけです.そこで急遽WH-1000XM4に合うイヤーバッドカバーを購入することにしました.

いくつかWH-1000XM4に利用できそうな製品がAmazonで見つかりましたが,その中でも良さそうだと思ったのが,今回購入したEarTouch multi M55 Ver.1.1 (WHITE)です.約4,000円ということで安くはありませんが,ヘッドホンと耳との接点だけをカバーしてくれる点が気に入りました.他の製品だとドライバーユニットからの音までカバーされてしまうような構造になっていて,音質に影響しそうだと思いました.また,ヘッドホン内部のセンサが正常に動作するか怪しかったというのもあります.

公式サイト:EarTouch は「新しいカタチ」のヘッドホンカバー

EarTouch multi M55 ver1.1 (GLAY)

EarTouch multi M55 ver1.1 (GLAY)

  • メディア: エレクトロニクス

開封・装着

  1. パッケージ

    デスクが反射してなんとなくゴチャゴチャしていますが,パッケージ自体はシンプルな白で好印象です.

    f:id:deep_tech:20200906175307j:plain
    パッケージ

  2. パッケージ一式

    同梱物は説明書への案内と,イヤーパッドカバー左右が1つずつ入っていました.公式サイトのWHITEの写真をみると若干ベージュっぽいのかなと思ったのですが,思ったり白かったです.どちらかというとAmazonに掲載してある写真の方が色としては近そうです.

    f:id:deep_tech:20200906175443j:plain
    パッケージ一式

  3. 装着

    Webの説明書にアクセスすると装着方法の記載や動画があり,どのように装着すれば良いのか分かるようになっていました.難しいことは特になく,ヘッドホン内部に輪っかを入れて,イヤーパッドを包むようにカバーを付ける感じです.下の写真はWH-1000XM4とイヤーパッドカバーの色が大きく違うように見えますが,実際見るとそこまで差はないです.

    f:id:deep_tech:20200906175926j:plain
    EarTouch装着例
    f:id:deep_tech:20200906180007j:plain
    WH-1000XM4との色の差

使用感

イヤーパッドカバーを装着した状態でしばらく使用しましたが,カバーの生地がさらさらしているので装着感は良好です.汗もかいたはずですが,べたつくこともなく利用できています.カバーが白なので汚れたら分かり易くて,すぐ選択する気になって良いかなと思います.

音質への影響,着脱センサ等への影響は全く感じされませんでした.

気になることと言えば,汗はかいているはずなのでその汗がWH-1000XM4のイヤーバッドにどんな影響を与えているのかというところでしょうか.できるだけEarTouchの方を頻度高く選択しておけば問題無いかもしれませんが,カバーの下で腐食していたということがなければ良いなと思います.

まとめ

WH-1000XM4を長く使っていくためにイヤーパッドカバーのEarTouch multi Ver.1.1を購入しました.装着感は良好で,音質・センサへの影響も無さそうで,安くはありませんでしたが,買って良かったと思える商品でした.

【WH-1000XM4】待ちに待ったWH-1000XM4が届いたのでレビュー

待ちに待ったWH-1000XM4

2020年8月7日に発表されたWH-1000XM4が本日ようやく発売になりました! 前モデルのWH-1000XM3の評判が良いこともあり,前々から,1年くらい前からかWH-1000Xシリーズの新しいのが発売されたら直ぐに買おうと思っていました.結局1年程度待たされてしまいましたが,ようやく手にできました.

普段はヘッドホンを使っていなくて,CAS-1というすでにディスコンになってしまったスピーカーで音楽を聴いたりしています.それでもノイキャンヘッドホンが欲しいなと思ったのは,

  • 勉強などで作業に集中するために強力なノイズキャンセリングを求めた
  • WF-1000Xシリーズだと長時間かけ続けると耳が痛くなってしまう

という点が大きく影響しています.夏になってダイソンの空気清浄機付きファンヒーターを買ったのですが,思いの外ノイズが大きく時々キーンという高周波音が聞こえてきてイライラするということがあり,これでそれが解消されるのではないかと期待しています.

届いたばかりなので,機材の写真や初期設定画面,ファーストインプレッションをログとして残しておこうと思います.

公式サイト WH-1000XM4 | ヘッドホン | ソニー

WH-1000XM4 開封

  1. 外箱

    ソニーのよくある外箱という感じがします.見ての通り私はプラチナシルバーを購入しました.

    f:id:deep_tech:20200904134400p:plain
    外箱表
    f:id:deep_tech:20200904134924p:plain
    外箱裏

  2. 内箱

    内箱を取り出すとユーザが迷子にならないように趙簡易手順が書かれています.小さな事ですがこういう気遣いは好きです.

    f:id:deep_tech:20200904134753p:plain
    内箱

  3. パッケージ一式

    パッケージ一式は下の写真のような感じです.説明書・製品のサポート登録の案内が紙で入っており,ヘッドホンケースの中にWH-1000XM4本体・USB type-Cケーブル・オーディオケーブルが入っていました.ケース付きなのは有り難いですね.

    f:id:deep_tech:20200904135042p:plain
    パッケージ一式

  4. ヘッドホン内部に追加されたセンサー

    ヘッドホンの着脱を検知するためのセンサが前モデルとの差として追加されています.WF-1000Xシリーズだと当たり前だったので,同様に使えるのは嬉しいですね.

    f:id:deep_tech:20200904135547p:plain
    着脱センサ

  5. 改良されたイヤーパッド

    長時間のかけ心地を左右するイヤーパッドは改良されたようで頭部への圧力を上手く分散してくれるそうです.実際どのくらい快適かは時間をかけて利用しないとまだなんとも言えません.

    f:id:deep_tech:20200904135905p:plain
    柔らかいイヤーパッド

  6. マットなデザイン

    前モデルのWH-1000XM3は持っていないのですが,本モデルとの違いとして金属的な光沢があった部分がマットな仕上がりに変更されているようです.落ち着いた感じで良いんじゃないでしょうか.掛けていたら見えないので私はどちらでも構いませんが.

    f:id:deep_tech:20200904140227p:plain
    マットな仕上がり

初期設定

  1. iPhoneとWH-1000XM4をペアリング後,フォームウェアアップデート

    iPhoneとWH-1000XM4をペアリングした後,「Headphones Connect」アプリを起動するといきなりファームウェアのダウンロードが開始されました.

    f:id:deep_tech:20200904140538p:plain
    ファームウェアダウンロード中

    ダウンロードしているファームウェアのバージョンは2.0.6で2台の機器を同時接続した場合の問題とその他の機能が改善されたようです.

    f:id:deep_tech:20200904140746p:plain
    ファームウェアの改善内容

    ファームウェアのダウンロード完了後,指示に従って進めると数分後にファームウェアのアップデートが完了しました.

    f:id:deep_tech:20200904140905p:plain
    ファームウェアバージョン

  2. 初期設定確認

    初期設定画面は以下の通り.

    f:id:deep_tech:20200904141022p:plain
    サウンド(1/2)
    f:id:deep_tech:20200904141103p:plain
    サウンド(2/2)
    f:id:deep_tech:20200904141155p:plain
    システム(1/2)
    f:id:deep_tech:20200904141222p:plain
    システム(2/2)

    2台同時接続の設定がデフォルトでOFFになっていることには注意が必要かも知れませんね.アプリの設定から2台目の接続設定を行なうことで同時接続できるようになるようです.

ファーストインプレッション

1時間程度使用してのファーストインプレッションです.まだ使用時間が短い状態での印象と言うことで数日経てば評価が変わると言うことはありえるかなと思います.

装着感

耳がすっぽりカップに入る形で,イヤーパッドも全く痛くなく,そして,重くなく,長時間の使用に耐えるのでないかと期待させてくれます.イヤホンだと違和感とか痛みとかでどの程度我慢できそうかなんとなく分かりますが,ヘッドホンは実際やってみないと分かりませんね.特に装着感は今後の使用状況で評価しないといけないですね.正直ヘッドホンの使用経験があまり多くないので,こういうモノだと言われれば受け入れてしまえる感じです.兎に角不快感はゼロでした.

ノイズキャンセリング

ダイソンのファンヒーターについては,音楽を再生しない状態で,1m離れた距離かつ風量5程度だとよーく耳を澄ませればファンヒーターからの音だと分かるといった感じです.音楽を再生していたら全く分かりません.最大風量10だと音声を再生しなければファンの音は分かりますが,うるさくない程度にはなっています.こちらも音楽を再生していれば気にならないです.

エアコン・ダイソンのファンヒーターの音がCAS-1で音楽を聴いているとどうしても入ってきてしまいますが,WH-1000XM4だとほぼ音楽のみに集中できる状態です.

周りに元々人がいるわけではないので,人の話声などWH-1000XM4で強化されたノイズキャンセリングが試せているわけではないので,今後使用している中で効果を体験することもあるかも知れません.

音質

AAC/DSEE Extemeでの視聴ですが,ソニーらしい音というかなにか尖ったものは特にないという印象です.よく言えばフラットでどんなジャンルでも問題無さそうというか,アプリにイコライザーがあるので好みに合わせることもできますしね.

比べる物でもない気がしますが,静かな空間でCAS-1で音楽を聴いた場合と比較すると,音の定位感は輪郭など基本的にCAS-1の方がいいと思います.ただ,どの位置にいてもノイズの影響を低減した空間で良い音が聞けるのはWH-1000XM4のメリットですね.CAS-1とWH-1000XM4の付き合い方がどのようになっていくのか楽しみではあります.

まとめ

1年我慢してようやく手に入れたノイズキャンセリングヘッドホンのWH-1000XM4の開封・初期設定・ファーストインプレッションでした. これから長期的に使用していくと不満など出てくるかなとは思いますが,ファーストインプレッションとしては十分買って良かったと思える商品でした.

LDACでの音質やマルチポイント機能,スピーク・トゥ・チャット機能などまだまだ試せていない機能が沢山あるので,印象に残ったことがあればまたログとして残そうと思います.

【PCL】PCLをvcpkgでインストール

PCL

PCLは3D点群処理の定番ライブラリですが、数年前まではとにかくインストールが面倒だったという印象でした。ところが、ここ数年でvcpkgを使って簡単にインストール可能になっていましたので、記録を残しておきます。

前提条件

PCLインストール手順

  1. Visual Studio 2017にEnglish言語パックをインストール

    日本語のみインストールした状態ではvcpkgが動作しないので、Windowsの設定=>アプリ=>Visual Studio Professional 2017 => 変更 から英語の言語パックを追加。すでに追加済みであればスキップ。

  2. vcpkgをクローン/ダウンロード

     # clone by git
     git clone https://github.com/microsoft/vcpkg
     .\vcpkg\bootstrap-vcpkg.bat
    
  3. 環境変数Pathに上記vcpkgクローン/ダウンロード先フォルダを指定

  4. vcpkgでPCLをインストール

    管理者権限でコマンドプロンプトを起動して下記コマンド実行。もしかしたら管理者権限は必要ないかもしれない(未確認)。

     .\vcpkg.exe install pcl:x64-windows-static
     # wait for a few hours
    
  5. Visual Studio にPCLのフォルダを設定

    .\vcpkg.exe integrate install
    

まとめ

これだけでPCLを使った開発が開始できるということで随分簡単になったものだと感心しました。 ただ残念なのは、2020年8月24日現在ではvisualization系の機能が省略されているらしく、点群の可視化を行うようなAPIは利用できないようです。

【Azure Kinect】自分のポーズに合わせてUnity上のキャラクタを動かしたい(直接的Unity連携編)

目次

Azure Kinectで計測したポーズを基にUnity上のキャラクタを動かしたい

夏季休暇の暇つぶしとしてAzure Kinectを購入したので,そのAzure Kinectで自分のポーズを計測し,更にそのポーズを基にUnity上のCGキャラクタを動かしてみようと思います.

※この分野は素人のため書いてあることに間違いが含まれる可能性があります

Azure Kinectでは後述の事前準備に挙げているようなSDKをインストールすることで,デプス画像からBody trackingを行なうサンプルプログラムが利用できます.そのサンプルプログラムを読めばBody tracking APIからのポーズ情報取得方法は分かると思います.
そして,Unity上で計測したポーズ(人体のジョイント情報群)をCGキャラクタに反映させることで目標を実現出来るのではないかという目論みです.

上記を実現するための方法にはざっくり下記の二通りの方法がありそうです.

  • 方法1. Unity内部で直接Body tracking APIを呼び出してポーズを利用する方法
    • メリット
      • 余計な通信処理が必要ない
      • プログラムの構成がシンプル
    • デメリット
      • 取得したポーズに別の処理を行なうためにC++コードにデータを渡す際にオーバーヘッドが発生
  • 方法2. Body tracking APIを呼び出してポーズを取得しUnityに送信するプログラムとUnityでそのポーズを受信して利用する方法
    • メリット
      • ポーズ取得側プログラムで様々な高速処理を実装が容易
    • デメリット
      • プログラムの構成が複雑
      • 通信によるオーバーヘッドが発生

今回やりたいことからすると方法1がシンプルで容易かと思います.別途認識処理等をポーズを基にしたい場合には方法2の方がいいかも知れません.
本記事ではまず方法1で実装してみようと思います.その後,別記事で方法2の実装を行なってみる予定です.

Microsoft Azure Kinect DK

Microsoft Azure Kinect DK

  • メディア: エレクトロニクス

事前準備

MicrosoftのSample Unity Body Tracking Applicationを導入

有り難いことにMicrosoftGithubにUnity内部でAzure KinectのBody tracking APIを呼び出すサンプルプログラムを公開してくれています.

Azure-Kinect-Samples/body-tracking-samples/sample_unity_bodytracking at master · microsoft/Azure-Kinect-Samples · GitHub

まずはこのサンプルプログラムの動作可能な状態にします.

  1. Githubからサンプルプログラムをダウンロード

    こちらサンプルプログラムをダウンロードします.Gitでクローンしてもいいですが,下図のようにZIPをダウンロードしてもいいです.

    f:id:deep_tech:20200812131536p:plain
    Githubからサンプルプログラムをダウンロード

  2. Unityでサンプルプロジェクトを開く

    ダウンロードしたサンプルプログラム中の/Azure-Kinect-Samples/body-tracking-samples/sample_unity_bodytracking/フォルダをUnityプロジェクトとして開く.
    プロジェクトを新しいバージョンにアップグレードする旨のダイアログボックスが表示されたら確認ボタンを押す.
    Asset Database Version Upgradeダイアログボックスが表示されたYesボタンを押す.

    f:id:deep_tech:20200812194322p:plain
    Unity初回起動画面

  3. UnityとVisual Studioの連携設定

    UnityのEditメニュー => Preference => External Script EditorVisual Studioを設定する.

  4. UnityのScriptをVisual Studioで開く

    UnityのProjectパネル中からどれでもいいのでScriptを開く.Visual Studioが起動し,プロジェクトフォルダにVisual StudioのSolutionファイルが生成されたことを確認する.一旦Visual Studioを終了する.

    f:id:deep_tech:20200812194329p:plain
    Visual Studio初回起動画面

  5. Visual StudioのSolutionファイルを開く

    上記手順で生成されたSolutionファイルをVisual Studioで開き,プロジェクトフォルダ内Packageフォルダに各種依存パッケージがあることを確認する.

    f:id:deep_tech:20200812194342p:plain
    Package一覧

  6. プロジェクトフォルダ中のAssets/Pluginsフォルダにパッケージファイルをコピー

    まず,/Azure-Kinect-Samples/body-tracking-samples/sample_unity_bodytracking/Assets/Pluginsフォルダを作成します.
    作成したPluginsフォルダに下記ファイルをコピーします.

    • Packages/Microsoft.Azure.Kinect.BodyTracking.1.0.1/lib/netstandard2.0フォルダ中の下記ファイルをコピー
    • Packages/Microsoft.Azure.Kinect.Sensor.1.3.0/lib/netstandard2.0フォルダ中の下記ファイルをコピー
    • Packages/Microsoft.Azure.Kinect.BodyTracking.Dependencies.0.9.1/lib/native/amd64/releaseフォルダ中の下記ファイルをコピー
      • cublas64_100.dll
      • cudart64_100.dll
      • vcomp140.dll
    • Packages/System.Buffers.4.4.0/lib/netstandard2.0フォルダ中の下記ファイルをコピー
      • System.Buffers.dll
    • Packages/System.Memory.4.5.3/lib/netstandard2.0フォルダ中の下記ファイルをコピー
      • System.Memory.dll
    • Packages/System.Reflection.Emit.Lightweight.4.6.0/lib/netstandard2.0フォルダ中の下記ファイルをコピー
      • System.Reflection.Emit.Lightweight.dll
    • Packages/System.Runtime.CompilerServices.Unsafe.4.5.2/lib/netstandard2.0フォルダ中の下記ファイルをコピー
      • System.Runtime.CompilerServices.Unsafe.dll
    • Packages/Microsoft.Azure.Kinect.Sensor.1.3.0/lib/native/amd64/releaseフォルダ中の下記ファイルをコピー
      • depthengine_2_0.dll
      • k4a.dll
      • k4arecord.dll
    • Packages/Microsoft.Azure.Kinect.BodyTracking.1.0.1/lib/native/amd64/releaseフォルダ中の下記ファイルをコピー
      • k4abt.dll
      • onnxruntime.dll

    f:id:deep_tech:20200812201731p:plain
    Pluginsフォルダ

  7. simple_unity_bodytrackingプロジェクトフォルダ直下にパッケージファイルをコピー /Azure-Kinect-Samples/body-tracking-samples/sample_unity_bodytrackingフォルダに下記のフォルダをコピーします.

    • Packages/Microsoft.Azure.Kinect.BodyTracking.Dependencies.cuDNN.0.9.1/lib/native/amd64/releaseフォルダ中の下記ファイルをコピー
      • cudnn64_7.dll
    • Packages/Microsoft.Azure.Kinect.BodyTracking.Dependencies.0.9.1/lib/native/amd64/releaseフォルダ中の下記ファイルをコピー
      • cublas64_100.dll
      • cudart64_100.dll
    • Packages/Microsoft.Azure.Kinect.BodyTracking.1.0.1/lib/native/amd64/releaseフォルダ中の下記ファイルをコピー
      • onnxruntime.dll
    • Packages/Microsoft.Azure.Kinect.BodyTracking.1.0.1/contentフォルダ中の下記ファイルをコピー
      • dnn_model_2_0.onnx

    f:id:deep_tech:20200812201738p:plain
    simple_unity_bodytrackingフォルダ

  8. Unityにて/Azure-Kinect-Samples/body-tracking-samples/sample_unity_bodytracking/Scenes/Kinect4AzureSampleSceneを開く

    f:id:deep_tech:20200815172645p:plain
    Kinect4AzureSampleSceneを開いた直後

  9. UnityにてPlayボタンでゲーム実行 Playボタンを押して,Azure Kinectの画角内に人物を捕らえると人体ポーズの計測結果をUnity内に可視化することができます.

ここまでの手順でUnity上でAzure Kinectの人体ポーズの計測結果を利用可能な状態になりました.
次は,計測された人体ポーズに合せてCGキャラクタを動作させてみます.

計測した人体ポーズでCGキャラクタを動かす

以下では,上記Sample Applicationの導入によって計測された人体ポーズとCGキャラクタとを結び付けて,自分のポーズに合せてCGキャラクタを動かせるようにします.

  1. CGキャラクタをUnityにインポート

    Unityにて上記手順で利用していた/Azure-Kinect-Samples/body-tracking-samples/sample_unity_bodytracking/プロジェクトを開き,Asset StoreからUnity-Chan!Modelをダウンロード&インポートする.

  2. ユニティちゃんをシーンに追加

    Projectパネル中のAssets/unity-chan!/Unity-chan! Model/Art/Models/unitychan.fbxをHierarchyパネルにドラッグ&ドロップしてユニティちゃんの3Dモデル等一式をシーンに追加する.ここでシーンは保存しておく.

    f:id:deep_tech:20200816190112p:plain
    シーンに追加されたユニティちゃん

  3. ユニティちゃんのリグ設定を確認

    Assets/unity-chan!/Unity-chan! Model/Art/Models/unitychan.fbxを選択し,InspectorパネルのRigタブを選択すると,下図のような画面が表示されます.Animation TypeはHumanoidになっているはずです.このHumanoidタイプで定義されたジョイントとユニティちゃんのモデルがどのように対応しているのかを確認しておきます.

    f:id:deep_tech:20200816185345p:plain
    ユニティちゃんのリグ設定

    Rigタブ中にConfigure...ボタンがあるはずなのでそれを押すと,更に下図のような画面が表示されます.例えばHumanoidタイプのジョイントとして定義されているHips部位には,ユニティちゃんモデル中のCharacter1_Hips Transformationが対応することが分かります.要はこれらのHumanoidタイプのジョイントに計測した人体ポーズのジョイント情報を与えることで,ユニティちゃんを動かせます.

    f:id:deep_tech:20200816185609p:plain
    ユニティちゃんのリグ

  4. HumanoidタイプのRigに計測データを適用

    Rigに計測データを適用するためのサンプルコードは実は/Azure-Kinect-Samples/body-tracking-samples/sample_unity_bodytracking/プロジェクトに含まれています.本来は,Assets/Scenes/PuppetMaster.unityシーンで利用されているはずのコードのようなのですが,このシーンは開いても正しく動きません(2020年8月16日現在).
    そのサンプルコードAssets/Scripts/PuppetAvatar.csを上記手順2でシーンに追加したユニティちゃんモデルにアタッチします.そして,下図のInspectorと同様に,Puppet AvatarスクリプトKinect Device,Root Position,Character Root Transformation,Offset Y, Offset Xを指定します.

    f:id:deep_tech:20200816190141p:plain
    ユニティちゃんへのスクリプト設定

  5. Playボタンで実行

    Playボタンでゲームを実行すると下のビデオのようにユニティちゃんを動かすことができます.棒人間が同時に表示されていると見辛いので,pointBodyオブジェクトは無効化してあります.
    人体ポーズが計測されるまでは変な状態でユニティちゃんが表示されますが,計測が行なわれるとユニティちゃんがポーズに合せて動きます.このユニティちゃんはスクリプトに指定したRoot Positionから動くことができないため,足を曲げてもunitychanのPositionから動くことができず,下の動画中の両膝を挙げるような動きになっていしまっています.このあたりはIKを使って解決する必要がありそうです.その他,紙の動きがおかしいとか全体にピクピクしてるとか,このままでは実用的に使えない気がしますが,今後解決方法など試してみようと思います.

まとめ

Azure Kinectで計測したポーズを基にUnity上のCGキャラクタを動かしてみました.本記事の方法ではサンプルを利用するだけでやりたいことを実現出来てしまいました.この手のCGキャラクタを動かす例題としてはとっつきやすいのではないかと思います.
しかし,このままでは利用できる用途がかなり限られてしまうので,より自然に仮想空間に適合してCGキャラクタを動かすような仕組みを導入する必要がありそうです.