うめ研究生のVR開発記

ViveProEyeをUnityで開発したい大学院生です('ω')公式VIVEアンバサダー1期生

【OpenCVsharp】外付けwebカメラを使おうとして解像度の設定で沼った【C#】

計測用アプリを作っているときに、なかなか解決できなかったのでメモ

 

環境

Windows11

C#Visual Studio 2022,Winform .NET

OpenCVsharp

外付けWebcam(ELECOMのやつ↓)

 

状況①

開発初期段階は、ノートPCの内臓カメラを使って動作確認していたので発見が遅れた。

WPFで昔使っていた処理を移植しただけだが、何故かWebカメラで映像取得できない


元コード

//カメラ画像取得用のVideoCaptureのインスタンス生成
var capture = new VideoCapture(0);
var frameSize = new OpenCvSharp.Size(capture.FrameWidth, capture.FrameHeight);
var fps = capture.Fps;

//カメラの接続確認
if (!capture.IsOpened())
{
       System.Windows.MessageBox.Show("Can't use camera.");
       return;
}

IsLoop = true;
using (capture)
using (Mat img = new Mat())
{
       await Task.Run( () =>
       {
              while (IsLoop)
              {
                   capture.Read(img);
                   if (img.Empty()) break;                   
      var image = BitmapConverter.ToBitmap(img);
                   Cam_PictureBox.Invoke(new Action( () =>
                   {
                        Cam_PictureBox.Image?.Dispose();
                        Cam_PictureBox.Image = (Bitmap)image.Clone();
                   }));
              }
       }
}

 

状況① 解決方法

fpsが何故か上手く設定されていなかった。fps=30と直書きすることで改善した。。。が

 

状況②

1920×1080に対応しているWebカメラなのに640×480で出力される。

設定を追加しても、ちゃんと反映されるが、その場合は真っ黒な画面となる

capture.Set(CaptureProperty.FrameWidth, 1920);
capture.Set(CaptureProperty.FrameHeight, 1080);


参考までに同様のissue報告↓

github.com

teratail.com


状況② 解決方法

上のissueで提案されているCapture.Open()を正しい場所に置けというアプローチは不発

capture.Set(VideoCaptureProperties.FourCC, VideoWriter.FourCC('M', 'J', 'P', 'G'));

を追記することで解決

 

フォーマットを、これまでちゃんと理解せず使っていたツケが来たのかな…(´・ω・`)

【SteamVR】何もしてないのにVive Pro Eyeが壊れた【直した】

SteamVR君に、デモ展示の場を一時壊されたので恨み節を書いていきます

 

昨日、自分が作ったVIVE PRO EYE使った計測アプリを実機デモする機会があり、
セットアップしておりました。

 

PC起動 ⇒ 一度動作確認ヨシ! ⇒ 本番まで1時間あるし一旦アプリとsteamVRは落としとくか ⇒ 本番になりアプリ立ち上げ ⇒ が、駄目ッ…再起動するも駄目…

本体横のランプも赤ランプ(ディスプレイやコードの異常)点灯してるし、steamVRもドライバのエラー?とかなんとかで認識せず。
リセットかけても駄目。
開発者モードからUSB周りのリセットかけても駄目…
SteamVRのアンインストール・再インストールしても駄目……

放置中にアップデートかかった(と思われる)ので、beta版使っていたのを辞めて再インストールしたけど駄目……(´・ω・`)

 

なにやってんだお前ェ!

 

とりあえず開催時間中に急いで直す必要があり、記事のためにスクショとか撮っている余裕がなかったのはご容赦ください。
というか、ランプの意味通りなら本体に繋がってるコードが断線したとかだけど、それはまずい。てかさっき動作してましたやん。

 


色々探して辿り着いたのが、この有識者の意見集まったところ

ここのリプから

bigdra50.hatenablog.com

SteamVRのフォルダ削除してSteamVR再インストール

やけになった.

SteamVRをアンインストール
C:¥Program Files(x86)¥Steam¥steamapps¥common¥SteamVRを削除
SteamVRを再インストール
これで動いたけど, 試すときは全て自己責任でお願いします.

SteamVRアンインストールしてこのフォルダ削除して再インストールしたら、
緑ランプになったし、認識してくれました( ゚Д゚)

 

とりあえず3時間くらい時間持ってかれたのでSteamVRは謝れ。

Vive Pro Eye + OpenXRを公式が公開してたってだけ

なんとなくフォーラム見ていたら、HTCスタッフが

「なんでみんなそんな問題起きてるの?」

と純粋そうなコメント共にUnityサンプルプロジェクトを、DropBoxで配布していた…

 

公式で配布して、どうぞ

forum.htc.com
SRanipalから移行する人は試してみてはどうですか

FocusVisionが買え次第、僕も試そうかな

XRkaigiでアイトラッキングについて色々情報集めてきたブログ

ご無沙汰しております。そして今年もよろしくお願いいたします。

未だにFocus3で瞳孔径取れずVIVE ProEyeを使っているアンバサダーです()
そして未だに卒業も進路も決まっていない博士課程でもあります。オイオイシンダワアイツ

 

ついにProEyeが終売になってしまいましたね…
ヘッドマウントディスプレイの中ではかなり寿命長かった方ではないでしょうか
僕の修士・博士課程の研究活動でお世話になりました(o_ _)o))
そしていましばらくお世話になります。

