Android相机性能提高50%

文章目录

  • 应用举例(可以不看这一part,直接跳过看具体怎么做):
    • Snapchat 通过 Camera2 Extensions API 将新相机功能的集成速度提高了 50%**
    • Camera2 扩展 API 可以访问高级功能
    • 更多设备上的更多机会
  • 正文:开始使用
    • 扩展架构
    • 测试相机设备的 Camera2 Extensions API 兼容性
    • 使用 Camera2 Extensions API 创建 CameraExtensionSession
    • 更多api

应用举例(可以不看这一part,直接跳过看具体怎么做):

Snapchat 通过 Camera2 Extensions API 将新相机功能的集成速度提高了 50%**

在这里插入图片描述

Camera2 扩展 API 可以访问高级功能

Snapchat 团队希望针对不断扩大的 Android 设备选择来优化该应用程序,因为他们知道许多 OEM 厂商都通过各自的相机技术来区分其设备。由于 Snapchat 是一款主要与设备相机配合使用的视觉应用程序,因此团队优化了该应用程序,以充分利用每个设备的独特硬件。

“我们希望利用每个 OEM 的软件来增强 Android 上的 Snapchat 体验,”Snapchat 的软件工程师 Ye Tian 说道。“这将有助于该应用程序获得与设备本机相机提供的质量相当的更高质量的快照。”
在这里插入图片描述

最初的目标是提高应用程序的弱光功能,但最终却带来了更多的结果。Snapchat 团队致力于寻找新的方法来提高应用程序的相机功能,实现夜间模式、人像模式、脸部修饰、点击对焦、变焦等功能。

“我们与 Google Pixel 的合作为与其他 OEM 厂商的合作铺平了道路,只需很少的代码更改即可在其设备中实现夜间模式和超级夜间模式,”Ye 说道。“Camera2 扩展 API 灵活且广泛。Snapchat 现在可以使用它按需构建成熟的应用程序,而不会对性能和稳定性产生负面影响。”

通过 Camera2 Extension API 的实现使 Snapchat 开发人员可以轻松地将更多相机功能添加到应用程序中。通过使用 Android 相机 API 提供的扩展,Snapchat 集成新相机功能的速度比过去使用的典型行业标准方法快了 50%。

在这里插入图片描述

更多设备上的更多机会

Snapchat 团队很高兴使用 Camera2 Extensions API 为其用户提供更具凝聚力的体验。得益于 API 中提供的扩展,开发人员可以轻松地在使用 Android 平台的一系列制造商设备上改进应用程序的相机,而且速度比以前快得多。

“我喜欢Android平台的多样性,并利用每个手机制造商设备的独特优势,”叶说。“它帮助我们将他们的尖端创新引入 Snapchat 应用程序,让 Snapchat 用户更好地捕捉他们的生活瞬间。”

Snapchat 团队期待与更多 OEM 厂商合作,利用 Camera2 Extensions API 进一步提高应用程序跨设备的处理能力。他们还期待使用新的 API 来提高应用程序的向后兼容性,这将使更多用户从扩展中受益。

我建议使用 Camera2 扩展 API。它提供了广泛的功能和稳定的性能,以提高开发人员交付功能的速度。”叶说。

正文:开始使用

Camera2 提供了一个 Extensions API,用于访问设备制造商在各种 Android 设备上实现的扩展。如需查看支持的扩展模式列表,请参阅相机扩展。

如需查看支持扩展的设备列表,请参阅支持的设备。

扩展架构

下图显示了相机扩展程序架构。
请添加图片描述

Camera2 应用可以通过 Camera2 API 使用扩展。Camera2 API 提供了查询可用扩展、配置扩展相机会话以及与相机扩展 OEM 库通信的方法。这样,您的应用就可以使用夜间、HDR、自动、焦外成像或脸部照片修复等扩展程序。

测试相机设备的 Camera2 Extensions API 兼容性

以下代码段会检查设备是否支持 Camera2 Extensions API。并非所有设备都支持扩展,或者设备可能支持一部分扩展。该代码段会返回支持相机扩展的兼容相机 ID 的列表。

private fun getExtensionCameraIds(cameraManager: CameraManager): List =if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {cameraManager.cameraIdList.filter { cameraId ->val characteristics = cameraManager.getCameraCharacteristics(cameraId)val extensionCharacteristics =cameraManager.getCameraExtensionCharacteristics(cameraId)val capabilities =characteristics.get(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES)extensionCharacteristics.supportedExtensions.isNotEmpty() &&capabilities?.contains(CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_BACKWARD_COMPATIBLE) ?: false}} else emptyList()

