为什么我的应用程序无法获取文件列表? Logcat:

我目前正在使用 Google ML 和 TensorFlow 开发 Android 应用程序(用 Java 编写)。该应用程序以使用设备相机的实时相机流期间的对象检测为中心,并使用 TensorFlow Lite 模型作为自定义库来获取源文件列表。 TensorFlow Lite 模型专门称为 mobilenet_v1_0.75_192_quantized_1_metadata_1.tflite,我得到了 here。我的问题是我运行该应用程序以查看它是否会打印列表大小,并且该应用程序启动得很好;相机预览有效,应用程序不会崩溃。但是,我只会遇到这个错误;

Logcat:

2021-07-30 12:19:33.343 15790-15790/? E/objectdetectio: Unknown bits set in runtime_flags: 0x8000
2021-07-30 12:19:33.754 15790-15828/com.example.objectdetection E/Perf: Fail to get file list com.example.objectdetection
2021-07-30 12:19:33.754 15790-15828/com.example.objectdetection E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2021-07-30 12:19:33.754 15790-15828/com.example.objectdetection E/Perf: Fail to get file list com.example.objectdetection
2021-07-30 12:19:33.754 15790-15828/com.example.objectdetection E/Perf: getFolderSize() : Exception_1 = java.lang.NullPointerException: Attempt to get length of null array
2021-07-30 12:19:33.992 15790-15835/com.example.objectdetection E/libc: access denied finding property "persist.vendor.camera.privapp.list"

根据我的研究,一些结果表明文件路径或根目录在某些方面存在缺陷。但是,我将 .tflite 模型放置在我的资产文件夹中,这让我想知道为什么我会收到这些错误以及我如何解决这些错误。我下面代码中的 Log.d("TAG","onSuccess" + detectedObjects.size()); 应该打印对象列表大小,但显然不是。

Mainactivity.java

public class Mainactivity extends AppCompatactivity {

    private class YourAnalyzer implements ImageAnalysis.Analyzer {

        @Override
        @ExperimentalGetImage
        public void analyze(ImageProxy imageProxy) {
            Image mediaImage = imageProxy.getImage();
            if (mediaImage != null) {
                InputImage image =
                        InputImage.fromMediaImage(mediaImage,imageProxy.getImageInfo().getRotationDegrees());
                //Pass image to an ML Kit Vision API
                //...

                LocalModel localModel =
                        new LocalModel.Builder()
                        .setassetfilePath("ClassifierModel.tflite")
                        .build();

                CustomObjectDetectorOptions customObjectDetectorOptions =
                        new CustomObjectDetectorOptions.Builder(localModel)
                        .setDetectorMode(CustomObjectDetectorOptions.STREAM_MODE)
                        .enableclassification()
                        .setClassificationconfidenceThreshold(0.5f)
                        .setMaxPerObjectLabelCount(3)
                        .build();

                ObjectDetector objectDetector =
                        ObjectDetection.getclient(customObjectDetectorOptions);

                objectDetector.process(image)
                        .addOnSuccessListener(detectedObjects -> {
                            Log.d("TAG","onSuccess" + detectedObjects.size());
                        })
                        .addOnFailureListener(e -> Log.e("TAG",e.getLocalizedMessage()))
                        .addOnCompleteListener(result -> imageProxy.close());
            }
        }
    }

    private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        cameraProviderFuture = ProcessCameraProvider.getInstance(this);

        cameraProviderFuture.addListener(() -> {
            try {
                ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
                bindPreview(cameraProvider);
            } catch (ExecutionException | InterruptedException e) {

            }
        },ContextCompat.getMainExecutor(this));
    }

    void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {

        PreviewView previewView = findViewById(R.id.previewView);
        Preview preview = new Preview.Builder()
                .build();

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

        preview.setSurfaceProvider(previewView.getSurfaceProvider());

        Camera camera = cameraProvider.bindToLifecycle((Lifecycleowner)this,cameraSelector,preview);
    }
}

另外,为了澄清起见,我的应用程序名称是 ObjectDetection,这将是 .tflite 模型如何放置在我的资产文件夹中的文件路径; ObjectDetection > app > src > main > assets > ClassifierModel.tflite

busten 回答:为什么我的应用程序无法获取文件列表? Logcat:

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/8410.html

大家都在问