www.vive.com


今回はVRでの視線計測は今後どうすればいいんだという話も含め、
XRkaigiに行ってきたレポ(主にHTC NIPPON / Tobii)を書き留めていきます。

www.xrkaigi.com


HTC NIPPON

毎年出展されている我らがHTC NIPPONに、今年もご挨拶してきました。
アンバサダー企画を担当されていた政田さんも,若手スタッフの監督のような立ち位置で現場におられたので、色々お話してきました。
ちょうどMillaさんのライブパフォーマンスと被ってしまい、申し訳なく…(笑)


VIVEのヘッドマウントディスプレイとしてProEyeは終売しましたが,
次世代機としてFocus Visionが登場しています。

以下少し愚痴なので読み飛ばし推奨

一世代前のFocus 3は、アイトラッカーが外付けタイプで本体usbに繋ぐ仕様だったことで、スタンドアロンとPCホストの両方に対応(アイトラッカー使用時はUSBポート埋まってるので有線接続不可、Wifi経由で専用アプリ通じて通信してね)という、アイトラッキング機能は使う人多くないし、オマケ要素だぞといった設計思想が想像できる構成でした。買ったけど瞳孔径取れない問題は全然改善されないし有線の代わりにルータ持ち歩くのも億劫だしでProEyeがずっと現役でした。
さらにスタンドアロン型に片足を突っ込んだことでか、OpenXRの波に押されてかは分かりませんが、ProEyeでのアイトラッキングSDK(SRanipal)との互換性を中途半端に実装した後、SDKそのものの公開を停止...(´・ω・`)
過去の記事で書いたこともある気がしますが、最初互換性保つようランタイムとSDKを更新してくれていたんですが、瞳孔径など一部機能が使えず(なんなら更新したバージョンだとProEye使っても動かない致命的な不具合があったり)
そして公式から「OpenXR使え」となりましたが、ProEyeユーザも強制移行させたいのかSRanipalをダウンロードできないようにしてくれちゃったりしたり。その影響で私のもとにSRanipalランタイムとSDKの共有を依頼するDMがちょくちょく来てたり。もし必要な人いればDM下さい。フツーは製品終売しても一定期間はSDKとかダウンロードできるようにしておくものだと思うんですけど。

developer.vive.com

 

研究に使用する場合、被検者に映像提示するなど、検査者がVR環境を制御できる構成が望ましい場合が多くホストPCは手元に欲しかったりします。

こんなFocus3への文句の一部を、一意見として希釈して政田さんが本社サイドに挙げてくださっていたことも影響したかも?とのことで,Focus Visionではアイトラッカーは内蔵、Displayport接続も出来る仕様に。

ということでPro Eye終売で後継機探している人はFocus Vision!買おう!(手のひらクルー)

(なんか開発者フォーラムでは、OpenXRが瞳孔径未対応でまだ取れねぇとか投稿あったけど)

SRanipalSDK Adaptation with OpenXR and Unity 2022.3.51f - Page 2 - VIVE Eye and Facial Tracking SDK - VIVE Forum

ここからは推測。ProEyeは視線計測装置最大手のTobiiのSDKにも対応していたのですが、Focus Visionではそれはなし。後述するTobiiは、ProEye含め色んなHMDに、サッカードやFixationまで分析できるソフトウェアを提供していたのですが…契約更改ならずだったんでしょうかね?ここらへんはもう少し内部の人間じゃないと知りえない話なんでしょうが。

 

個人的にAzure Kinect(現Femto Bolt)の使い手としては、VIVEトラッカーを使った非装着タイプの骨格推定も期待しているところ。新情報はなかったようですがVRChatユーザを中心に期待する声は大きい様子。KinectVRを用途の一つとしているだけで設定の簡便さを考えるとVR機器メーカーが出してくれるものの方が使い勝手よさそうですもんね。
研究での計測を想定しても周辺機器との同期収録をクリアするという点でKinectの代替になってほしいところ。

www.moguravr.com

 

トビー・テクノロジー

今回、年末忙しい中XRkaigiに行く理由となったのがこの会社の出展を見つけたからなんですねー。
Tobiiはスウェーデンに本社を置く、アイトラッキング機器の世界最大手の会社で、
その日本法人が今回ブースを出していました。
これまでもリハビリ系の学会に出展しているところを何度か挨拶していたのですが…今回はコンテンツが聞いたことないものも含んでいて面白そうだったので、見に行ってきました。1ブースのスペースに2人だったのですが、もっと大きなブースでも人くるだろうにと思ったり。


 ●META Quest2に取り付けられたプロトタイピングツール Tobii Crystal
 ●既存のヘッドセットを医療アセスメント機器に Tobii Ocumen
 ●一般的なウェブカメラでアイトラッキング可能な Tobii ネクサス

www.xrkaigi.com

 

まず、Tobii Crystalから。これはHMDのレンズ周辺にシールのように貼って使うアイトラッカーモジュール。開発(プロトタイピング)用ですね。一般に提供するようなものでもないようで、本社に連絡して契約する必要があるそうで…。Questシリーズでどうしても視線計測したいけどQuest Pro(視線ベクトルのみ・ARが3より荒い)では機能不足だというマニアックな方は、問い合わせてみては(´・ω・`)

 

