如何在android studio中获取camera2 api中的每一帧,例如camera api中的PreviewCallback和camerax中的ImageAnalysis.Analyzer?
Posted
技术标签:
【中文标题】如何在android studio中获取camera2 api中的每一帧,例如camera api中的PreviewCallback和camerax中的ImageAnalysis.Analyzer?【英文标题】:How can I get each frame in camera2 api in android studio like PreviewCallback in camera api and ImageAnalysis.Analyzer in camerax? 【发布时间】:2021-04-20 18:09:47 【问题描述】:如何在 android studio 中获取 Camera2 api 中的每一帧,例如 Camera api 中的 PreviewCallback 和 Camerax 中的 ImageAnalysis.Analyzer?我查看了其他问题,但他们没有正确回答我的问题。
【问题讨论】:
你能详细解释一下吗? 【参考方案1】:基本上,使用ImageReader。为 YUV_420_888 配置它,并让它的 Surface 用作相机会话配置的一部分。
然后将其 Surface 包含在您发送到相机的每个 CaptureRequest 中,并在 ImageReader.OnImageAvailableListener()
中处理新帧。
【讨论】:
能否给我看一些代码示例? 您可以在 Google 的 Camera2Basic (github.com/googlearchive/android-Camera2Basic/blob/master/…) 示例中看到使用 ImageReader 进行 JPEG 仍然捕获的基础知识。要在每一帧都使用它,请改用 YUV_420_888,并将 ImageReader Surface 包含在重复的预览请求中,而不仅仅是静态捕获请求。【参考方案2】:试试下面的代码。
val surface: Surface = imageReader.surface
val captureRequest = camera.createCaptureRequest(
CameraDevice.TEMPLATE_PREVIEW
).apply
addTarget(surface)
addTarget(fragmentCameraBinding.viewFinder.holder.surface)
// This will keep sending the capture request as frequently as possible
until the session is torn down or session.stopRepeating() is called
session.setRepeatingRequest(captureRequest.build(), null, cameraHandler)
imageReader.setOnImageAvailableListener( reader ->
val image = reader.acquireLatestImage()
Log.d(TAG, "Image available in queue: $image.timestamp")
image.close()
, imageReaderHandler)
【讨论】:
以上是关于如何在android studio中获取camera2 api中的每一帧,例如camera api中的PreviewCallback和camerax中的ImageAnalysis.Analyzer?的主要内容,如果未能解决你的问题,请参考以下文章
如何解决 JSONArray 问题,无法获取数据,Android Studio
Twitter 如何在 Android Studio 中使用 Fabric 插件获取用户个人资料图片
如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?
如何在 Android Studio 上获取 Sqlite 数据库中插入数据的实时视图