2018年4月2日月曜日

Windows + Java で手軽にUVC制御(Auto focus 無効化とか)

UVC制御って検索するとただ表示するだけのものが引っかかり過ぎてうざすぎぃ!
わいは、オートフォーカス切って、手動で調節したり、カメラ側でブライトネスとかいじりたいんじゃって人向けの情報

javacpp-presets(videoinput)使お?

Githubはこちら

まずjavacppってなんぞ?っていうとJNAみたいなネイティブのライブラリにアクセスするラッパーです。
javacpp-presetsはjavacppを使用したプリセット郡です。
有名なとこでいうとjavacvもjavacppを使っています。

んでvideoinputってなんぞ?というと、使うのに一癖も二癖もあるdirectshowを簡単に使えるようにしたライブラリです。

内部的にはdirectshowなんでwindows専用です。
linuxでも制御したいひとはlibuvcなり頑張ってください。

サンプルプログラムごりって書くのはあれなんでコアなとこだけ書いときます。
(ラッパーなだけあってjavadoc適当だよねvideoinput)

サンプルを参考にしてvideoinputlib.videoinput生成

prop***()を実行してproperty番号取得

setVideoSettingCameraPct() または setVideoSettingFilterPct()で設定
引数は、deviceID,prop***()で取得した値,設定値(0.0~1.0までの割合),flag(2:manual 1:auto)
って感じ

どっちのメソッド使えばいいかはdirectshowのページを参照
CameraControlProperty 列挙 CameraControlFlags 列挙
VideoProcAmpProperty 列挙

ここまで使えるようになれば、困ったらdirectshowのページいけばなんとかなるはず。