次にTobii Ocumen。これは前述したProEyeをサポートしていた視線分析機能付きSDKの名称ですね。昔は5台くらいサポートしている機種があったと記憶してますが、今はPico Neo 3 Pro Eye(中華)だけみたい。ProEyeが手に入らないけどTobiiの視線分析したい人はPico Neo買うしかないんじゃないですかねぇ。

developer.tobii.com

 

最後にTobii ネクサス。これが目当てで行ったと言っても過言ではない。
ProEyeやTobii製アイトラッカーは、どれも赤外線画像から瞳孔を抽出して算出するアルゴリズムを採用していますが、Webカメラベースで視線計測が出来るソフトウェア(Tobii製)となれば興味も出ようというもの。

ここからサンプルもダウンロードして試せるみたいなので、興味があれば

www.tobii.com

ブースで試させてもらって、色々お話してきましたがやっぱり精度は赤外線式にはまだ及ばない模様。当然よね。キャリブレーション後、注視推定位置が円で画面上にフィードバック表示されるのですが、その円の大きさが赤外線式より少々大きいらしい。ちなみにキャリブレーションはTobiiのゲーム用途のアイトラッカーと同じだった…と思う()。
リアルタイムで注視点位置が計算できているのは変わらず。使用しているWebカメラにサンプリングレートは依存するとのことなので、赤外線式よりハイサンプリングも可能かも?
サンプルには含まれてないのですが、頭部の回旋角も推定可能らしいですよ奥さん。瞳孔径は取れないらしいですが、これはまぁ仕方ないですね。Androidでも使えるらしいのでタブレットとかで今後使えると考えると用途色々ありそう。
ただこれは開発ライセンス(試用期間は評価ライセンス)を年間契約する必要があり…そのお値段は…数千ドル(゚Д゚;)
イヤーきついっす(本音)

 

