国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在您的應(yīng)用中使用Extensions API將特效應(yīng)用到照片上

谷歌開發(fā)者 ? 來源:Android 開發(fā)者 ? 作者:Android 開發(fā)者 ? 2021-10-29 14:44 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Android CameraX 的設(shè)計(jì)旨在幫助您簡(jiǎn)化相機(jī)應(yīng)用的開發(fā)工作。隨著對(duì) CameraX 不斷的開發(fā),相機(jī)應(yīng)用的開發(fā)者們向我們展示了他們的激情和熱忱,當(dāng)前的 API 中已經(jīng)融入了許多很棒的創(chuàng)意,例如值得稱贊的 CameraX Extensions API。最近我們采納了開發(fā)者社區(qū)的意見,對(duì)擴(kuò)展進(jìn)行了重構(gòu),如今有了新的 ExtensionsManager,您只需兩行代碼就可以使用這些擴(kuò)展!
本文將介紹如何在您的應(yīng)用中使用 Extensions API。
  • Android CameraX
    https://android-developers.googleblog.com/2019/05/whats-new-with-android-jetpack.html
  • ExtensionsManager
    https://developer.android.google.cn/reference/androidx/camera/extensions/ExtensionsManager

CameraX Extensions

Android 設(shè)備配備了強(qiáng)大的相機(jī),制造商們投入了大量精力將眾多前沿的功能特性或特效融入這些相機(jī)設(shè)備中。過去,這些強(qiáng)大的功能只能由設(shè)備的原生相機(jī)應(yīng)用提供。如今,憑借 CameraX Extensions API,第三方開發(fā)者可以通過一個(gè)通用的、簡(jiǎn)單的接口來訪問這些強(qiáng)大的相機(jī)功能。

CameraX Extensions 涵蓋的內(nèi)容

1.0.0 版本的 CameraX Extensions 包括一些最常見的內(nèi)置相機(jī)特效:

  • BOKEH (焦外成像): 在人像模式下拍攝照片時(shí),讓前景人物更清晰。
  • HDR (高動(dòng)態(tài)范圍):拍照時(shí)使用不同的自動(dòng)曝光 (AE) 配置,以獲得最佳效果。
  • NIGHT (夜間):在低照度環(huán)境下 (通常是在夜間) 捕獲最佳靜態(tài)圖像。
  • FACE RETOUCH (臉部照片修復(fù)):拍攝靜態(tài)圖像時(shí),修飾臉部膚色、輪廓等。
  • AUTO (自動(dòng)):根據(jù)周圍的景色自動(dòng)調(diào)整最終圖像。

讓我們來看幾組在 Android 手機(jī)上拍攝的照片,拍照時(shí)分別啟用和禁用了由 CameraX Extensions API 提供的特效。

NIGHT 模式例子

3a2a5c54-3879-11ec-82a8-dac502259ad0.png

△圖 3:右側(cè)照片啟用了 NIGHT 特效。

視覺上的差異是很明顯的。您可以使用 CameraX Extensions API 在您自己的應(yīng)用中實(shí)現(xiàn)這些圖像的效果。

現(xiàn)在讓我們看看如何將 CameraX 的 API 集成到您的應(yīng)用中。

Extensions API

在現(xiàn)有的 CameraX 應(yīng)用中,首先您可以引入 camera-extensions Jetpack 庫來添加 CameraX Extensions:

dependencies {    // 與 Extensions 庫版本號(hào)相匹配的 CameraX 核心庫    implementation 'androidx.camera1.1.0-alpha08'    implementation 'androidx.camera1.1.0-alpha08'    implementation 'androidx.camera1.1.0-alpha08'
    // CameraX Extensions 庫    implementation 'androidx.camera1.0.0-alpha28'
    // 其他依賴項(xiàng)    implementation('androidx.concurrent1.1.0')}
接下來,通過以下步驟集成 Extensions:
  1. 獲取 ExtensionsManager 實(shí)例:

    https://developer.android.google.cn/reference/androidx/camera/extensions/ExtensionsManager

  2. 檢查目標(biāo)設(shè)備是否支持需要用到的擴(kuò)展模式;
  3. 獲取一個(gè)啟用擴(kuò)展的 CameraSelector
  4. 使用啟用擴(kuò)展的 CameraSelector 調(diào)用 bindToLifecycle:

    https://developer.android.google.cn/reference/androidx/camera/lifecycle/ProcessCameraProvider#bindToLifecycle(androidx.lifecycle.LifecycleOwner,%20androidx.camera.core.CameraSelector,%20androidx.camera.core.UseCase...)

獲取 ExtensionsManager 實(shí)例

第一步是用擴(kuò)展庫的 getInstance(Context) API 獲得一個(gè) ExtensionsManager 實(shí)例。這個(gè) API 返回一個(gè) ListenableFuture,我們可以在 Kotlin 掛起函數(shù)中使用 await() 來獲取結(jié)果以避免阻塞主線程。(注意:在 ListenableFuture 上使用 await() 須引入 androidx.concurrent 1.1.0 依賴項(xiàng)。)

// 創(chuàng)建擴(kuò)展管理器(使用 Jetpack Concurrent 庫)valextensionsManager=ExtensionsManager.getInstance(context).await()

  • getInstance(Context)

    https://developer.android.google.cn/reference/androidx/camera/extensions/ExtensionsManager#getInstance(android.content.Context)

  • ExtensionsManager

    https://developer.android.google.cn/reference/androidx/camera/extensions/ExtensionsManager

通過 ExtensionsManager,您可以確定設(shè)備是否支持某一特定的擴(kuò)展模式,并為其獲取一個(gè)啟用擴(kuò)展的 CameraSelector。請(qǐng)注意以下幾點(diǎn):

  • ExtensionsManager 是一個(gè)進(jìn)程范圍的全局資源: 一個(gè)進(jìn)程中只存在一個(gè) ExtensionsManager 實(shí)例。

  • ExtensionsManager 始終存在:無論底層設(shè)備是否支持?jǐn)U展,CameraX 都提供一個(gè)有效的 ExtensionsManager 實(shí)例。

檢查擴(kuò)展模式可用性

通過 ExtensionsManager,使用 isExtensionAvailable(CameraProvider, CameraSelector, int) 函數(shù)檢查擴(kuò)展的可用性:如果設(shè)備上存在任何經(jīng)由 CameraSelector 過濾的相機(jī)支持所查詢的擴(kuò)展,則返回 true,否則返回 false
        // 獲取相機(jī)設(shè)備來檢查是否支持?jǐn)U展        val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
        // 檢查是否支持 BOKEH        if (extensionsManager.isExtensionAvailable(                cameraProvider,                cameraSelector,                ExtensionMode.BOKEH            )) {            ...}
  • isExtensionAvailable(CameraProvider, CameraSelector, int)

    https://developer.android.google.cn/reference/androidx/camera/extensions/ExtensionsManager#isExtensionAvailable(androidx.camera.core.CameraProvider,%20androidx.camera.core.CameraSelector,%20int)

獲取啟用擴(kuò)展的 CameraSelector

一旦您確認(rèn)了設(shè)備支持該擴(kuò)展模式,就可以用 getExtensionEnabledCameraSelector(CameraProvider, CameraSelector, int) 函數(shù)獲取一個(gè)啟用擴(kuò)展的 CameraSelector。此函數(shù)返回啟用擴(kuò)展的 CameraSelector,其包含關(guān)于指定擴(kuò)展模式的所有詳細(xì)信息。
val bokehCameraSelector = extensionsManager                          .getExtensionEnabledCameraSelector(cameraProvider,cameraSelector,ExtensionMode.BOKEH)

  • getExtensionEnabledCameraSelector(CameraProvider, CameraSelector, int)

    https://developer.android.google.cn/reference/androidx/camera/extensions/ExtensionsManager#getExtensionEnabledCameraSelector(androidx.camera.core.CameraProvider,%20androidx.camera.core.CameraSelector,%20int)

使用啟用擴(kuò)展的 CameraSelector 調(diào)用 bindToLifecycle()

