web-dev-qa-db-ja.com

ARCoreカメラでオートフォーカスを設定する方法はありますか?

ARCoreを使用してオブジェクトを配置する必要があるアプリケーションに取り組んでいます。次に、フレームを画像として保存する必要があります。

では、ARCoreカメラのオートフォーカスを設定する方法はありますか?

8
deeppandya

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);

https://developers.google.com/ar/reference/Java/com/google/ar/core/Config.html#setFocusMode(com.google.ar.core.Config.FocusMode)

11
MrAlbean

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);
_

お役に立てれば。

2
Andy

古い質問ですが、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()
    }
}
2
Clinkz

問題がUnityプロジェクトにある場合は、CameraFocusModeパラメーターをAutoに変更します。 -)Fixedの代わりに。

Unity ARCoreConfig file settings

1
GuruJeya