标签: android-camerax

ImageAnalysis.Analyzer 只触发一次

在最新的 alpha ( alpha08) 中,我似乎无法弄清楚如何正确配置所有内容以便我的Analyzer正常运行。我可以看到它工作一次,然后它再也不会运行了。

由于各种原因,我需要使用 aTextureView所以我不能交换到CameraView

我几乎肯定这是由于与期货相关的事情,但我似乎无法确定。

我的想法很新鲜。任何想法/帮助表示赞赏。

我已经Application使用以下内容配置了我的课程:

override fun getCameraXConfig(): CameraXConfig {
    return Camera2Config.defaultConfig()
}
Run Code Online (Sandbox Code Playgroud)

然后以下是我的MainActivity代码(布局只是 a 中的TextureView一个ConstraintLayout):

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.util.Size
import android.view.Surface
import android.view.TextureView
import androidx.camera.core.*
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.concurrent.futures.CallbackToFutureAdapter
import androidx.core.content.ContextCompat
import androidx.lifecycle.LifecycleOwner
import com.google.common.util.concurrent.ListenableFuture
import java.util.concurrent.Executors

class MainActivity : AppCompatActivity() {

    private lateinit var viewFinder: TextureView
    private lateinit var cameraProviderFuture : ListenableFuture<ProcessCameraProvider> …
Run Code Online (Sandbox Code Playgroud)

android android-camerax

24
推荐指数
1
解决办法
4045
查看次数

CameraX 未正确配置。最可能的原因是您没有在构建中包含默认实现,例如“camera-camera2”

从 更新到 后,androidx.camera:camera-view:1.0.0-alpha32androidx.camera:camera-view:1.1.0-beta01在使用时收到下一个错误CameraX

camerax_version = "1.0.2"

// CameraX
implementation "androidx.camera:camera-core:$camerax_version"
implementation "androidx.camera:camera-camera2:$camerax_version"
implementation "androidx.camera:camera-lifecycle:$camerax_version"
implementation "androidx.camera:camera-view:1.1.0-beta01"
Run Code Online (Sandbox Code Playgroud)

错误

java.lang.IllegalStateException: CameraX is not configured properly. The most likely cause is you did not include a default implementation in your build such as 'camera-camera2'.
    at androidx.camera.core.CameraX.<init>(CameraX.java:109)
    at androidx.camera.lifecycle.ProcessCameraProvider.getOrCreateCameraXInstance(ProcessCameraProvider.java:181)
    at androidx.camera.lifecycle.ProcessCameraProvider.getInstance(ProcessCameraProvider.java:167)
Run Code Online (Sandbox Code Playgroud)

android android-camera android-camerax

18
推荐指数
1
解决办法
1万
查看次数

有没有办法裁剪 Image/ImageProxy (在传递给 MLKit 的分析器之前)?

我将CameraX的分析器用例与 MLKit 的BarcodeScanner. 我想先裁剪从相机接收到的图像的一部分,然后再将其传递到扫描仪。

我现在正在做的是将ImageProxy(我在分析器中收到的)转换为Bitmap,裁剪它,然后将其传递给BarcodeScanner. 缺点是这不是一个非常快速和有效的过程。

我还注意到运行此代码时 Logcat 中收到的警告:

ML Kit 检测到您似乎将相机帧作为位图对象传递给检测器。这是低效的。请对camera2 API使用YUV_420_888格式,对(旧)相机API使用NV21格式,并将字节数组直接传递给ML Kit。

不进行转换固然很好ImageProxy,但是如何裁剪我想要分析的矩形呢?

我已经尝试过设置(imageProxy.image.cropRect) 类cropRect的字段Image,但它似乎并不影响最终结果。

android android-image android-camera2 android-camerax google-mlkit

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

java.lang.BootstrapMethodError:CameraX (1.0.0-alpha06) 上调用站点#2 bootstrap 方法的异常

我正在尝试使用 CameraX API 来获取照片,但是在我更新到新的 API 版本 1.0.0-alpha06 后,它开始崩溃

CameraX.bindToLifecycle(...)
Run Code Online (Sandbox Code Playgroud)

方法。

错误日志是:

Process: com.aximetria.aximetria.debug, PID: 2629
    java.lang.BootstrapMethodError: Exception from call site #2 bootstrap method
        at androidx.camera.core.Preview.updateListener(Preview.java:368)
        at androidx.camera.core.Preview.updateOutput(Preview.java:586)
        at androidx.camera.core.Preview.updateConfigAndOutput(Preview.java:363)
        at androidx.camera.core.Preview.onSuggestedResolutionUpdated(Preview.java:524)
        at androidx.camera.core.UseCase.updateSuggestedResolution(UseCase.java:408)
        at androidx.camera.core.CameraX.calculateSuggestedResolutions(CameraX.java:684)
        at androidx.camera.core.CameraX.bindToLifecycle(CameraX.java:195)
        at com.aximetria.aximetria.ui.main.profile.avatar.TakeAvatarPhotoFragment.initCamera(TakeAvatarPhotoFragment.kt:169)
        at com.aximetria.aximetria.ui.main.profile.avatar.TakeAvatarPhotoFragment.initCamera$default(TakeAvatarPhotoFragment.kt:117)
        at com.aximetria.aximetria.ui.main.profile.avatar.TakeAvatarPhotoFragment$onViewCreated$1.onPermissionsChecked(TakeAvatarPhotoFragment.kt:55)
    ...
Run Code Online (Sandbox Code Playgroud)

我的代码是:

    private fun initCamera(reverseFacing: Boolean = false) {
        ...

        val previewConfig = PreviewConfig.Builder()
                .setTargetAspectRatio(AspectRatio.RATIO_4_3)
                .setLensFacing(lensFacing)
                .build()

        val preview = Preview(previewConfig)
        preview.setOnPreviewOutputUpdateListener { previewOutput ->
            val parent = binding.preview.parent as ViewGroup
            parent.removeView(binding.preview)
            parent.addView(binding.preview, 0)
            binding.preview.surfaceTexture = previewOutput.surfaceTexture …
Run Code Online (Sandbox Code Playgroud)

crash android android-camerax

12
推荐指数
4
解决办法
1万
查看次数

使用 CameraX 启动和停止相机的正确方法是什么?

我已经开始探索 CameraX 库以及示例应用程序,并且注意到管理生命周期方面存在一些不一致之处。

在本主题中,我将仅讨论预览用例,因为它主要与生命周期相关。

在示例应用程序中, in CameraFragment,用例绑定到CameraXinonViewCreated并取消绑定 in onDestroyViewunbind第一个问题是,如果我们传递LifecycleOwner给方法,我们是否必须使用用例bind?我们可以将它们绑定起来onCreate并将生命周期管理留给 吗CameraX

我还尝试遵循入门教程,其中SurfaceTextureTextureView刚刚被替换。在示例应用程序中,TextureView首先从父级中删除,然后添加,然后SurfaceTexture替换。我们必须这样做吗?是什么原因?

另一件事是,在示例应用程序中,用例是从view.post { }方法绑定的。我在这种方法中遇到了很多问题,因为在将片段放在后台堆栈上、替换为另一个片段并重新创建之后,CameraX 记录了许多消息:

E/CamX: [ERROR][STATS_AEC] aec_led_calibration.cpp:560: aec_led_cal_apply_calibration Invalid pointer 0x7921174000 0x0
E/CamX: [ERROR][STATS_AEC] aec_set.cpp:1346: aec_set_fps_range Aec_Error invalid input 414  E/CamX: [ERROR][STATS_AEC] camxcaecstatsprocessor.cpp:1671 SetAlgoBayerHistValue() Unsupported bayer hist channel! 
E/CamX: [ERROR][STATS  ] camxcaecstatsprocessor.cpp:3194 ProcessRequestFastAE() [FastAE] Failed to apply gain to …
Run Code Online (Sandbox Code Playgroud)

android android-camerax

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

CameraX.bindToLifecycle() 发生错误

java.lang.IllegalArgumentException:找不到相机设备支持的表面组合 - Id:0。可能试图绑定太多用例。

为什么bindToLifecycle()只能选择 imageCaptureor videoCapture

 CameraX.bindToLifecycle(lifecycleOwner, mPreview, imageCapture,videoCapture)
Run Code Online (Sandbox Code Playgroud)

android android-camerax

11
推荐指数
3
解决办法
5599
查看次数

如何在 Android CameraX 中使用手动对焦?

我正在尝试像在 Camera2 API 中一样对 CameraX 进行手动对焦

在 Camera2 API 中,我使用以下代码

final CaptureRequest.Builder captureBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); 

captureBuilder.set(CaptureRequest.CONTROL_AF_MODE, CaptureRequest.CONTROL_AF_MODE_OFF); 

captureBuilder.set(CaptureRequest.LENS_FOCUS_DISTANCE, mLensFocusDistance);
Run Code Online (Sandbox Code Playgroud)

android camera X 可以手动对焦吗?如果是这样如何

提前致谢

android focus setfocus android-camerax

10
推荐指数
1
解决办法
1901
查看次数

如何在 CameraX 上的相机预览中裁剪图像矩形

我有一个自定义相机应用程序,它具有居中的矩形视图,如下所示:

在此处输入图片说明

当我拍照时,我想忽略矩形外的所有内容。这是我的 XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black_50">

    <TextureView
        android:id="@+id/viewFinder"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:layout_margin="16dp"
        android:background="@drawable/rectangle"
        app:layout_constraintBottom_toTopOf="@+id/cameraBottomView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/cameraBottomView"
        android:layout_width="match_parent"
        android:layout_height="130dp"
        android:background="@color/black_50"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <ImageButton
        android:id="@+id/cameraCaptureImageButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:src="@drawable/ic_capture_image"
        app:layout_constraintBottom_toBottomOf="@id/cameraBottomView"
        app:layout_constraintEnd_toEndOf="@id/cameraBottomView"
        app:layout_constraintStart_toStartOf="@id/cameraBottomView"
        app:layout_constraintTop_toTopOf="@id/cameraBottomView"
        tools:ignore="ContentDescription" />

</androidx.constraintlayout.widget.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)

这是我用于 cameraX 预览的 kotlin 代码:

class CameraFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the …
Run Code Online (Sandbox Code Playgroud)

crop kotlin android-camerax

10
推荐指数
3
解决办法
7793
查看次数

将 Firebase MLKit 边界框坐标转换为屏幕视图坐标

我正在使用FirebaseVision对象检测从CameraX相机预览中检测事物。它正在检测找到的东西,但我试图绘制通过相机预览检测到的项目的边界框。这样做时,firebase 返回的边界框不适用于图像本身,而不是它们出现在错误位置的预览视图。

我从 firebase 返回的图像大小是1200x1600,预览大小是2425x1440

如何将从 firebase 返回的边界框转换为正确的屏幕坐标?

android firebase-mlkit android-camerax

10
推荐指数
1
解决办法
1463
查看次数

旋转的 Android CameraX 图像

我已经按照 Google CameraX代码实验室来实现自定义相机。相机预览很好,但是当我在旋转图像捕获图像后拍摄图像时。我正在以纵向模式拍摄图像,但保存的图像是横向的。这是配置相机的方法

private fun startCamera() {

    val cameraProviderFuture = ProcessCameraProvider.getInstance(this)

    cameraProviderFuture.addListener(Runnable {
        // Used to bind the lifecycle of cameras to the lifecycle owner
        val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

        // Preview
        val preview = Preview.Builder()
            .setTargetRotation(this.windowManager.defaultDisplay.rotation)
            .build()
            .also {
                it.setSurfaceProvider(viewFinder.createSurfaceProvider())
            }

        imageCapture = ImageCapture.Builder()
            .setTargetRotation(this.windowManager.defaultDisplay.rotation)
            .build()

        val imageAnalyzer = ImageAnalysis.Builder()
            .build()
            .also {
                it.setAnalyzer(cameraExecutor, LuminosityAnalyzer { luma ->
                    Log.d(TAG, "Average luminosity: $luma")
                })
            }

        // Select back camera as a default
        val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

        try { …
Run Code Online (Sandbox Code Playgroud)

android image-rotation android-orientation android-camera2 android-camerax

10
推荐指数
2
解决办法
3212
查看次数