小秦哥 发表于 2024-10-24 18:29:05

Android Camera2 与 Camera API技术探究和RAW数据收罗

Android Camera2

Android Camera2 是 Android 系统中用于相机利用的一套高级应用程序接口(API),它取代了之前的 Camera API。以下是关于 Android Camera2 的一些重要信息:
一 重要特点:

[*]强盛的控制能力:提供对相机更深入的控制,允许开发者精确设置对焦模式、曝光模式、快门速度、白均衡、增益等各种拍摄参数,能够满足复杂的拍摄需求,例如专业摄影应用或对图像质量有较高要求的场景。
[*]多流输出支持:单个相机设备可以同时输出多个流,每个流针对差别的使用场景进行了优化,如预览、照相、视频录制或图像分析等。这使得开发者可以根据应用的详细需求灵活地获取和处置处罚差别类型的图像数据。
[*]高效的数据处置处罚:支持高效的零复制连拍和视频流功能,能够快速地获取和处置处罚一连的图像数据,提高了相机的响应速度和数据处置处罚效率。
二 核心类与组件:

[*]CameraManager:用于管理系统中的相机设备,提供了获取相机设备列表、打开指定相机以及获取相机特性等方法。开发者可以通过它来检测系统中可用的相机,并获取相机的干系信息以进行后续的利用。
[*]CameraDevice:代表系统中的摄像头硬件设备,负责创建与相机的连接,并管理相机的状态。它可以创建 CaptureSession(捕获会话)以及 CaptureRequest(捕获哀求),是与相机硬件进行交互的核心类。
[*]CameraCharacteristics:描述了特定相机设备所支持的各种特性,通过 CameraManager 获取。开发者可以根据这些特性来判断相机的能力,例如是否支持主动对焦、是否支持特定的分辨率等,以便在应用中进行相应的设置和处置处罚。
[*]CameraCaptureSession:是应用程序与相机设备之间进行数据传输和交互的会话。当程序需要预览、照相或录制视频时,都需要创建一个 CameraCaptureSession。它管理着 CaptureRequest 的队列,将开发者设置的拍摄参数传递给相机设备,并吸收相机返回的图像数据。
[*]CaptureRequest 和 CaptureRequest.Builder:CaptureRequest 代表了一次捕获哀求,用于描述捕获图片或视频的各种参数设置,如对焦模式、曝光模式、分辨率等。CaptureRequest.Builder 则负责天生 CaptureRequest 对象,方便开发者设置各种参数。
三 使用步骤:

[*]获取 CameraManager:首先需要获取 CameraManager 对象,这是进行所有相机利用的前提。可以通过 Context.getSystemService(Context.CAMERA_SERVICE) 方法来获取 CameraManager。
[*]打开相机设备:使用 CameraManager 的 openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler) 方法打开指定的摄像头。此中,cameraId 是要打开的摄像头的标识符,callback 用于监听摄像头的状态变化,handler 表现执行回调的线程。
[*]创建 CameraCaptureSession:当摄像头打开后,通过 CameraDevice.createCaptureSession(List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler) 方法创建 CameraCaptureSession。outputs 是一个包含所有需要从该摄像头获取图片的 Surface 的列表,callback 用于监听会话的创建过程,handler 表现执行回调的线程。
[*]创建 CaptureRequest:调用 CameraDevice.createCaptureRequest(int templateType) 方法创建 CaptureRequest.Builder,此中 templateType 可以是 TEMPLATE_PREVIEW(预览)、TEMPLATE_RECORD(拍摄视频)、TEMPLATE_STILL_CAPTURE(照相)等。然后使用 CaptureRequest.Builder 设置照相的各种参数。
[*]开始预览或照相:调用 CameraCaptureSession.setRepeatingRequest() 方法开始预览,或调用 capture() 方法进行照相。照相的优先级比预览的优先级高,如果需要多次照相,可以多次调用 capture() 方法。
四 支持的版本和兼容性:
Android Camera2 从 Android 5.0(API 级别 21)开始支持。但需要留意的是,固然 Android 5.0 及更高版本的设备支持 Camera2,但部门设备可能并不支持所有的 Camera2 功能。在实际开发中,需要根据设备的详细特性和支持情况进行适配和处置处罚。

相比Camera API技术优势

Android Camera2 与 Camera API 相比,具有以下优势:
1.功能与控制方:

[*]更多的手动控制选项:
[*]Camera2 提供了丰富的手动设置功能,如曝光时间、ISO 感光度、对焦模式、焦距等参数都可以由开发者手动设置和精确调整,能够满足专业摄影或对图像质量有较高要求的场景。而 Camera API 的手动控制功能非常有限,通常只能实现简单的主动调节拍摄。
[*]例如,在光线复杂的环境中,使用 Camera2 可以根据实际需求手动调整曝光时间,以得到更正确的曝光结果,克制画面过亮或过暗;在拍摄特写镜头时,可以手动设置对焦模式和焦距,确保主体清晰。
[*]支持 RAW 图像捕获:Camera2 支持 RAW 格式的图像捕获,RAW 格式的图像包含了更多的原始图像信息,为后期处置处罚提供了更大的空间和更高的灵活性,可以让用户在后期对图像的色彩、对比度、锐度等进行更精细的调整。相比之下,Camera API 通常只能获取经过压缩和处置处罚的图像格式,丢失了很多原始信息14。
[*]高速连拍模式:Camera2 支持高速连拍功能,能够以更快的速度一连拍摄多张照片,这对于捕获快速活动的物体或瞬间的出色场景非常有资助。而在 Camera API 中,实现连拍功能相对较为困难,且连拍速度和结果可能不尽如人意。
2. 性能优化方面:

[*]并行处置处罚能力:Camera2 支持并行拍摄和预览,在同时进行多个利用时表现更好,可以在预览的同时进行照相、录像等利用,并且不会相互干扰,提高了相机的使用效率和响应速度。而在 Camera API 中,切换差别的拍摄模式(如从预览模式切换到照相模式)可能会比较耗时,影响用户体验。
[*]高效的数据处置处罚:Camera2 接纳了更高效的数据处置处罚方式,能够快速地获取和处置处罚图像数据,镌汰了数据传输和处置处罚的延迟。例如,在拍摄视频时,Camera2 可以更流通地获取和编码视频数据,低沉了视频的卡顿征象5。

3.架构与兼容性方面:

[*]更灵活的架构:Camera2 的架构更加灵活,将相机系统塑造为一个管道,该管道可按照 1:1 的基准将传入的帧捕获哀求转化为帧,并将图像数据的缓冲区输出到设置的目的 Surface 中。这种架构使得开发者可以更方便地定制和扩展相机的功能,实现各种复杂的拍摄需求。
[*]更好的兼容性:固然 Camera API 在早期的 Android 版本中广泛使用,但随着 Android 系统的不停升级,Camera2 逐渐成为了 Android 相机功能的重要 API。新的 Android 版本会对 Camera2 进行更好的优化和支持,而 Camera API 可能会逐渐被镌汰,使用 Camera2 可以更好地保证应用在差别 Android 版本上的兼容性。
4 设备特性支持与检测方面

[*]设备能力检测:通过 CameraCharacteristics 类,Camera2 可以方便地检查设备相机的各种特性和功能,开发者可以根据设备的支持情况来动态地调整相机的设置和功能,提高了应用的顺应性和稳定性。例如,在应用启动时,可以先检测设备是否支持手动对焦功能,如果支持则开启手动对焦选项,否则隐藏该选项,克制出现功能不可用的情况。
[*]支持更多新硬件特性:随动手机硬件的不停发展,新的相机硬件特性不停涌现,Camera2 能够更好地支持这些新特性,如更高的分辨率、更快的对焦速度、更好的低光性能等,为用户提供更好的拍摄体验。

Android Camera2 RAW图像捕获

要使用 Android Camera2 进行 RAW 图像捕获,你可以按照以下步骤进行利用:

[*]检查设备支持:首先,确保你的设备支持 Camera2 API 并且支持 RAW 图像捕获。你可以通过查询设备的 CameraCharacteristics 来获取干系信息123。
[*]获取 CameraManager:通过Context.getSystemService(Context.CAMERA_SERVICE)获取 CameraManager 实例123。
[*]打开相机设备:使用 CameraManager 的openCamera(String cameraId, CameraDevice.StateCallback callback, Handler handler)方法打开相机设备。你需要指定要打开的相机 ID 以及相应的回调和处置处罚程序123。
[*]创建 CaptureRequest.Builder:创建一个 CaptureRequest.Builder 对象,并设置干系的参数,如对焦模式、曝光模式等。同时,将图像格式设置为ImageFormat.RAW_SENSOR以指定捕获 RAW 图像1。
[*]创建 CameraCaptureSession:使用 CameraDevice 的createCaptureSession(List<Surface> outputs, CameraCaptureSession.StateCallback callback, Handler handler)方法创建一个 CameraCaptureSession。将包含 RAW 图像的 Surface 添加到输出列表中1。
[*]开始捕获:调用 CameraCaptureSession 的capture(CaptureRequest request, CameraCaptureSession.CaptureCallback callback, Handler handler)方法开始捕获 RAW 图像。你可以指定相应的回调来处置处罚捕获结果1。
[*]处置处罚 RAW 图像数据:在 CaptureCallback 的onCaptureCompleted方法中,你将吸收到包含 RAW 图像数据的 CaptureResult 对象。你可以从 CaptureResult 中获取图像数据,并进行相应的处置处罚或保存。
                        
原文链接:https://blog.csdn.net/renhui1112/article/details/142671948

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Android Camera2 与 Camera API技术探究和RAW数据收罗