HoloLensでMR映像を撮影する方法 ~その1~

Spectator View x HoloLens

Spectator View

「HoloLensとは別に高画質で撮影できるカメラをマウントして、綺麗なMR映像作りましょう」というもの。
Microsoft社のリポジトリからクローン/ダウンロードすることができます。

基本的にはリポジトリ先のREADMEを見て作業を進めるのが一番確実です。
日々アップデートされているリポジトリなので一部スクリプトやプロジェクト構成が変わることがあり、その都度ここのREADMEが書き換えられるからです。

SpectatorView for HoloLens

こちらにもまとまっているのですが、少し情報が古いものが含まれるので注意してください。

この記事はREADMEを参照しつつ、トラブルシューティング的な感じで一緒に合わせて読んでください。
細かい説明は一部省略しています。

第0章 ~各種インストール作業~

  • 外付けタイプのキャプチャーカード購入(USB3.0対応)
  • micro HDMI, mini HDMI購入(一眼レフ用とGoPro用)

キャプチャーカードセットアップ


PS4で試しにHDMI出力の画面録画を試そうとするもコピーガード的なものでプレビュー画面が真っ黒(HDCPと言うらしい)
HDCPとは? | Huluカスタマーサポート – Hulu Helpcenter

画面が真っ黒な状態はブラックアウトと言うらしい・・・そのまんま

リアルタイムにカメラの映像を取得したい!


HDMI出力に対応しているカメラはカメラ側の画面に表示されている映像をリアルタイムに取得できるらしいのでとりあえずケーブルを購入。
USBケーブル挿して「うん、映らん」とか言ってたけど、そりゃそうだ。
USBはデータを抜き出すため用。

とりあえず必要そうなファイルダウンロード


BlackMagic社製の必要なファイルがまとまったzipを2つダウンロード

この時、2つのファイルのverは一緒である必要があるので注意。

サポートページ

OpenCV 3.4.1もダウンロード

2系は使えない。2018年10月9日時点で3.4.3が出ていたが、とりあえず公式のドキュメントに書かれていた3.4.1をダウンロード。

OpenCV

Visual Studio関係をインストール

  • Universal Windows Platform development
  • Desktop development with C++
  • Game development with C++

こちらはVisual Studio Installerからインストールすることができます。

Windowsの何かをダウンロード・・・

Windows Media Feature Packというもの。
ダウンロードしてインストールを試みるも、エラーが出る・・・ 再起動しても結果は同じ。
どうやらこちらは日本語版のWindowsには必要ないらしい。
というのも一部の地域ではWindows Media Playerなどがデフォルトでは入っておらず、Media Feature Packをインストールすることで追加するらしいのですが、自分の環境のものは日本語版なので割愛。

第1章 ~カメラ映像の取得~

キャプチャーカードとPC、カメラを接続


一眼レフではmini HDMI端子、GoProではmicro HDMI端子を使用するため2本のケーブルをAmazonで購入。
取り回し的にも1m~2mあれば十分。

カメラとキャプチャーカードに接続するだけで「Blackmagic Media Express」でリアルタイムにファインダー越しの映像を確認することができました。

正確には一眼レフでは背面液晶に表示するモードに切り替える必要があります。
そうすることで背面液晶に表示されたもののと全く同じものがキャプチャーカード側でも取得可能になります。

GoProは標準機能では再生モードでキャプチャーカード側に映像が出力されるのでリアルタイムにカメラのレンズ越しの映像を見ることはできませんでした。
この辺は別途アプリ側で制御してあげる必要がありそうです。

・・・と思ったらGoPro側の設定画面でメディアからライブに変更する必要がありました。ユーザー設定の中にあります。

解像度の設定ですが、GoPro側で1080p 30fpsに設定し、Blackmagic Media Express側では1080p 29.97fpsに設定し動作確認を行いました。
なぜ30fpsに設定し、カメラ側と合わせなかったかというと30fpsではPC側の画面に表示されなかったためです。

トラブルシューティング その1

画面が映らなくなっても慌てることなかれ。結構な頻度で気づくと接続切れしてたりします。
その時はキャプチャーカードの端子を接続しなおすか、PCを再起動することで治ります。

トラブルシューティング その2