使用 Camera2 Extensions API 创建 CameraExtensionSession

与兼容的设备搭配使用时,Camera2 Extensions API 可让您访问某些相机扩展。以下代码段举例说明了如何创建 CameraExtensionSession,以便为现有 Camera2 应用使用夜间拍摄模式。

private val captureCallbacks = object : CameraExtensionSession.ExtensionCaptureCallback() {// Implement Capture Callbacks
}
private val extensionSessionStateCallback = object : CameraExtensionSession.StateCallback() {override fun onConfigured(session: CameraExtensionSession) {cameraExtensionSession = sessiontry {val captureRequest =cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW).apply {addTarget(previewSurface)}.build()session.setRepeatingRequest(captureRequest,Dispatchers.IO.asExecutor(),captureCallbacks)} catch (e: CameraAccessException) {Snackbar.make(previewView,"Failed to preview capture request",Snackbar.LENGTH_SHORT).show()requireActivity().finish()}}override fun onClosed(session: CameraExtensionSession) {super.onClosed(session)cameraDevice.close()}override fun onConfigureFailed(session: CameraExtensionSession) {Snackbar.make(previewView,"Failed to start camera extension preview",Snackbar.LENGTH_SHORT).show()requireActivity().finish()}
}private fun startExtensionSession() {val outputConfig = arrayListOf(OutputConfiguration(stillImageReader.surface),OutputConfiguration(previewSurface))val extensionConfiguration = ExtensionSessionConfiguration(CameraExtensionCharacteristics.EXTENSION_NIGHT,outputConfig,Dispatchers.IO.asExecutor(),extensionSessionStateCallback)cameraDevice.createExtensionSession(extensionConfiguration)
}

更多api

按照以上操作,一个基本的获取能力就完成了,如果想要查看更多api。参考 Camera2 Extensions API 示例。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/168603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdlbits系列verilog解答(Exams/m2014 q4h)-44

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路: 二、verilog源码 module top_module (input in,output out);assign out in;endmodule三、仿真结果 转载请注明出处!

达不到的视野

生而有涯,而知无涯。短短几十年,除去识文断字的积累和老眼昏聩的暮年,我们能拿来思考学习的攀登岁月,其实不多。 岁月又不饶人,一定年纪之后熬不了夜,喝不多酒,抽烟都咳嗽,咖啡又怕…

Vatee万腾科技新高峰:Vatee前瞻性创新的数字化之力

Vatee万腾科技,一家以前瞻性创新为核心驱动力的数字化引领者,正迈向新的高峰。其在科技领域的卓越表现不仅体现在技术实力上,更展现在对未来的深刻洞察和独到思考上。 在Vatee的科技舞台上,前瞻性创新如一道独特的光芒&#xff0c…

【Linux】yum -- 软件包管理器

目录 一、Linux中是如何安装软件的 1.1 安装的方法 1.2 安装的本质(基本理解) 二、软件包 2.1 软件包的概念 2.2 为什么要有软件包 三、yum--软件包管理器 3.1 yum的概念 3.2 yum的使用 3.2.1 搜索一个软件 3.2.2 安装一个软件 3.2.3 卸载一个软件 3.3 yum源更新 …

PYTHON从文本中查找并同时删除相邻二行的特定文字

PYTHON从文本中查找并同时删除相邻二行的特定文字 例如同时删除上下行文字: python Copy code def remove__code(input_file, output_file):with open(input_file, r, encodingutf-8) as file:lines file.readlines()with open(output_file, w, encodingutf-8) as…

Node.js入门指南(三)

目录 Node.js 模块化 介绍 模块暴露数据 导入模块 导入模块的基本流程 CommonJS 规范 包管理工具 介绍 npm cnpm yarn nvm的使用 我们上一篇文章介绍了Node.js中的http模块,这篇文章主要介绍Node.js的模块化,包管理工具以及nvm的使用。 Node…

108. 将有序数组转换为二叉搜索树 --力扣 --JAVA

题目 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 解题思路 可以采用二分法,每次选数组中间值为…

Joint Cross-Modal and Unimodal Features for RGB-D Salient Object Detection

提出的模型 the outputs H i m _i^m im​ from the unimodal RGB or depth branch in MFFM FFM means ‘Feature Fusion Module’ 作者未提供代码

优秀软件设计特征与原则

