我是Android开发的新手(更多的是Python和机器学习工程师),但我想尝试TensorFlow的一个示例:TF Lite迁移学习。
我在Android Studio上成功运行了它,但发现应用程序运行得异常缓慢,无法进行任何操作。我深入研究了代码,试图找出根本原因,发现了这个问题。
在函数CameraFragment::startCamera()
中创建了一个预览上下文
PreviewConfig config = new PreviewConfig.Builder() .setLensFacing(LENS_FACING) .setTargetAspectRatio(screenAspectRatio) .setTargetRotation(viewFinder.getDisplay().getRotation()) .build();Preview preview = new Preview(config);preview.setOnPreviewOutputUpdateListener(previewOutput -> { ViewGroup parent = (ViewGroup) viewFinder.getParent(); parent.removeView(viewFinder); parent.addView(viewFinder, 0);
还有另一个可以保持空的用例:
final ImageAnalysisConfig imageAnalysisConfig = new ImageAnalysisConfig.Builder() .setLensFacing(LENS_FACING) .setTargetResolution(new Size(224, 224)) .setCallbackHandler(new Handler(inferenceThread.getLooper())) .setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE) .build();final ImageAnalysis imageAnalysis2 = new ImageAnalysis(imageAnalysisConfig);imageAnalysis2.setAnalyzer((image, rotationDegrees) -> { });
现在我们有一行代码来激活它们:
CameraX.bindToLifecycle(this, preview, imageAnalysis2);
问题就从这里开始。如果我们保持这两个用例,应用程序将无法使用。但如果我们只保留其中一个(无论哪一个),我们就可以正常使用应用程序,所有导航功能都能正常工作。你知道是什么导致这种行为的吗?
回答:
这个build.gradle
使用了一个相当旧的版本;请迁移到版本1.0.0-beta01
。