最后一步是使用 bindToLifecycle() 將您的用例與啟用擴(kuò)展的 CameraSelector 綁定。使用啟用擴(kuò)展的 CameraSelector 如同使用普通的 CameraSelector 一樣,例如使用 DEFAULT_BACK_CAMERADEFAULT_FRONT_CAMERA。當(dāng)使用啟用擴(kuò)展的 CameraSelector 綁定用例時(shí),CameraX 會(huì)直接在相機(jī)上啟用指定的擴(kuò)展模式。例如,當(dāng)綁定到 Preview 時(shí),擴(kuò)展效果被應(yīng)用到預(yù)覽中,或者應(yīng)用到由所綁定的 ImageCapture 所捕獲的圖像上。
// 將開啟了 BOKEH 的相機(jī)選擇器綁定到用例上val imageCapture = ImageCapture.Builder().build()val preview = Preview.Builder().build()cameraProvider.bindToLifecycle(                lifecycleOwner,                bokehCameraSelector,                imageCapture,                preview)
  • bindToLifecycle()
    https://developer.android.google.cn/reference/androidx/camera/lifecycle/ProcessCameraProvider#bindToLifecycle(androidx.lifecycle.LifecycleOwner,%20androidx.camera.core.CameraSelector,%20androidx.camera.core.UseCase...)

  • DEFAULT_BACK_CAMERA
    https://developer.android.google.cn/reference/androidx/camera/core/CameraSelector#DEFAULT_BACK_CAMERA

  • DEFAULT_FRONT_CAMERA
    https://developer.android.google.cn/reference/androidx/camera/core/CameraSelector#DEFAULT_FRONT_CAMERA

使用 Extensions API 的樣例代碼

Extensions API 示例的完整代碼如下:
fun onCreate() {    lifecycleScope.launch {        // 創(chuàng)建 cameraProvider        val cameraProvider = ProcessCameraProvider.getInstance(context).await() 
        // 創(chuàng)建 extensionsManager(使用 Jetpack Concurrent 庫)        val extensionsManager =                 ExtensionsManager.getInstance(context).await()
        // 獲取相機(jī)設(shè)備來檢查是否支持?jǐn)U展                val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA
        // 檢查是否支持 BOKEH        if (extensionsManager.isExtensionAvailable(                cameraProvider,                cameraSelector,                ExtensionMode.BOKEH            )) {            // 在啟用不同擴(kuò)展模式之前解除所有用例的綁定            cameraProvider.unbindAll()
//獲取啟用了BOKEH的相機(jī)選擇器            val bokehCameraSelector = extensionsManager                    .getExtensionEnabledCameraSelector(                cameraProvider,                cameraSelector,                ExtensionMode.BOKEH            )
            // 將開啟了 BOKEH 的相機(jī)選擇器綁定到用例上            val imageCapture = ImageCapture.Builder().build()            val preview = Preview.Builder().build()            cameraProvider.bindToLifecycle(                lifecycleOwner,                bokehCameraSelector,                imageCapture,                preview            )        }    }}

Extensions API 對(duì)核心模塊的依賴

CameraX Extensions API 是在 camera-extensions 庫中實(shí)現(xiàn)的,并且它依賴 CameraX 核心模塊 (core、camera2 和 lifecycle)。使用 CameraX Extensions 時(shí),請(qǐng)務(wù)必使用與您正在使用的 CameraX 核心模塊相同的發(fā)布包中的版本。例如,要使用 camera-extensions:1.0.0-alpha28,則您必須在應(yīng)用的依賴列表中包含 1.0.0-alpha08 版本的 camera-lifecycle、camera-core 和 camera-camera2,因?yàn)樗鼈兪怯?2021 年 8 月 18 日在同一軟件包中發(fā)布的。

  • 相同的發(fā)布包
    https://developer.android.google.cn/jetpack/androidx/releases/camera

支持?jǐn)U展的設(shè)備

為了能使用 CameraX Extensions API,設(shè)備制造商需要實(shí)現(xiàn) CameraX Vendor Extensions 接口。您可以在 CameraX 設(shè)備頁面上找到支持 CameraX Extensions API 的部分設(shè)備列表。請(qǐng)注意,這不是一個(gè)詳盡的列表。如果您的設(shè)備被列出,但可用性檢查返回了 false,您可能需要將您的設(shè)備更新到制造商的最新 ROM 版本

  • CameraX Vendor Extensions 接口
    https://source.android.com/devices/camera/camerax-vendor-extensions

  • CameraX 設(shè)備頁面
    https://developer.android.google.cn/training/camerax/devices

除了支持?jǐn)U展的設(shè)備列表外,從 Android 12 開始,您還可以通過檢查 Android 屬性ro.camerax.extensions.enabled來確定設(shè)備是否支持 CameraX Extensions。