1.摘要 一款软件产品好不好用, 除了拥有丰富的功能和人性化的界面设计之外, 还有其深厚的底层基础, 而设计模式和算法是构建这个底层基础的基石。好的设计模式能够让产品开发快速迭代且稳定可靠, 迅速抢占市场先机;而好的算法能够让产品具有核心价值, 例如字节跳动…

开源WIFI继电器之功能介绍

一、指示灯 有三颗led指示灯,红、绿、蓝。指示灯的状态对应的设备状态如下: 红灯常亮:设备已连接到MQTT服务器; 红灯慢闪: 二、连接wifi路由器 长按按键(GPIO0)超过5s后松开,按足时间会有蓝灯闪烁一下…

ESP32网络开发实例-Web服务器3D动画方式显示MPU6050传感器数据

Web服务器3D动画方式显示MPU6050传感器数据 文章目录 Web服务器3D动画方式显示MPU6050传感器数据1、应用介绍2、MPU6050介绍2、软件准备3、硬件准备4、代码实现4.1 Web页面创建4.2 Web服务器实现在本文中,我们将创建一个 ESP32 MPU6050 传感器读数仪表板。 读数将包括当前摄氏…

GPS 定位信息获取(北斗星通 GPS)

GPS 定位信息获取(1) 首先回顾北斗星通 GPS 数据获取(1)~(5) gps_pub.cpp 将接收到的串口数据转化为GPS的经纬度信息gps_path.cpp 将经纬度信息转化为全局坐标系下的XY值,以第一个GPS经纬度为…

【海德教育】二级建造师的主要报考条件:

工程类或工程经济类中专及以上毕业,从事建设工程施工管理工作满2年即可报考。1,报考主要审核材料:报名表,个人身份证、毕业证原件及复印件,加盖公章的单位资质或营业执照复印件一份,个人相片等。并不需要社…

第三方应用调用前摄失败,导致原生相机的后摄挂掉

第一次分析出现问题:以为是调用前摄,检测不到后摄所致,导致误导了许久 仔细查找才发现:相机前摄的参数错误,当前app获取不到这么大的参数 Camera2-Parameters: set: Requested preview size 1080 x 1440 is not suppor…

Android 13.0 app进程保活白名单功能实现

1.前言 在13.0的系统rom产品开发中,在某些重要的app即使进入后台,产品需求要求也不想被系统杀掉进程,需要app长时间保活,就是app进程保活白名单功能的实现, 所以需要在系统杀进程的时候不杀掉白名单的进程,接下来就看怎么样来实现这些功能 2.app进程保活白名单功能实…

2023亚太杯B题玻璃温室的微气候调控完整论文分享

大家好,终于完成了2023亚太杯数学建模竞赛B题Microclimate Regulation in Glass Greenhouses(玻璃温室的微气候调控)的完整论文啦。 实在精力有限,具体的讲解以及完整成品的查看大家可以移步: 【亚太杯完整论文】2023…

【初始前后端交互+原生Ajax+Fetch+axios+同源策略+解决跨域】

初始前后端交互原生AjaxFetchaxios同源策略解决跨域 1 初识前后端交互2 原生Ajax2.1 Ajax基础2.2 Ajax案例2.3 ajax请求方式 3 Fetch3.1 fetch基础3.2 fetch案例 4 axios4.1 axios基础4.2 axios使用4.2.1 axios拦截器4.2.2 axios中断器 5 同源策略6 解决跨域6.1 jsonp6.2 其他技…

搭配:基于OpenCV的边缘检测实战

引言 计算机中的目标检测与人类识别物体的方式相似。作为人类,我们可以分辨出狗的形象,因为狗的特征是独特的。尾巴、形状、鼻子、舌头等特征综合在一起,帮助我们把狗和牛区分开来。 同样,计算机能够通过检测与估计物体的结构和性…

Spring Boot中设置文件上传大小限制

在Spring Boot中,可以通过以下步骤来设置上传文件的大小: 在application.properties或application.yml文件中,添加以下配置: 对于application.properties: spring.servlet.multipart.max-file-size128MB spring.se…

如何预防痔疮

预防痔疮的最佳方法是保持粪便柔软易排出。 为了预防痔疮和减轻痔疮的症状,应遵照以下方法:吃高纤维食品。多吃水果、蔬菜和全谷物。这样可以软化粪便,增加其体积,有助您避免可能引起痔疮的过度用力。请在膳食中逐步加入纤维&…