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.rhkb.cn/news/206789.html

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

相关文章

Redis String类型

String 类型是 Redis 最基本的数据类型,String 类型在 Redis 内部使用动态长度数组实现,Redis 在存储数据时会根据数据的大小动态地调整数组的长度。Redis 中字符串类型的值最大可以达到 512 MB。 关于字符串需要特别注意∶ 首先,Redis 中所…

前端技术探秘-Nodejs的CommonJS规范实现原理 | 京东物流技术团队

了解Node.js Node.js是一个基于ChromeV8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。Node中增添了很…

Pycharm新手开发指南

文章目录 前言一、常用功能介绍二、常用高效pycharm使用方法关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 前言…

MySQL如何处理并发访问和高负载?

在当今互联网时代,面对日益增长的数据量和用户访问量,数据库的并发访问和高负载处理变得尤为重要。MySQL作为最流行的关系型数据库管理系统之一,具备许多关键技术和策略来处理并发访问和高负载,下面将对其进行深入探讨。 ​ 图片…

数据库系统原理与实践 笔记 #10

文章目录 数据库系统原理与实践 笔记 #10存储管理与索引(续)数据字典存储系统元数据的关系表示 数据缓冲区存储访问缓冲区管理器缓冲区替换策略 顺序索引基本概念索引技术评价指标顺序索引稠密索引稀疏索引索引多级索引辅助索引主索引与辅助索引多码索引 B树索引B树索引文件B树…

3D点云目标检测:CT3D解读(未完)

CT3D 一、RPN for 3D Proposal Generation二、Proposal-to-point Encoding Module2.1、Proposal-to-point Embedding2.2、Self-attention Encoding 三、Channel-wise Decoding Module3.1、Standard Decoding3.2、Channel-wise Re-weighting3.3、Channel-wise Decoding Module 四…

如何充分了解客户需求

如何充分了解客户需求 如何充分了解客户需求,以提供贴心服务? 想要提供超出客户期望的优质服务,首先需要了解他们的需求。通过多种方式收集客户反馈、深入挖掘数据、建立紧密的客户关系,我们可以更好地理解客户需求,…

【Spring】Spring是什么?

文章目录 前言什么是Spring什么是容器什么是 IoC传统程序开发控制反转式程序开发理解Spring IoCDI Spring帮助网站 前言 前面我们学习了 servlet 的相关知识,但是呢?使用 servlet 进行网站的开发步骤还是比较麻烦的,而我们本身程序员就属于是…

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测

EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测 目录 EI级 | Matlab实现TCN-BiLSTM-Multihead-Attention多头注意力机制多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【EI级】Matlab实现TCN-BiLSTM-Multihead-…

Redis性能压测、监控工具及优化方案

Redis是一款高性能的开源缓存数据库,但是在实际应用中,我们需要对Redis进行性能压测、监控以及优化,以确保其稳定性和高可用性。本文将介绍Redis性能压测、监控工具及优化方案。 01 Redis性能压测 常用的Redis性能压测工具有: …

Redis-Day1基础篇(初识Redis, Redis常见命令, Redis的Java客户端)

Redis-Day1基础篇 初识Redis认识NoSQL认识Redis安装Redis启动RedisRedis客户端 Redis命令数据结构介绍通用命令操作命令StringHashListSetSortedSet Redis的Java客户端客户端对比Jedis客户端Jedis快速入门Jedis连接池 SpringDataRedis客户端SpringDataRedis概述SpringDataRedis…

MySQL进阶知识:锁

目录 前言 全局锁 表级锁 表锁 元数据锁(MDL) 意向锁 行级锁 行锁 行锁演示 间隙锁/临界锁 演示 前言 MySQL中的锁,按照锁的粒度分,分为以下三类 全局锁:锁定数据库中的所有表。表级锁:每次操…

File类

File 概述 File: 路径 IO流: 传输 路径 相对路径, 绝对路径 File File对象就表示一个路径,可以是文件的路径、也可以是文件夹的路径这个路径可以是存在的,也允许是不存在的 构造方法 代码示例: package FileTest1;import java.io.File;public c…

【追求卓越11】算法--二叉树

引导 接下来的几节我们开始介绍非线性的数据结构--树。树的内容比较多也比较复杂。本节,我们只需要了解关于树的一些基本概念。以及再进一步了解树的相关内容--搜索二叉树。该类型二叉树在工作中,是我们常接触的。该节我们介绍关于搜索二叉树的相关操作&…

每日一题(LeetCode)----链表--链表最大孪生和

每日一题(LeetCode)----链表–链表最大孪生和 1.题目&#xff08;2130. 链表最大孪生和&#xff09; 在一个大小为 n 且 n 为 偶数 的链表中&#xff0c;对于 0 < i < (n / 2) - 1 的 i &#xff0c;第 i 个节点&#xff08;下标从 0 开始&#xff09;的孪生节点为第 (n…

广州华锐视点:基于VR元宇宙技术开展法律法规常识在线教学,打破地域和时间限制

随着科技的飞速发展&#xff0c;人类社会正逐渐迈向一个全新的时代——元宇宙。元宇宙是一个虚拟的、数字化的世界&#xff0c;它将现实世界与数字世界紧密相连&#xff0c;为人们提供了一个全新的交流、学习和娱乐平台。在这个充满无限可能的元宇宙中&#xff0c;法律知识同样…

【web】Fastapi自动生成接口文档(Swagger、ReDoc )

简介 FastAPI是流行的Python web框架&#xff0c;适用于开发高吞吐量API和微服务&#xff08;直接支持异步编程&#xff09; FastAPI的优势之一&#xff1a;通过提供高级抽象和自动数据模型转换&#xff0c;简化请求数据的处理&#xff08;用户不需要手动处理原始请求数据&am…

[vue3] 使用 vite 创建vue3项目的详细流程

一、vite介绍 Vite&#xff08;法语意为 “快速的”&#xff0c;发音 /vit/&#xff0c;发音同 “veet”) 是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验&#xff08;热更新、打包构建速度更快&#xff09;。 二、使用vite构建项目 【学习指南】学习新技能最…

VM CentOS7安装ffmpeg

项目中涉及给视频添加水印&#xff0c;使用到了ffmpeg&#xff0c;windows系统可直接使用&#xff0c;Linux需要手动编译完成ffmpeg后才可正常使用。 配置yum源: 备份原repo文件 cd /etc/yum.repos.d/mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.r…

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!

文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置&#xff0c;颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…