ARCoreを使用してオブジェクトを配置する必要があるアプリケーションに取り組んでいます。次に、フレームを画像として保存する必要があります。
では、ARCoreカメラのオートフォーカスを設定する方法はありますか?
ARCore 1.4以降、ARCoreセッションの構成を使用してオートフォーカスを有効または無効にできます。
Session session = new Session(context);
Config config = new Config(session);
if (enableAutoFocus) {
config.setFocusMode(Config.FocusMode.AUTO);
} else {
config.setFocusMode(Config.FocusMode.FIXED);
}
session.configure(config);
Google ARCoreのエンジニアが_Config.FocusMode
_について言っていることは次のとおりです。
_public static final enum Config.FocusMode
_
_
Config.FocusMode
_ enumは、カメラフォーカスサブシステムの目的の動作を選択します。現在、デフォルトのフォーカスモードはFIXED
ですが、このデフォルトは将来変更される可能性があります。固定焦点カメラを使用しているためにARCoreがオートフォーカスをサポートしていないデバイスでは、AUTO
の設定は無視されることに注意してください。影響を受けるデバイスのリストについては、ARCoreでサポートされているデバイスのページを参照してください。最適なARトラッキングパフォーマンスを得るには、デフォルトのセッション設定で提供されるフォーカスモードを使用します。写真やビデオをキャプチャするときは、
AUTO
を使用します。最適なARトラッキングを行うには、オートフォーカス動作が不要になったらデフォルトのフォーカスモードに戻します。アプリで固定焦点カメラが必要な場合は、ARセッションを有効にする前にsetFocusMode(Config.FocusMode)(FIXED)
を呼び出してください。これにより、将来のリリースでデフォルトのカメラ構成フォーカスモードが変更された場合でも、アプリは常に固定フォーカスを使用するようになります。
2つの値があります:
_public static final Config.FocusMode AUTO
public static final Config.FocusMode FIXED
_
したがって、Javaコード:
_Config ar_session_config = session.getConfig();
ar_session_config.setFocusMode(Config.FocusMode.AUTO);
session.configure(ar_session_config);
_
お役に立てれば。
古い質問ですが、Sceneform
の実装で答えを更新すると思いました。 Sceneform SDK 1.4には、オートフォーカスを設定する機能が追加されました。拡張機能を使用して有効にします。
関連するフィールドをグローバルに宣言します。
//The AR Core session
private var arSession: Session? = null
private var arConfig: Config? = null
および拡張関数の定義:
private fun Session.setupAutofocus() {
//Create the config
arConfig = Config(this)
//Check if the configuration is set to fixed
if (arConfig?.focusMode == Config.FocusMode.FIXED)
arConfig?.focusMode = Config.FocusMode.AUTO
//Sceneform requires that the ARCore session is configured to the UpdateMode LATEST_CAMERA_IMAGE.
//This is probably not required for just auto focus. I was updating the camera configuration as well
arConfig?.updateMode = Config.UpdateMode.LATEST_CAMERA_IMAGE
//Reconfigure the session
configure(arConfig)
//Setup the session with ARSceneView
fragment.arSceneView.setupSession(this)
//log out if the camera is in auto focus mode
ARApplication.log("The camera is current in focus mode : ${config.focusMode.name}")
}
これを呼び出すのに適した場所は、アクティビティのonResume
です。
override fun onResume() {
super.onResume()
//Check if ARSession is null. If it is, instantiate it
if(arSession == null) {
arSession = Session(this@EdgeActivity)
arSession?.setupAutofocus()
}
}