标签: android-camerax

Android CameraX 预览(取景器)质量不佳

我在使用 CameraX 示例应用程序进行预览时遇到问题。预装相机应用程序的预览质量优于 CameraX 示例的预览,照片质量还可以。在示例项目中,触摸焦点也被实现,所以我认为这不是问题。我正在使用此代码来设置预览用例。可能出了什么问题?

private fun buildPreviewUseCase(): Preview {
    val display = viewFinder.display
    val metrics = DisplayMetrics().also { display.getMetrics(it) }
    val preview = Preview.Builder()
            .setTargetRotation(display.rotation)
            .setTargetResolution(Size(metrics.widthPixels, metrics.heightPixels))
            .build()
            .apply {
                previewSurfaceProvider = viewFinder.previewSurfaceProvider
            }
    preview.previewSurfaceProvider = viewFinder.previewSurfaceProvider
    return preview
}
Run Code Online (Sandbox Code Playgroud)

CameraX 示例的预览

在此输入图像描述

预装相机应用程序的预览

在此输入图像描述

camera android preview android-camera android-camerax

5
推荐指数
1
解决办法
1429
查看次数

当我使用CameraX的代码“imageCapture.takePicture”时没有任何反应

我正在尝试探索cameraX beta版本。

我陷入了我的实施之中。 imageCapture.takePicture() imageCapture 为空。

        // Bind the CameraProvider to the LifeCycleOwner
    val cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build()
    val cameraProviderFuture = ProcessCameraProvider.getInstance(this)
    cameraProviderFuture.addListener(Runnable {

    // CameraProvider
    val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()

    // ImageCapture
    imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()


        // Must unbind the use-cases before rebinding them
        cameraProvider.unbindAll()

        try {
            // A variable number of use-cases can be passed here -
            // camera provides access to CameraControl & CameraInfo
            camera = cameraProvider.bindToLifecycle(
                this, cameraSelector, imageCapture)
        } catch(exc: Exception) {
            Log.e("TAG", "Use case …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-camerax

5
推荐指数
1
解决办法
2677
查看次数

Android-CameraX:在多个前置摄像头之间切换

我\xc2\xb4m 尝试编写我的第一个Android 相机应用程序,但它总是选择变焦相机而不是主相机。(我在华为P30 Pro上测试过)

\n\n

该代码基于官方的camerax示例应用程序(https://github.com/android/camera-samples/tree/master/CameraXBasic

\n\n

相关代码:

\n\n
/** Declare and bind preview, capture and analysis use cases */\nprivate fun bindCameraUseCases() {\n\n    // Get screen metrics used to setup camera for full screen resolution\n    val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }\n    Log.d(TAG, "Screen metrics: ${metrics.widthPixels} x ${metrics.heightPixels}")\n\n    val screenAspectRatio = aspectRatio(metrics.widthPixels, metrics.heightPixels)\n    Log.d(TAG, "Preview aspect ratio: $screenAspectRatio")\n\n    val rotation = viewFinder.display.rotation\n\n    // Bind the CameraProvider to the LifeCycleOwner\n\n    val cameraSelector = CameraSelector.Builder().requireLensFacing(lensFacing).build()\n\n    val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())\n    cameraProviderFuture.addListener(Runnable …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-camerax

5
推荐指数
1
解决办法
8467
查看次数

如何在 MediaCodec 编码器和 CameraX 之间共享 Surface

CameraX我想从(预览用例)获取图像并使用 .h.264 视频将它们编码为 h.264 视频MediaCodec。我怎样才能做到这一点?我正在尝试的是,通过使用.in来使用Surface返回的值。我从该设置中继承了一个类,并配置我的编码器和覆盖以从. 这预计会起作用吗?我真的可以共享这样的 Surface 并期望 CameraX 写入此 Surface 并填充我的编码器的输入吗?MediaCodec.createInputSurface()Preview.Builder()Preview.setSurfaceProvider()Preview.SurfaceProvideronSurfaceRequested()SurfacecreateInputSurface()

是否有更有效的方法来对实时 CameraX 源进行编码?

注意:我使用的是 KOTLIN

android kotlin-android-extensions android-mediacodec android-camerax

5
推荐指数
1
解决办法
1389
查看次数

如何在PreviewView上绘图?

我有一个 PreviewView 实例,我想使用 Firebase 和图像分析器用例根据对象标识在其上绘制一个矩形。

然而,与 Text/SurfaceView 不同,PreviewView 不允许在其上绘制任何 Canvas。

还有什么选择呢?

进一步编辑:

之前尝试过以下方法:

Canvas objectFrameCanvas = new Canvas();
Paint pen = new Paint();
pen.setColor(Color.RED);
pen.setStrokeWidth(8F);
pen.setStyle(Paint.Style.STROKE);

objectFrameCanvas.drawRect(100,150,200, 250, pen);

TextureView textureView = new TextureView(this);
textureView.draw(objectFrameCanvas);

mPreviewView.addView(textureView);
Run Code Online (Sandbox Code Playgroud)

为视图组创建一个子视图:textureView。创建新的画布对象FrameCanvas,在其上绘制矩形,然后在textureView上绘制画布。然后将其添加到视图组(PreviewView)

仍然没有给我应有的必要结果。

顺便说一句,我在我的 ImageAnanysis 用例中使用了它

imageAnalysis.setAnalyzer(executor, new ImageAnalysis.Analyzer() {....}
Run Code Online (Sandbox Code Playgroud)

androidx android-camerax

5
推荐指数
1
解决办法
5743
查看次数

当使用 Samsung S20 将 imageproxy 转换为位图时,cameraX 中分析的绿色位图

我已经使用底部代码了。但是,当我仅使用最新智能手机的 imageproxy 进行位图时,它显示为绿色位图。比如三星s20

底部代码在过去的设备上运行良好谁有问题?

在此输入图像描述

fun Image.toBitmap(): Bitmap {
val yBuffer = planes[0].buffer // Y
val uBuffer = planes[1].buffer // U
val vBuffer = planes[2].buffer // V

val ySize = yBuffer.remaining()
val uSize = uBuffer.remaining()
val vSize = vBuffer.remaining()

val nv21 = ByteArray(ySize + uSize + vSize)

//U and V are swapped
yBuffer.get(nv21, 0, ySize)
vBuffer.get(nv21, ySize, vSize)
uBuffer.get(nv21, ySize + vSize, uSize)

val yuvImage = YuvImage(nv21, ImageFormat.NV21, this.width, this.height, null)
val out = ByteArrayOutputStream()
yuvImage.compressToJpeg(Rect(0, 0, yuvImage.width, yuvImage.height), 50, out) …
Run Code Online (Sandbox Code Playgroud)

android image bitmap android-camerax

5
推荐指数
1
解决办法
768
查看次数

如何在CameraX中镜像PreviewView?

免责声明:我知道这个问题的存在,但它目前尚未解决,我试图提供额外的信息,而不用无用的答案污染该问题,无论如何都无法解决问题。

我有一个带有默认镜像的前置摄像头的自定义设备,因此我想正常显示预览,并且需要水平翻转PreviewView的内容,但我被卡住了。过去其他人建议使用,PreviewView#setScaleX(-1)但它要么根本不起作用,要么需要在代码中的一个非常特定的点调用它,而我还没有找到。

下面的代码是CameraFragment.kt官方CameraXBasic示例中的简化版本;我已经添加了评论,我已经厌倦了打电话viewFinder.scaleX = -1f但没有成功。老实说,我真的不认为这个地方有什么区别,因为如果我用 1 以外的任何值调用它,它与 和 都可以正常工作scaleXscaleY它总是忽略负号,所以它永远不会翻转。

private lateinit var viewFinder: PreviewView

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    ...
    viewFinder = view.findViewById(R.id.view_finder)
    // HERE
    viewFinder.post {
        // HERE
        setupCamera()
    }
}

private fun setupCamera() {
    val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())
    cameraProviderFuture.addListener(Runnable {
        val cameraProvider = cameraProviderFuture.get()

        val cameraSelector = CameraSelector.Builder()
            .requireLensFacing(CameraSelector.LENS_FACING_FRONT)
            .build()

       val preview = Preview.Builder()
            .build()
            .also {
                // HERE
                it.setSurfaceProvider(viewFinder.surfaceProvider)
            } …
Run Code Online (Sandbox Code Playgroud)

android android-view android-camerax

5
推荐指数
1
解决办法
3041
查看次数

如何在服务或接收器中使用没有 XML 和 PreviewView 的 CameraX?

我想在没有任何 xml 和 PreviewView 或其他用于显示图片的东西的情况下使用 CameraX 拍照,但我有问题。

android android-camera android-camera2 android-camerax

5
推荐指数
1
解决办法
1426
查看次数

在 CameraX 中使用 CameraCaptureSession.CaptureCallback()

在相机 1 中,我们有FaceDetectionListener方法camera.startFaceDetection()。使用这种方式可以更容易地找到面孔。

在相机 2 中,我们可以使用 CameraCaptureSession.CaptureCallback() 方法和此静态变量执行相同操作

Integer mode = result.get(CaptureResult.STATISTICS_FACE_DETECT_MODE);
Face[] faces = result.get(CaptureResult.STATISTICS_FACES);
Run Code Online (Sandbox Code Playgroud)

现在有一个名为 CameraX 的新相机库。它是Camera2的包装,推荐使用。如果是Camera 2的封装,我们可以很容易得到如下的回调结果CameraCaptureSession.CaptureCallback()

但经过三天的尝试,我未能找到解决方案。

谁能给我像camera2一样调用以下方法的解决方案?

在相机2中,

 private val mCaptureCallback = object : CameraCaptureSession.CaptureCallback() {
    override fun onCaptureProgressed(
        session: CameraCaptureSession,
        request: CaptureRequest,
        partialResult: CaptureResult
    ) {
        

    }

    override fun onCaptureCompleted(
        session: CameraCaptureSession,
        request: CaptureRequest,
        result: TotalCaptureResult
    ) {
        
    }
}



mCaptureSession.setRepeatingRequest(mPreviewRequest, mCaptureCallback,
                mBackgroundHandler);
Run Code Online (Sandbox Code Playgroud)

如何使用CameraX获取回调结果?

camera android callback android-camera2 android-camerax

5
推荐指数
1
解决办法
1235
查看次数

如何用camerax拍照?

我仍在练习 Kotlin 和 Android 开发。据我了解,Camera 类已被弃用,Android 邀请使用 Camerax 来代替,因为这个高级类是独立于设备的,并且它们简化了在应用程序上实现相机的过程。

我尝试阅读文档(https://developer.android.com/training/camerax),但它写得太糟糕了,我几乎不明白他们试图解释的内容。所以我去阅读了文档本身给出的整个示例代码(https://github.com/android/camera-samples/tree/main/CameraXBasic)。CameraFragment 代码大约有 500 行长(忽略导入和各种注释)。

我真的需要编写 500 行代码来简单地拍照吗?这怎么能被认为是“比以前简单”呢?

我的意思是,在 Android 编程中,我只需要编写 4 行代码即可要求用户从其存储中选择一个图像并检索它并将其显示在 ImageView 中。有没有一种真正简单的拍照方法,或者我真的需要停下来并失去一整天的工作来编写所有这些代码行?

编辑:获取文档的此页面: https://developer.android.com/training/camerax/architecture#kotlin 它以这段代码开始。

val preview = Preview.Builder().build()
val viewFinder: PreviewView = findViewById(R.id.previewView)

// The use case is bound to an Android Lifecycle with the following code
val camera = cameraProvider.bindToLifecycle(lifecycleOwner, cameraSelector, preview)
Run Code Online (Sandbox Code Playgroud)

CameraProvider 不知从何而来。这应该是什么?我发现它是一个 ProcessCameraProvider,但是我应该如何初始化它?它应该是一个 Lateinit var 还是已经在其他地方初始化了?因为如果我尝试写入,val cameraProvider = ProcessCameraProvider()就会出现错误,那么我该怎么办?什么是cameraSelector参数?之前没有定义过。我发现它是前置摄像头或后置摄像头的选择器,但是阅读该文档的那一页我怎么知道它呢?这份文档怎么可能在发布时存在这些缺陷呢?怎样才能让一个人轻松学习呢?

android kotlin android-camerax

5
推荐指数
1
解决办法
9655
查看次数