BloomScheme Blog

株式会社ブルームスキーム公式ブログ

Universal Windows Platform アプリでカメラ制御

f:id:BloomScheme:20190419210313p:plain

以前の記事ではUnityでのカメラ制御について触れましたが、 blog.bloomscheme.com

結局UWPでカメラ制御アプリを作るハメになりました。ギャフン! なぜ複数カメラ制御アプリを作っているかというとフォトグラメトリのためだったんですが、やはりカメラの自動補正などがきいている状態で撮っても全然立体化してくれません。

詳細なカメラ制御ができるのはやはりUWP。ということでUWPでカメラ制御アプリを作ることにしました。

UWPってなに?というところから

フォームアプリを作ったことはありましたがUWPは全くさわったことがなかったので、とりあえず使い方を調べることからはじめます。

以下の記事を参考にとりあえずもりもり写経すると大体様子がわかりました。

Windowsフォーム開発者のためのWindows 10 UWPアプリ開発入門(前編) (1/6):特集:UWPとは何か

大変わかりやすい記事ですね!

意外と簡単そう!…本当に?

簡易手動カメラ

カメラまわりの制御については、このようなドキュメントがありました。

Windows の組み込みカメラ UI を使った写真とビデオのキャプチャ

これだと手動で写真を撮ることになるので目的とは異なりますが、慣れるためになんとなく写経するといいかんじにカメラアプリができます。いい感じ!

より詳細な制御

詳細な制御をする場合はこちらを見ろ、ということなので読み込みます。

MediaCapture を使った基本的な写真、ビデオ、およびオーディオのキャプチャ

なるほどなるほど。写経してみるとたしかにいい感じに使える!なんだ簡単じゃ~~~ん! カメラの解像度いじったりとか露出固定したりとかもなんか簡単なインタフェースがあるじゃん!

VideoProfileが使えない

はい、ということで「これで簡単!便利!」みたいに記述されているVideoProfile はカメラ側でサポートされていませんでした。

チュートリアルを見ると VideoProfile 経由でいろいろセットアップするということなんですが、

MediaCapture.IsVideoProfileSupported(videoDeviceId)

をチェックするとどのデバイスでも false が返ってきました。 いろいろ調べると MediaCapture の形式、解像度、およびフレーム レートの設定

という記事が見つかるのでこれに従って設定します。

ExposureControlが使えない

露出設定をいじりたい!ということで調べると mediaCapture.VideoDeviceController. ExposureControl など各種コントロールがあり、簡単に設定できそうなのですが、チェックしてみると

mediaCapture.VideoDeviceController.ExposureControl
>> false

これがまた使えない!

しかしVideoDeviceController Classをよくみると、ExposureControlだけでなくExposureなどもあります。 MediaDeviceControl Class のインスタンスだそうです。メソッドを見ると TrySetAuto(Boolean)TrySetValue(Double)があります。光明!

ん、ちょっとまって

Exposure とか Focusとか、全部 MediaDeviceControl なんですけど?? 個別のプロパティはどうなってるんですか??

値の範囲は自分で打ち込んで根性で調べよう!

TrySetは読んで字のごとくやってみると値の成功か失敗か返ってくるので、これを使って各設定の範囲が一体どこからどこまでなのか、根性で調べよう!って感じでした。

設定が多重にかかる問題

よし!これで設定がなんとかなった!と思ってbrightnessとかcontrastとかいろいろ調整してるとなんだかカメラが変な画をかえしてきたりします。全然一定の結果がかえってこない。なんかどんどん暗くなったりする。

なんで!??

とデバイスを取り外してもう一度接続すると元にもどったりする。 なんとものによっては現在からの相対値が設定されてしまうようです。 そしてそれはデバイスを取り外すまでリセットされない! もしかしたらリセットする方法があったのかもしれませんがちょっとわかんなかったですね…。

とにかくいろいろ大変だった

などなどつまづきポイントが無限にある感じで大変に大変でした。 検索すればギリギリ情報が落ちているのが救いでしたが…。

とりあえずサンプルをたくさんみよう

UWPのメディア関係のサンプルはこちらにたくさんあったので、とりあえずこれをもりもり読むといろいろどうにかできるようになりました。

Basic camera app sample

頑張ろう!!