どうも、めかぶです。

前回の記事の続きで、今回はRaspberry Piを使用して、実際に映像として送信できる設定値を確認します。

結論

結論だけ先に書くと、Switch2が対応している解像度・フォーマット・フレームレートの組み合わせは以下の2つだけでした。

  • 640x480@30fps YUV
  • 640@360@30fps YUV

フレームレートについて、60fps等は試せていないのですが、ばくすたーさんのNoteで、Elgato Cam Linkを使用した場合に640x480@60fps YUVがディスクリプタで通知されているにもかかわらず動作しないことが確認されているので、おそらく60fpsはサポートされていないと思われます。

以降は検証の内容になります。

検証環境

1日格闘したんですが、Raspberry Pi Zero 2 Wだとなんかうまくいかなかったので、余ってるRaspberry Pi 4+専用カメラモジュールを使用することにしました。

showmewebcam

このリポジトリのリリースからPi4用のイメージをインストールして、カメラを接続した状態でまずPCで動作確認します。

動作テスト

映像は乱れてますが、ちゃんと入力できています。 映像が乱れているのは、Pi4用に電源供給とOTGに対応しているY字ケーブルを使用しているからです。

後にホストからの供給だけで動作するのでこれは必要ないことがわかりました。

OBSでの確認

USB Device Tree Viewでディスクリプタの確認をしてみます。

デフォルト設定だと、以下のように全解像度が30fpsのMJPEGで送られる設定になっているようです。また、UVCバージョンは1.0です。

USB Device Tree View

この設定なら、Switch2側で何かしらの映像を受け取ることができるはずです。

あれ?

あれ??

1920x1080@30fps, 1280x720@30fpsあたりは純正と同じはずなので、この設定であれば動作するはずです。

抜き差ししたときにカメラとしては認識されていそうなので、他に問題がありそうです。

認識確認

UVCバージョンやフレームレートの変更はカーネルモジュールの変更が必要なので、とりあえず解像度とコーデック設定を純正のカメラっぽくしてみます。

解像度設定

映りました!

認識成功

1080pか720pあたりを使っているものだと思っていたのですが、違うようですね。

ここからは、対応解像度・コーデックを一つに設定して確認していきます。

検証

検証結果

まとめると以下のようになりました。

結果

30fpsの中でSwitch2が対応しているのは640x360 YUVと640x480 YUVだけでした。

640x480@30fpsは、HORIのSwitch2対応カメラの解像度・フレームレートと同じです。

HORIのカメラ

また、動作確認済のキャプチャボードのディスクリプタでも、640x480 YUVが対応していることが確認できました。

キャプチャボードのディスクリプタ

考察

先述のばくすたーさんのNoteで、映像処理のソフト開発者視点から解像度の目安について考察されていました。

ここで解像度の目安の話題を別の観点から出しておきます。私は個人開発で顔や手のトラッキングを行うアプリを作っていて、その開発時の感覚で言うとSwitch2のマシンスペックでは30fpsくらいでカメラ入力を扱いたいというのは結構ありそうなことだと思います。というのも人物の切り抜きや表情検出をする前提だと画像処理のほうの負荷が30fpsくらいでしんどくなってきて、60fpsを出すのはけっこう大変だからです。

確かにそうだと思います。 PCくらいリソースに余裕があれば720p@30fps等でも十分に動くと思いますが、Switch2のようなリソースに限りがある場合は、640x480@30fpsくらいが良い落とし所に感じます。

Switch2でのカメラの使われ方からしても、そこまで高解像度である必要もないですし…。

さいごに

結論は先に書いてしまったので、ここでは特に書くこともないです。

キャプチャボードを買う前にこの解像度に対応しているか確認するのは困難なので、この記事が役に立つことはあまりない気もしますが、単に自分が気になって調べたことの備忘録なのでヨシ!