GoProとの相性があまり良くないかもしれないです。
というのも、外部接続のマウスやキーボードが一時的に認識しなくなったり、キャプチャーカードが認識されず、再起動をしない限りは再認識されないといった症状が発生しました。
それと、しばらく30秒ほど待つと再認識されることもしばしばあります・
必ずと言った現象ではないので調子が悪い時もある程度に。

パスの書き換え


「HoloLensCompanionKit-master\SpectatorView\dependencies.props」のOpen CV_v14DeckLink_incを自分の環境のパスに書き換えます。

いざ実行


「Windows SDK バージョン 〇〇がないよ!」と怒られたのでVisual Studio Installerから該当のものをインストールします。

これで無事実行に成功します。
が、なにやらconsoleにはエラーが。

Calibration project実行成功を目指す


HoloLens標準搭載のカメラではなく、一眼レフやGoProのカメラをHoloLensのカメラとして使用するためにcheckerboard patternを使用して位置合わせと画角のキャリブレーションを行います。

まず、checkerboard patternがリポジトリ内に入っているので印刷して段ボールや薄い木の板などに張り付けます。手作り感

stdafx.h内の以下の設定を書き換えます。

  • HOLOLENS_USER
  • HOLOLENS_PW
  • CHESS_SQUARE_SIZE : メートル単位で長方形の横幅
  • GRID_CELLS_X and GRID_CELLS_Y : 横と縦の正方形の数
  • HOLOLENS_ADDRESS : HoloLensを優先接続していない場合はこちらにHoloLensのIPアドレスを入力

先ほどのエラーはHoloLensへの接続設定を行っていなかったからっぽいです。

だがしかし、エラーログは消えたものの画面が真っ白で何も表示されない・・・

画面真っ白問題への対処


設定ファイルを見直すことで無事解決しました。

修正箇所その1

CompositerConstants.h内のUSE_DECKLINK_SHUTTLEをTRUEにし、他をFALSEにします。
今回使っているキャプチャーカードがUSB3.0対応のBlackmagic社製のIntensity Shuttleというものだったためこちらの変更が必要でした。

と思ったものの、これだとコンパイルが通らなかったので元に戻します・・・
次の修正で治るので安心してください。

修正箇所その2

DeckLinkManager.cpp内のbmdModeHD1080p5994bmdModeHD1080i5994に書き換えます。
どうやらこのキャプチャーカードでは1080pは対応しておらず、1080iにする必要あるみたいです。
「Desktop Video Setup」で1080pと設定できるのですが内部的には1080iに変換されてるんですかね・・・

詳しくはわかりませんがCalibrationアプリで使用するためには該当の個所を書き換える必要があります。

正常にcalibration達成を目指して


アプリケーション自体は動くようになったのですが、自動でシャッターを切るプロセスに入り、1枚目の写真が撮り終わるとエラーで中断される問題に遭遇。

Documents以下のOldCalibrationFiles\10_10_2018_19_2_29(撮影日時)の中身を確認すると、どうやらHoloLens側での撮影に失敗している様子。

無線接続から有線接続に変更

結局有線でHoloLensとPCを接続することで無事撮影することに成功しました。
この時、HoloLens側がスリープモードに入っていないかDevice Portalで監視しつつ、アプリケーションを実行するのが重要です。
カメラの映像がキャプチャーカードで取得できているかはBlackmagic Media Expressで確認することができます。
一眼レフ、HoloLens共に正常に起動できていないとアプリケーション側には何も表示されません。

シャッターはアプリが自動で切ってくれるので20枚ぐらい撮り終わるまでcheckerboardを画面全体まんべんなく移動させましょう。

数十枚撮れたら自分でEnterキーを押す必要があります。
Enterキーを押すことでCalibrationが始まり、正常に終了するとDocuments以下のCalibrationFiles内にCalibrationData.txtが出力されます。

中に記述されているRMSの値ですが、こちらの値が0に近ければ近いほど良い結果なので画角を調整して何度か挑戦します。

途中エラーを吐いてアプリが落ちることもありますが、何度かチャレンジして最後にCalibrationData.txtが正常に出力されるのを目指しましょう。


HoloLensでMR映像を撮影する方法 ~その1~

HoloLensでMR映像を撮影する方法 ~その2~

Leave a Comment

©2018 haquxx