我正在开发一个应用程序,我需要使用ARCore放置对象。然后我需要将帧保存为图像。
那么有没有办法为ARCore相机设置自动对焦?
答案 0 :(得分:7)
从ARCore 1.4开始,您可以通过ARCore会话的Config启用或禁用自动对焦:
Proxy
答案 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)