标签: android-camerax

CameraX 相机加载速度慢

因此,我从使用旧版相机 api 迁移到了 CameraX,尽管设置起来非常简单,但我注意到了一个问题。现在,如果不是比以前更长的时间开始显示预览,相机似乎需要几乎两倍的时间。我正在 Galaxy s7 上进行测试。我的代码如下所示:

val previewConfig = PreviewConfig.Builder().apply {
    setTargetAspectRatio(Rational(1, 1))
    setTargetResolution(Size(binding.codeScannerView.width, binding.codeScannerView.height))
}.build()

val preview = Preview(previewConfig)

preview.setOnPreviewOutputUpdateListener { preview ->
    val parent = binding.codeScannerView.parent as ViewGroup
    parent.removeView(binding.codeScannerView)
    parent.addView(binding.codeScannerView, 0)
    binding.codeScannerView.surfaceTexture = preview.surfaceTexture
}

val analyzerConfig = ImageAnalysisConfig.Builder().apply {
    val analyzerThread = HandlerThread(
            "QrCodeReader").apply { start() }
    setCallbackHandler(Handler(analyzerThread.looper))
    setImageReaderMode(
            ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
}.build()

val analyzerUseCase = ImageAnalysis(analyzerConfig).apply {
    analyzer = QrCodeAnalyzer(requireContext(), Handler(), { qrCode ->
        if (activity == null) {
            return@QrCodeAnalyzer
        }
        presenter.disableCameraPreview()
        presenter.updateTable(qrCode.toLowerCase().parseTableId(), isFromOrder, Screens.MENU_SCREEN)
    })
} …
Run Code Online (Sandbox Code Playgroud)

android android-camerax

3
推荐指数
1
解决办法
1691
查看次数

无法从包 androidx.camera.core 导入 PreviewConfig 类

我正在尝试将 camerax api 用于相机应用程序,但我遇到了问题。类 PreviewConfig 无法解析。这是我的 build.gradle(app) 文件

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.2"
    defaultConfig {
        applicationId "com.example.cameraapi"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        targetCompatibility = 1.8
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    // CameraX core library
    def camerax_version = "1.0.0-alpha09"
    implementation "androidx.camera:camera-core:${camerax_version}"
    implementation "androidx.camera:camera-camera2:${camerax_version}"
    // …
Run Code Online (Sandbox Code Playgroud)

android android-studio android-camerax

3
推荐指数
2
解决办法
4061
查看次数

CameraX PreviewView 不显示任何内容

我遵循了这些教程: https://developer.android.com/training/camerax/preview,https : //proandroiddev.com/update-android-camerax-4a44c3e4cdcc 第一次运行应用程序时预览工作正常,但是在旋转屏幕后全部坏了。我重新安装了应用程序,但预览不再起作用

public class ScanActivity extends AppCompatActivity {


private ListenableFuture<ProcessCameraProvider> cameraProviderFuture;

private PreviewView cameraView;
private Preview imagePreview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_scan);
    cameraView = findViewById(R.id.cameraView);
    cameraProviderFuture = ProcessCameraProvider.getInstance(this);
    if(isPermissionsGranted()){
        cameraView.post(new Runnable() {
            @Override
            public void run() {
                startCamera();
            }
        });
    }
    else{
        ActivityCompat.requestPermissions(ScanActivity.this,
                new String[]{Manifest.permission.CAMERA},PERMISSION_REQUEST_CODE);
    }
}

private void startCamera(){
  imagePreview = new Preview.Builder()
           .setTargetRotation(cameraView.getDisplay().getRotation())
           .build();
  imagePreview.setSurfaceProvider(cameraView.getPreviewSurfaceProvider());
  final CameraSelector cameraSelector = new CameraSelector.Builder()
                            .requireLensFacing(CameraSelector.LENS_FACING_BACK)
                            .build();
  cameraProviderFuture.addListener(() -> {
      try {
          ProcessCameraProvider cameraProvider = cameraProviderFuture.get(); …
Run Code Online (Sandbox Code Playgroud)

java android android-camerax

3
推荐指数
1
解决办法
2214
查看次数

每次在 CameraX 库中创建预览后,bindToLifecycle() 是否需要打开/关闭/自动闪光

据我从许多实现中了解到,例如:

https://github.com/android/camera-samples/tree/master/CameraXBasic

https://proandroiddev.com/android-camerax-preview-analyze-capture-1b3f403a9395

在 CameraX 实现中的每个用例之后,都需要调用cameraProvide.bindToLifecycle()方法。

例如,如果我需要将相机的 FLASH_MODE 从默认的关闭模式切换为打开,则需要再次调用 bindToLifecycle() 方法。

这种方法的缺点是,预览会在一两秒钟内被删除并重新附加,这对于应用程序来说感觉不是一个平滑的过渡。

是否有更好的做法,或者这是限制?

我在下面附上了示例代码:

   private void bindCameraUseCase() {
    int screenAspectRatio = getAspectRatio(previewView.getWidth(), previewView.getHeight());
    int rotation = previewView.getDisplay().getRotation();
    preview = new Preview.Builder()
            .setTargetAspectRatio(screenAspectRatio)
            .setTargetRotation(rotation)
            .build();
    cameraSelector = new CameraSelector.Builder()
            .requireLensFacing(lensFacing)
            .build();
    imageCapture = new ImageCapture.Builder()
            .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
            .setTargetAspectRatio(screenAspectRatio)
            .setTargetRotation(rotation)
            .setFlashMode(flashMode)
            .build();
    // Must unbind the use-cases before rebinding them
    cameraProvider.unbindAll();
    preview.setSurfaceProvider(previewView.createSurfaceProvider());
    camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture);
}
Run Code Online (Sandbox Code Playgroud)

并切换手电筒:

    private void toggleFlash(){
    Log.d(TAG, "toggleFlash: "+flashMode);
    switch (flashMode){
        case …
Run Code Online (Sandbox Code Playgroud)

android android-camerax

3
推荐指数
1
解决办法
2047
查看次数

CameraX ML KIT 给出错误“ java.lang.IllegalStateException:图像已关闭

我想使用 Google ML Kit 和 CameraX API 制作实时图像分类器。我正在使用 CameraX API 的预览和分析。它给出的错误为

    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err: Caused by: java.lang.IllegalStateException: Image is already closed
    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err:     at android.media.Image.throwISEIfImageIsInvalid(Image.java:68)
    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err:     at android.media.ImageReader$SurfaceImage$SurfacePlane.getBuffer(ImageReader.java:832)
    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err:     at com.google.mlkit.vision.common.internal.ImageConvertUtils.zza(com.google.mlkit:vision-common@@16.0.0:139)
    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err:     at com.google.mlkit.vision.common.internal.ImageConvertUtils.convertToUpRightBitmap(com.google.mlkit:vision-common@@16.0.0:89)
    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err:     at com.google.mlkit.vision.common.internal.ImageConvertUtils.getUpRightBitmap(com.google.mlkit:vision-common@@16.0.0:10)
    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err:     at com.google.mlkit.vision.label.automl.internal.zzo.zza(com.google.mlkit:image-labeling-automl@@16.0.0:16)
    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err:     at com.google.mlkit.vision.label.automl.internal.zzo.run(com.google.mlkit:image-labeling-automl@@16.0.0:60)
    2020-07-27 01:17:18.145 11009-11009/com.example.camerax_automl W/System.err:     at com.google.mlkit.vision.common.internal.MobileVisionBase.zza(com.google.mlkit:vision-common@@16.0.0:23)
    2020-07-27 01:17:18.146 11009-11009/com.example.camerax_automl W/System.err:     at com.google.mlkit.vision.common.internal.zzb.call(com.google.mlkit:vision-common@@16.0.0)
    2020-07-27 01:17:18.146 11009-11009/com.example.camerax_automl W/System.err: …
Run Code Online (Sandbox Code Playgroud)

android firebase-mlkit android-camerax google-mlkit

3
推荐指数
1
解决办法
2636
查看次数

Android CameraX - 手动更改曝光补偿?

我在我的项目中使用 CameraX。我已经创建了预览用例并捕获用例。

final CameraSelector cameraSelector = new CameraSelector.Builder().requireLensFacing(lensFacing).build();

        previewBuilder = new Preview.Builder()
            .setTargetResolution(targetOutputSize)
            .setTargetRotation(rotation);

        preview = previewBuilder.build();

        final ImageCapture.Builder imageCaptureBuilder = new ImageCapture.Builder()
            .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
            .setTargetResolution(targetOutputSize)
            .setTargetRotation(rotation);

        imageCapture = imageCaptureBuilder.build();
Run Code Online (Sandbox Code Playgroud)

一切正常。现在,我需要添加功能来手动更改曝光补偿,但我在官方文档或其他任何地方找不到如何执行此操作的任何参考。是否可以使用 CameraX,或者我需要切换到 Camera2 API?

请,欢迎任何帮助。

java android autoexposurecompensation android-camerax

3
推荐指数
1
解决办法
2753
查看次数

CameraX Image analysis的imageproxy大小和PreviewView大小不一样

我正在尝试使用 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"

android analysis image android-camerax

3
推荐指数
1
解决办法
1971
查看次数

如何使用 CameraX 将 PreviewView 纵横比与捕获的图像相匹配

我有一个PreviewView占据整个屏幕但工具栏除外。相机的预览效果很好,但是当我拍摄图像时,纵横比完全不同。

我想在成功捕获后向用户显示图像,因此它的大小与 相同,PreviewView因此我不必裁剪或拉伸它。

是否可以在每个设备上更改纵横比,它是它的大小PreviewView还是我必须将其设置为固定值?

android kotlin android-camera2 android-camerax

3
推荐指数
1
解决办法
848
查看次数

CameraX ProcessCameraProvider 与 CameraController - 何时使用哪一个?

有人可以澄清一下,我应该何时使用androidx.camera.view.CameraController以及何时使用androidx.camera.lifecycle.ProcessCameraProvider?两者似乎都能够使用生命周期事件启动/停止相机,处理不同的用例(预览、拍照、图像分析)。两者都可以与androidx.camera.lifecycle.PreviewView.

androidx android-camerax

3
推荐指数
1
解决办法
3207
查看次数

我们如何使用 CameraX 获取预览帧?

我正在开发一个项目,该项目使用 CameraX 在TextureView. 代码来自这个codelab。我已经使用该setOnPreviewOutputUpdateListener()方法更新TextureView.

private fun startCamera() {
    val previewConfig = PreviewConfig.Builder().apply {
        setTargetAspectRatio( Rational( 1 , 1 ) )
        setTargetResolution( Size( 640 , 640 ) )
    }.build()
    val preview = Preview( previewConfig )
    preview.setOnPreviewOutputUpdateListener {
        val parent = cameraTextureView?.parent as ViewGroup
        parent.removeView( cameraTextureView )
        cameraTextureView?.surfaceTexture = it.surfaceTexture
        parent.addView( cameraTextureView , 0)
        updateTransform()
    }
    preview.removePreviewOutputListener()
    CameraX.bindToLifecycle( this , preview )
}
Run Code Online (Sandbox Code Playgroud)

我的问题是如何byte[]使用 CameraX 从预览帧中获取原始对象。我期待类似于onPreviewFrame(byte[] data, Camera camera)方法的东西。

基本上,我想要使用 …

android android-camera android-camerax

2
推荐指数
1
解决办法
2501
查看次数