CameraX:过去、现在和未来的一瞥。

CameraX是一个未捆绑的Android Jetpack库,它可以帮助你在Android应用中轻松添加摄像头功能。传统上,由于Android设备种类繁多,编程模型复杂,在Android上构建具有相机功能的应用程序非常困难。现在成千上万的开发者都在使用CameraX,许多开发者已经实现了APK大小的缩小,业务指标的改善,同时也精简了他们的资源,使他们的工程师能够专注于构建很酷的新功能。

这篇文章讲述了CameraX如何颠覆现有的相机框架编程模型,如何帮助你在Android上扩展你的应用,并介绍了自Beta版以来的新功能,比如轻松地将ML Kit等智能功能集成到你的应用中。

颠覆过去的复杂性

我们首先在网上搜索你们所遇到的各种问题,并在现场用一些现有的设备进行实验。我们惊讶地了解到,你们中的许多人为了让事情顺利进行,在不同的制造商、芯片组、甚至是特定的设备上使用了大量的if-else代码块。造成这种行为的原因之一是,使用Camera1Camera2框架API,你需要从一组特定设备和操作系统的输入开始,以实现所需的输出,例如拍摄一张照片。通过设计,这需要你提前知道设备配置,以帮助你实现目标--当新设备推出时,很难扩展你的代码。

Camera1/Camera2框架编程模型

我们不得不从根本上重新思考编程模型。你们的很多反馈启发我们翻转漏斗,从基于用例的方法开始(如下图所示)。

CameraX编程模型

通过这种新的方法,团队创建了一个非捆绑的库,CameraX,它对所有主要的Android版本都是不可知的,并且可以在超过94%的设备上工作,从API 21开始,不需要特定设备的if-else块。在CameraX中,你首先通过创建一个用例来指定你的目标,例如 "拍照 "与ImageCapture用例。然后CameraX确定操作系统和设备的具体配置,以帮助你实现你的目标。今天,用例是CameraX体验的基础,从PreviewImageAnalysisImageCapture开始。

帮助开发者扩大测试规模

除了现有的框架API实现和使用的复杂性之外,许多开发人员在跨大量Android设备和不同的相机配置的大规模测试他们的应用程序时遇到了困难。我们了解到的是,即使是最基本的相机应用,你的大量资源也花在了测试一个庞大的设备池上,导致了前面提到的特定设备的变通方法。鉴于测试是你整体开发的关键部分,这启发我们建立一个专门的CameraX测试实验室,以提供跨多个Android设备的测试覆盖。

三星Galaxy J1 Ace在光控CameraX测试箱内。

今天这个实验室里有90多台安卓设备。两部手机被安装在一个定制的测试箱内,箱内有可控的灯光和一个电机,用来模拟相机应用的旋转和方向。这90多部设备代表了约4.5亿部活跃的Android设备,涵盖了所有的操作系统级别(从Marshmallow开始)、价格层级(我们最低端的手机零售价在100美元以下)、芯片组(涵盖联发科、高通和Unisoc)和制造商(完整的设备列表)。

缩小差距

在过去的几年里,安卓制造商取得了巨大的进步,为移动设备带来了高动态范围(HDR)、模糊虚化和夜景摄影等新功能。然而,到目前为止,这种功能只能通过手机的本地(或系统)相机应用程序来实现。CameraX Vendor Extensions(又称扩展功能)填补了这一空白,并向所有开发者开放了五种特定厂商的功能。这包括

HDR:使用制造商的多帧处理功能,合并多个帧,并提供保留场景高光和低光的图像。

夜间:使用制造商的低光多帧处理功能,在低光条件下提供更有吸引力的图片。

自动:根据当前的环境光照条件,自动确定并提供HDR或夜景图像。

虚化:提供背景模糊的图像,非常适合人物摄影。

美颜:在图像中启用面部美颜效果。

最棒的是:当启用Extensions时,你不需要特定设备的if-else块--只需编写一次代码,它就能在所有支持的设备上工作。您可以通过使用ExtensionsManager.ExtensionsAvailability来检查是否在特定设备上启用了Extensions。如果有扩展功能,您可以向用户显示必要的UI元素(如果适用),并将预览和ImageCapture用例配置为使用扩展功能而不是正常的图像捕获。只需多写几行代码,您就可以大幅提高图像质量和整体用户体验。

使用CameraX Extensions拍摄的三星S10+的HDR关闭(左)与HDR开启(右)对比。

