有没有办法用ARCore相机设置自动对焦?

时间:2018-02-21 18:39:49

标签: android-camera augmented-reality arcore autofocus

我正在开发一个应用程序,我需要使用ARCore放置对象。然后我需要将帧保存为图像。

那么有没有办法为ARCore相机设置自动对焦?

4 个答案:

答案 0 :(得分:7)

从ARCore 1.4开始,您可以通过ARCore会话的Config启用或禁用自动对焦:

Proxy

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

答案 1 :(得分:1)

旧问题,但是我想我将通过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 :(得分:1)

以下是Google ARCore工程师对Config.FocusMode的评价:

public static final enum Config.FocusMode
  

Config.FocusMode枚举选择相机对焦子系统的所需行为。当前,默认对焦模式为FIXED,但是将来可能会更改此默认模式。请注意,在由于使用定焦相机而导致ARCore不支持自动对焦的设备上,设置AUTO将被忽略。请参阅“ ARCore支持的设备”页面以获取受影响设备的列表。

     

为获得最佳的AR跟踪性能,请使用默认会话配置提供的聚焦模式。拍摄图片或视频时,请使用AUTO。为了实现最佳的AR跟踪,一旦不再需要自动对焦行为,请还原为默认对焦模式。如果您的应用需要定焦相机,请在启用AR会话之前致电setFocusMode(Config.FocusMode)(FIXED)。这样可以确保您的应用始终使用固定焦点,即使默认相机配置的焦点模式在将来的版本中发生了变化。

有两个值:

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

希望这会有所帮助。

答案 3 :(得分:0)

如果问题出在Unity项目中,则将 CameraFocusMode 参数更改为自动,而不是固定

Unity ARCoreConfig file settings