Roc*_*666 3 android analysis image android-camerax
我正在尝试使用 Firebase 的 MLKit 通过 Camerax 进行人脸检测。我很难让图像分析的图像代理大小与 PreviewView 的大小相匹配。对于图像分析和 PreviewView,我已将 setTargetResolution() 设置为 PreviewView 的宽度和高度。但是,当我在分析器中检查 Imageproxy 的大小时,它的宽度为 1920,高度为 1080。我的 PreviewView 宽度为 1080,高度为 2042。当我在 setTargetResolution() 中交换宽度和高度以进行图像分析时,imageproxy 中的宽度和高度都为 1088。我的预览视图也被锁定为纵向模式。
最终,我需要将原始图像代理数据和人脸点数据输入到 AR 代码中。因此,仅放大绘制面部点的图形叠加对我来说不起作用。
问:如果无法在 camerax 库中解决此问题,如何缩放从分析器返回的图像代理以匹配预览视图?
我正在使用 Java 和最新的 Camerax 库:
def camerax_version = "1.0.0-beta08"
很难确保预览和图像分析用例具有相同的输出分辨率,因为不同的设备支持不同的分辨率,并且图像分析对其输出的最大分辨率有硬性限制(如文档中所述)。
为了使来自图像分析框架和 UI/PreviewView 的坐标之间的转换更容易,您可以将 preview 和 ImageAnalysis 设置为使用相同的纵横比,例如AspectRatio.RATIO_4_3,以及 PreviewView(例如,通过将其包装在 ConstraintLayout 中,以及对其宽高比设置约束)。这样,将检测到的人脸坐标从分析器映射到 UI 变得更加直接,您可以在此示例中查看它。
或者,您可以使用 CameraX 的ViewPort API,我相信它仍然处于试验阶段。它允许为一组用例定义一个视野,从而使它们的输出匹配并具有所见即所得。您可以在此处找到其用法示例。对于你的情况,你会写这样的东西。
Preview preview = ...
preview.setSurfaceProvider(previewView.getSurfaceProvider());
ImageAnalysis imageAnalysis = ...
imageAnalysis.setAnalyzer(...);
ViewPort viewPort = preview.getViewPort();
UseCaseGroup useCaseGroup = new UseCaseGroup.Builder()
.setViewPort(viewPort)
.addUseCase(preview)
.addUseCase(imageAnalysis)
.build();
cameraProvider.bindToLifecycle(
lifecycleOwner,
cameraSelector,
usecaseGroup);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,您的分析器接收到的每个 ImageProxy 都将包含一个与 PreviewView 显示的内容匹配的裁剪矩形。所以你只需要裁剪你的图像,然后将它传递给人脸检测器。
| 归档时间: |
|
| 查看次数: |
1971 次 |
| 最近记录: |