移除舊版 Extensions API

2019 年 8 月發(fā)布的舊版 Extensions API 現(xiàn)已廢棄。這個(gè)舊版的 Extensions API 提供了擴(kuò)展器類,需要將擴(kuò)展相關(guān)的配置應(yīng)用到每個(gè) PreviewImageCapture 用例上。舊版的擴(kuò)展器設(shè)計(jì)可能會(huì)導(dǎo)致開發(fā)人員忘記要在 PreviewImageCapture 上啟用擴(kuò)展模式,并可能導(dǎo)致非預(yù)期的行為。

新的 CameraX Extensions 庫在 1.0.0-alpha26 中引入。較新的 Extensions API 將擴(kuò)展綁定從用例切換到目標(biāo)相機(jī),使用起來更加方便。請(qǐng)務(wù)必遷移以利用新的 Extensions API。

編輯:jq
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 應(yīng)用
    +關(guān)注

    關(guān)注

    2

    文章

    455

    瀏覽量

    34852
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    2373

    瀏覽量

    66791
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4968

    瀏覽量

    73990

原文標(biāo)題:使用 CameraX Extensions API 將特效應(yīng)用到照片上

文章出處:【微信號(hào):Google_Developers,微信公眾號(hào):谷歌開發(fā)者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    1688品類API:熱門行業(yè)榜單,選品指南!

    ? 在電商領(lǐng)域,數(shù)據(jù)驅(qū)動(dòng)的選品決策至關(guān)重要。1688作為阿里巴巴旗下的批發(fā)平臺(tái),提供了豐富的品類API接口,幫助企業(yè)獲取實(shí)時(shí)市場(chǎng)數(shù)據(jù),優(yōu)化產(chǎn)品策略。本文詳細(xì)介紹如何利用1688品類API訪問熱門
    的頭像 發(fā)表于 01-15 17:15 ?687次閱讀
    1688品類<b class='flag-5'>API</b>:熱門行業(yè)榜單,選品指南!

    何在DGX Spark運(yùn)行NVIDIA Omniverse

    首先感謝 Vigor 同學(xué)第一時(shí)間的分享,以下是具體如何在 DGX Spark 運(yùn)行 Omniverse 的方法。
    的頭像 發(fā)表于 12-17 10:13 ?621次閱讀
    如<b class='flag-5'>何在</b>DGX Spark<b class='flag-5'>上</b>運(yùn)行NVIDIA Omniverse

    何在AMD Vitis Unified IDE中使用系統(tǒng)設(shè)備樹

    您將在這篇博客中了解系統(tǒng)設(shè)備樹 (SDT) 以及如何在 AMD Vitis Unified IDE 中使用 SDT 維護(hù)來自 XSA 的硬件元數(shù)據(jù)。本文還講述了如何對(duì) SDT 進(jìn)行操作,以便在 Vitis Unified IDE 中實(shí)現(xiàn)更靈活的使用場(chǎng)景。
    的頭像 發(fā)表于 11-18 11:13 ?3122次閱讀
    如<b class='flag-5'>何在</b>AMD Vitis Unified IDE<b class='flag-5'>中使</b>用系統(tǒng)設(shè)備樹

    淘寶平臺(tái)獲取商品視頻 API 接口技術(shù)指南

    于數(shù)據(jù)分析、第三方應(yīng)用集成等場(chǎng)景。以下內(nèi)容基于淘寶開放平臺(tái)的官方文檔和常見開發(fā)實(shí)踐,確保真實(shí)可靠。我逐步引導(dǎo)完成整個(gè)過程,包括注冊(cè)、認(rèn)證、調(diào)用 API 和代碼示例。 1. 準(zhǔn)備工作:注冊(cè)淘寶開發(fā)者賬號(hào) 在調(diào)用
    的頭像 發(fā)表于 11-07 14:01 ?510次閱讀
    淘寶平臺(tái)獲取商品視頻 <b class='flag-5'>API</b> 接口技術(shù)指南

    何在vivadoHLS中使用.TLite模型

    本帖欲分享如何在vivadoHLS中使用.TLite模型。在Vivado HLS中導(dǎo)入模型后,需要設(shè)置其輸入和輸出接口以與的設(shè)計(jì)進(jìn)行適配。 1. 在Vivado HLS項(xiàng)目中導(dǎo)入模型文件 可以
    發(fā)表于 10-22 06:29

    API接口使用全指南:從基礎(chǔ)調(diào)用到實(shí)戰(zhàn)技巧

    一、API接口的基本認(rèn)知 API接口本質(zhì)是一組預(yù)先定義的規(guī)則,規(guī)定了不同系統(tǒng)之間如何傳遞數(shù)據(jù)。常見的API類型包括: RESTful API
    的頭像 發(fā)表于 10-08 09:25 ?760次閱讀

    產(chǎn)品添加與API接口設(shè)計(jì)指南

    ? 在現(xiàn)代電商或庫存管理系統(tǒng)中,產(chǎn)品添加與架是關(guān)鍵流程。通過API接口實(shí)現(xiàn)自動(dòng)化操作,能顯著提升效率。本文分步解析如何設(shè)計(jì)和使用“產(chǎn)品添加”與“產(chǎn)品架”
    的頭像 發(fā)表于 07-24 14:45 ?674次閱讀
    產(chǎn)品添加與<b class='flag-5'>上</b>架<b class='flag-5'>API</b>接口設(shè)計(jì)指南

    針對(duì)“的應(yīng)用使用了HarmonyOS beta版本的API”的解決方法##HarmonyOS應(yīng)用上架##

    API指的是API18,而且我這次的更新也只是修改了UI而已,不可能涉及beta版本的API,并且其中我使用到的textinput的type、bindsheet等,我都是檢查過,
    發(fā)表于 06-30 17:30

    請(qǐng)問如何在C++中使用NPU的模型緩存?

    無法確定如何在 C++ 中的 NPU 使用模型緩存
    發(fā)表于 06-24 07:25

    如何大模型應(yīng)用到效能評(píng)估系統(tǒng)中

    行業(yè)芯事行業(yè)資訊
    北京華盛恒輝科技
    發(fā)布于 :2025年06月17日 10:14:07

    如何人工智能應(yīng)用到效能評(píng)估

    行業(yè)芯事行業(yè)資訊
    北京華盛恒輝科技
    發(fā)布于 :2025年06月17日 10:13:04

    如何一個(gè)FA模型開發(fā)的聲明式范式應(yīng)用切換到Stage模型

    Widget在FA中為FormAbility,在Stage中為FormExtensionAbility)。 API切換:FA模型應(yīng)用中使用到的FAModelOnly接口切換為St
    發(fā)表于 06-04 06:22

    何在 Raspberry Pi AI Camera 構(gòu)建為開發(fā)人員提供實(shí)時(shí)的智能應(yīng)用程序!

    在這篇特邀文章中,我們的合作伙伴索尼公司的雷蒙娜-雷納(RamonaRayner)展示如何快速探索不同的模型和人工智能功能,以及如何在RaspberryPi人工智能相機(jī)的基礎(chǔ)
    的頭像 發(fā)表于 03-25 09:37 ?833次閱讀
    如<b class='flag-5'>何在</b> Raspberry Pi AI Camera <b class='flag-5'>上</b>構(gòu)建為開發(fā)人員提供實(shí)時(shí)的智能應(yīng)用程序!

    解鎖垂直美學(xué)!如何在你的Raspberry Pi相框中僅顯示豎版照片

    何在你的RaspberryPi相框中僅顯示豎幅照片這篇文章可能只針對(duì)一小部分讀者,但這就是像這樣的博客的樂趣所在:你可以深入探索各種極客話題。已在搭載BookwormWayland
    的頭像 發(fā)表于 03-25 09:33 ?865次閱讀
    解鎖垂直美學(xué)!如<b class='flag-5'>何在</b>你的Raspberry Pi相框中僅顯示豎版<b class='flag-5'>照片</b>!

    何在 樹莓派 編寫和運(yùn)行 C 語言程序?

    在本教程中,我討論C編程語言是什么,C編程的用途,以及如何在RaspberryPi編寫和運(yùn)行C程序。本文的目的是為介紹在RaspberryPi上進(jìn)行C編程的基礎(chǔ)知識(shí)。如果您想深入
    的頭像 發(fā)表于 03-25 09:28 ?1157次閱讀
    如<b class='flag-5'>何在</b> 樹莓派 <b class='flag-5'>上</b>編寫和運(yùn)行 C 語言程序?