自分はWebCameraベースの視線計測を研究で使う機会があり、その時はEyeware(Beam Eye Tracker)というのを使ってました。

beam.eyeware.tech

こちらも頭部回旋角度を計測できて、機能的にもほぼ同じ。スマホのカメラでも可。steamで対応のゲームも出てたり。
自分はpythonをexe化して起動しておくことで、Unityにデータを流して使ってました。
月5ドル or 買い切り30ドルなのがとても偉い(/・ω・)/

 

Tobiiのサンプルでは、サッカードや固視の同定もされていたので、ここらへんの分析をお金払ってTobiiに委ねるならTobiiネクサス。視線分析は自分達でやれるという研究者・開発者の人はeyewareで当座は良いんじゃないかな()
精度は…自分で使っているときは合っている印象だけどどうだろう?
サンプルもあるみたいなので気になる人は試してみては。契約するときに上記のリンクから進んでもらえれば…私がほんの少しeyeware側に認知されて嬉しいです()

 

訪問しておいて色々失礼すぎる気もしますが…各製品への一意見としてご容赦くださいませ…



他にKinectやFemto Bolt使っているブースの感想も書きたかったのですが、今回はここまで…4月以降私が生きていたらFocus Visionについて書きたい所存…進路ェ…

AIにタイトル考えてもらう機能追加されてたけど、ニュース記事みたいになったので却下した

ブログ移住のお知らせ【Focus3】

お久しぶりです。

 

かくかくしかじかで、今後のブログ更新は以下で行います~。
こちらも無期限で開けたままにしておきますのでご心配なく。

umehashi.blogspot.com

 

第一回はFocus3のアイトラッカーの不具合について語ってたりします。
ViveProEye含め色んなデバイスの話を書く予定です。


移住先でもどうぞよしなに。

AzureKinectのBodytrackingSDKが最近のPCについていけてない件

備忘録なので、簡潔に。

 

私の開発しているAzureKinectを使ったシステムは、

開発環境がWindows10世代のDellのゲーミングノート、RTX2080と3070の2台。

 

これまで導入いただいた病院・施設に採用していたのも

Windows10のMSIのゲーミングノート。RTX3060

 

この度、展示・デモ対応用にNewPCを迎えるにあたり、MSIの同機種を手配しようとしたところ、いつのまにか次世代機のみに。

 

無駄にメモリが増えたWindows11のゲーミングノート、RTX3060

型番や見た目的に、これまでのPCの正統な後継機

「まぁ、性能的には上位互換だからいいよね」

 

「BodyTrackingが動かねえええええええええ」

作ったシステムがというか、公式が配布しているBodytrackingViewerもダメ。

 

ただ、AzureKinect Viewerは動く。

 

つまりグラボの問題?

しかしグラボの型番は同じ....

「もしや昔のこれか?」

【Azure Kinect】C#でBody Tracking SDK v1.1.0を使うための手順と隠されたトラップについて - うめ研究生のVR開発記

【当時のあらすじ】

原因を考えた結果、以前、グラボのファームウェアなんて最新が一番だろとか思ってアップグレードして撃沈した経験がフラッシュバック。

 

確認のためバージョンを見てみると

PCのグラボ最新すぎるだろ(おとわっか)

 

【以下数行は茶番】

・前回使ったドライバあるしこれで471.5にダウングレードしてみるか

⇒再起動かけたら、windows立ち上がらなくなったわ

⇒復元で蘇生

⇒あ、ドライバwindows10用じゃん。11対応のやつじゃないからか

互換性問題には気を付けよう

 

※注意

NVIDIAが公開している過去のドライバには限りがある

いつ消されるかもわからないので、必要になる可能性があれば今のうちにダウンロードしておくのを勧めます

www.nvidia.co.jp
今回の教訓

