ARCore: ImageAnalysis.setAnalyzer与ARFragment一起使用时不起作用
创始人
2024-09-12 09:01:13
0

问题描述: 当使用ARFragment和ImageAnalysis.setAnalyzer()方法一起使用时,ImageAnalysis的分析器不起作用。

解决方法: 首先,确保在项目中正确导入了ARCore和CameraX库。

下面是一种可能的解决方法,可以尝试使用ARSession来获取Camera对象,并手动创建ImageAnalysis对象,并将其与ARFragment一起使用。

  1. 在build.gradle文件中添加以下依赖关系:
implementation 'androidx.camera:camera-camera2:1.0.0-beta01'
implementation 'androidx.camera:camera-lifecycle:1.0.0-beta01'
implementation 'androidx.camera:camera-view:1.0.0-alpha19'
  1. 创建一个自定义的Fragment类,并扩展ARFragment:
import androidx.camera.core.CameraSelector;
import androidx.camera.core.ImageAnalysis;
import androidx.camera.lifecycle.ProcessCameraProvider;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.LifecycleOwner;

import com.google.ar.core.Session;
import com.google.ar.sceneform.ArSceneView;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class CustomArFragment extends ArFragment {

    private ExecutorService cameraExecutor;

    @Override
    protected boolean provideArSession(Session session) {
        boolean sessionProvided = super.provideArSession(session);

        // 获取CameraSelector
        CameraSelector cameraSelector = new CameraSelector.Builder()
                .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                .build();

        // 创建ImageAnalysis
        ImageAnalysis imageAnalysis = new ImageAnalysis.Builder()
                .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST)
                .build();
        imageAnalysis.setAnalyzer(cameraExecutor, /* your ImageAnalysis.Analyzer implementation */);

        // 绑定ImageAnalysis到CameraSelector
        ProcessCameraProvider cameraProvider = ProcessCameraProvider.getInstance(requireContext());
        cameraProvider.bindToLifecycle((LifecycleOwner) requireContext(), cameraSelector, imageAnalysis);

        return sessionProvided;
    }

    @Override
    protected ArSceneView createViewInstance(Context context) {
        // 创建ArSceneView实例
        ArSceneView arSceneView = new ArSceneView(context);
        arSceneView.setCameraStreamRenderPriority(Renderable.RENDER_PRIORITY_FIRST);
        arSceneView.getScene().addOnUpdateListener(frameTime -> {
            // 准备分析帧
            if (arSceneView.getArFrame() != null) {
                // 获取Camera实例
                Camera camera = arSceneView.getArFrame().getCamera();

                // 在这里处理分析帧的逻辑
            }
        });
        return arSceneView;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        cameraExecutor = Executors.newSingleThreadExecutor();
    }

    @Override
    public void onDetach() {
        super.onDetach();
        cameraExecutor.shutdown();
    }
}
  1. 在你的activity_main.xml文件中使用CustomArFragment替换ArFragment:

现在,你可以在CustomArFragment中处理分析帧的逻辑,并在ImageAnalysis.setAnalyzer()中添加你自己的ImageAnalysis.Analyzer实现。

请注意,这只是一种可能的解决方法,具体的实现方式可能因项目的不同而有所不同。你可能需要根据自己的需求进行一些调整和修改。

相关内容

热门资讯

推荐一款!来几局是正规平台吗,... 推荐一款!来几局是正规平台吗,微乐小程序辅助器脚本,详细app(有挂秘诀)1、任何微乐小程序辅助器脚...
实测交流!福建13水源码,四川... 实测交流!福建13水源码,四川熊猫辅助,详细技巧(有挂方式)1、四川熊猫辅助破解器简单,四川熊猫辅助...
每日必看推荐!欢乐茶馆挂,微信... 每日必看推荐!欢乐茶馆挂,微信卡五星辅助器,详细挂(有挂讲解)微信卡五星辅助器辅助器是一种具有地方特...
解密关于!手游蛮王辅助,川南久... 解密关于!手游蛮王辅助,川南久久辅助,详细教程(的确有挂)1、进入游戏-大厅左侧-新手福利-激活码辅...
推荐十款!天蝎辅助,钱塘13挂... 推荐十款!天蝎辅助,钱塘13挂件,详细方法(有挂工具)1、钱塘13挂件有没有辅助教程、钱塘13挂件有...
盘点几款!丽水都莱破解器,边锋... 盘点几款!丽水都莱破解器,边锋小程序老友辅助,详细器(证实有挂)一、边锋小程序老友辅助游戏安装教程牌...
技术分享!乐酷大厅怎么安装,人... 技术分享!乐酷大厅怎么安装,人海大厅辅助插件,详细器(存在有挂)亲,关键说明,人海大厅辅助插件透视脚...
今日焦点!朋朋政和辅助,闲逸碰... 今日焦点!朋朋政和辅助,闲逸碰胡辅助,详细软件(有挂猫腻)1)闲逸碰胡辅助免费钻石:进一步探索闲逸碰...
重大通报!盛世辅助插件,皇豪互... 重大通报!盛世辅助插件,皇豪互众可以控制吗,详细app(真的有挂)1、每一步都需要思考,不同水平的挑...
安装程序教程!卡五星游戏源码,... 安装程序教程!卡五星游戏源码,四川途游辅助,详细app(发现有挂)在进入卡五星游戏源码软件靠谱后,参...