这些扩展功能适用于三星(从S10+开始的所有旗舰机)、摩托罗拉(他们的大部分设备都升级或推出了Android 10)、Oppo(Reno Pro 2)以及一些使用Unisoc移动处理器的入门级手机。我们很高兴能通过Extensions缩小差距,并感谢所有制造商不断扩大具有这些功能的设备数量。

启用新功能

从CameraX在Google I/O 2019年的Alpha发布,2020年2月的Beta版,快进到今天。通过最新的Beta版本,我们很高兴与大家分享关于CameraX的改进兼容性,引入PreviewView以获得无缝预览,以及新的样本和实用程序,使CameraX的使用更加简单。首先是设备兼容性的提升,我们通过在CameraX中添加修复和解决方法,解决了一些特定设备的问题,如设备长宽比错误(LG G3),在某些情况下无法切换相机(Pixel 2),以及解决点击对焦(三星J7)。此外,根据您从公众错误报告中获得的意见(谢谢您!),我们在CameraX测试实验室中增加了额外的测试,如UI小部件集成和长宽比测试。如果你看到任何设备上的特定问题,请告诉我们,我们将很乐意解决这些问题。

虽然CameraX确实提供了Preview用例,但许多人一直在询问一个更简单的解决方案来获得屏幕上的预览。PreviewView是在您的应用程序中添加与相机交互的视图的最简单方法。它不需要深入了解相机API或底层硬件的知识,而且由于它由CameraX提供支持,所以它很省电,并为用户提供非常低的延迟。它通过默认使用SurfaceView来实现,如果设备与SurfaceView不兼容,它会自动回退到TextureView

PreviewView也有助于改善用户体验。新的getPreviewStreamState()API使你的应用程序能够在预览是流媒体或空闲时得到通知。您可以使用这个新的API在预览闲置时在PreviewView的顶部显示一个占位符图像,并在预览是流媒体时隐藏占位符。这避免了在预览启动时出现令人不快的黑屏。你可以在这篇博文中了解更多关于如何使用PreviewView的信息。

最后,ImageAnalysis从提供每帧缓冲区访问开始。一旦我们将这一用例与ML Kit的交钥匙API结合起来,就会打开很多新的可能性,比如文本识别、图像标签,甚至使用你自己训练的Tensorflow Lite模型检测和识别对象。另外,你也可以直接使用CameraX与TensorFlow Lite运行时(GitHub)。要深入了解CameraX的最新更新,请查看这段视频:

Getting to know CameraX Beta

目前在Play Store上有数千款应用部署了CameraX,涉及汽车、银行、交友、聊天、电子商务、搜索、社交等多个类别。一些发现CameraX有帮助的开发者包括以下几个。

Monzo银行使用CameraX a)消除了9000行代码,包括UI代码,b)将识别图像捕捉和自拍视频录制的掉线率从25%降低到5%左右(案例研究)。

YouCam Perfect通过CameraX实现了减少70%的代码行数(比Camera2),它极大地提高了新产品开发的效率。

Ufoto使用CameraX精简了他们的资源,使他们的工程师能够专注于开发很酷的新功能。他们还观察到从Camera1迁移到CameraX时,有了明显的改善。例如,在一些设备上,图像捕捉速度提高了10%,在一些设备上,预览帧率提高了30%。

下一步工作

我们将不断提高Android系统的设备兼容性和可靠性,同时使CameraX更容易使用(开发者报告的已修复CameraX问题列表)。例如,在未来几个月内,我们将在CameraX测试实验室中增加更多的设备。我们坚信,开发者不应该担心底层相机堆栈或设备的特殊性,这样他们就可以专注于开发用户喜欢的很棒的应用程序。有超过2,000名开发者在生产中使用CameraX,我们建议你尝试采用和部署CameraX Beta的最新版本。如果你想亲身体验CameraX,请查看我们的教程官方示例。在您试用CameraX之后,我们很乐意听到您看到的改进类型。如果你发现最新版本有任何问题,请尽可能在bugreports中提交一个bug(我们每周都会进行分流)。你也可以给Android CameraX讨论组发邮件提出问题,或者在StackOverflow上用 "android-camerax "标签发帖。

我们最衷心地感谢您,我们了不起的开发者、合作伙伴、制造商和CameraX团队成员,感谢他们帮助我们塑造和构建CameraX Jetpack库。

一点题外话:

我们有《Android学习、面试;文档、视频资源免费获取》,可复制链接后用石墨文档 App 或小程序打开链接或者私信我资料领取。

https://shimo.im/docs/TG8PDh9D96WGTT8W

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345