新品のPCとKinect買ってもBodyTrackingがサラッと動いてくれないこともある。

SDKは1.1.2から更新される雰囲気今のところなし。

Confidencial Levelが正式実装される前にKinectの後継機とか出るんじゃないだろうな(予言)

【HTC開発者交流会】VIVE Pro Eyeで視線ヒートマップを描くチュートリアル-後編-【バーチャルライフマガジン】

明けましておめでとうございます…

光陰矢の如く、いつの間にか1か月経っておりました。コワイ(..)

この1か月の間に、VR技術者試験の結果が出まして、無事合格しました。

晴れて日本バーチャルリアリティ学会認定 バーチャルリアリティ技術者です('ω')

 

今回は前の記事の続きと、一緒に使える心拍・脳波等センサについて書いていきます。

 

『バーチャルライフマガジン 2月号』にて、私のバーチャル学会に出したポスターが掲載されました。VR会場に行かなくても見れるのでここの読者に優しい…。

無料で閲覧できますのでご興味あれば他の記事のついでに見てやってくださいませ。

vr-lifemagazine.com

 

視線ヒートマップを今度こそ描きます

前回↓

umehashi.hatenablog.com

 

Unitychan(© Unity Technologies Japan/UCL)です。少しの間、眺めてから読み進めてください。 

f:id:umehashi:20220124163607p:plain

 

参考: UnityのPlane上に注視点ヒートマップを作る - Qiita

f:id:umehashi:20220124165656p:plain

↓いつもどおりSteamVRをインストールしています。

f:id:umehashi:20220124165817p:plain

↓SRanilpal_SDKをVIVE公式から貰ってきます。

f:id:umehashi:20220124165826p:plain

↓Assetの中からSRanipal_Eye_Fremeworkをシーンに入れます。

f:id:umehashi:20220124165843p:plain

↓先ほどのリンクからshaderとスクリプトをお借りいたします。Materialも一つ作成。

f:id:umehashi:20220124165906p:plain

↓Planeを適当に作って、立てておきます。さっきのMaterialを適用。

f:id:umehashi:20220124165927p:plain

↓そのPlaneのちょっとだけ後ろに同じサイズのPlaneを作って画像を貼り付けます。

f:id:umehashi:20220124165952p:plain

↓この時は実行時に分かりやすいからと球を置いたけれど、要らないね…。

f:id:umehashi:20220124170006p:plain

↓お借りしたプログラムの中にSRanipal_SDKの要素を軽く突っ込みます。シェーダも変化速度を少しいじりましたがここはお好みで。

f:id:umehashi:20220124170019p:plain

f:id:umehashi:20220124170055p:plain

 

f:id:umehashi:20220124170107p:plain

 

キャラクターのデザイン(目・口・服etc)やイラストの特徴的な点に対して、観察する際に比重が置かれていることが、視線データの可視化から分かりました。

交通系(運転,歩行)や絵画鑑賞、広告効果など応用範囲は幅広いでしょう。

 

メタバースがこのまま栄え、HMDにアイトラが標準搭載になったら、視線データを無断で収集して問題になる企業が出てくる未来もあったり…?

VR空間での視線データは、対面時のアバタ観察や非現実的なものへの視線配分、VR空間での商業などなど未知数かつ有用そうな分野ですからね。お宝が眠っていそうです。

 

視線と同時に、心拍(心電図)とか呼吸・皮膚電位・脳波を見れたらウソ発見器が作れそうですよね…。他にもVRで事故をシミュレーションしたときの交感神経を一緒に評価できたら近未来感あるなぁとか妄想したりしているんですが、誰かやられてたりしませんか…?

 

必要なセンサは、私がお世話になっている企業さんでHMDより安価で入手可能なので、ご興味あればぜひ…(突然のステマ

自分が使ってるのはBiTalino BITシリーズです。Unityでも動きます。

色々な大学・企業が導入されてますのでご安心ください。

www.creact.co.jp

今度はこのセンサの開発について、この企業さんのブログに書くかもです。

何卒よろしくお願いします。