相機幀訪問(實驗性)

相機幀訪問示例


警告!

相機幀訪問功能(néng)被标記為(wèi)實驗性,因為(wèi)它目前不完全支持所有(yǒu)公(gōng)共 AR Foundation API,并且由于包和 Snapdragon Spaces 服務(wù)端的優化,版本之間的向後兼容性可(kě)能(néng)會受到影響。


這個示例演示了如何獲取 RGB 相機幀和内部屬性用(yòng)于圖像處理(lǐ)。有(yǒu)關相機幀訪問的基本信息及 AR Foundation 的 AR Camera Manager 組件的功能(néng),請參閱 Unity 文(wén)檔。要使用(yòng)此功能(néng),需要在 OpenXR 插件設置中(zhōng)啓用(yòng)它,路徑為(wèi):項目設置 > XR 插件管理(lǐ) > OpenXR(> Android 标簽)。

 

示例工(gōng)作(zuò)原理(lǐ)

将 AR Camera Manager 組件添加到 AR Session Origin > AR Camera 遊戲對象中(zhōng),将啓用(yòng)相機訪問子系統。啓動時,子系統會從設備中(zhōng)檢索有(yǒu)效的傳感器配置。如果找到有(yǒu)效的 Y'UV420sp 或 YUY2 傳感器配置,子系統将選擇該配置作(zuò)為(wèi) CPU 相機圖像的提供者。從概念上講,AR Camera Manager 代表一個單一的相機,不能(néng)同時管理(lǐ)多(duō)個傳感器。

 

示例場景包含兩個面闆:

● 一個相機視頻面闆,顯示來自設備相機的最新(xīn) CPU 圖像,并帶有(yǒu)暫停和恢複按鈕。

● 一個相機信息面闆,列出設備相機的各種屬性。

 

圖片9.png

 

獲取 CPU 圖像

每當子系統獲得新(xīn)的相機幀時,AR Camera Manager 将觸發 frameReceived 事件。訂閱此事件可(kě)以讓其他(tā)腳本盡早獲取最新(xīn)的相機幀并對其進行處理(lǐ)。一旦相機幀可(kě)用(yòng),Camera Manager 的 TryAcquireLatestCpuImage 函數将返回一個 XRCpuImage 對象,這個對象代表來自選定設備相機的單張原始圖像。可(kě)以使用(yòng) XRCpuImage 的 Convert 函數提取該圖像的原始像素數據,Convert 函數會返回一個 NativeArray<byte>。Snapdragon Spaces 不支持通過 XRCpuImage.ConvertAsync 進行異步圖像轉換。

 

 圖片10.png

 

有(yǒu)關如何使用(yòng) frameReceived、TryAcquireLatestCpuImage 和 XRCpuImage 的詳細信息,請參閱 Unity 文(wén)檔

 

警告!

根據所使用(yòng)的設備,相機幀訪問可(kě)能(néng)需要幾秒(miǎo)鍾才能(néng)初始化。在子系統成功初始化之前,請不要嘗試訪問幀。強烈建議使用(yòng) AR Foundation API 的 frameReceived 事件,以避免出現錯誤。


以下示例代碼在觸發 frameReceived 事件時,從 AR Camera Manager 請求 CPU 圖像。如果成功,它将直接将 XRCpuImage 的原始像素數據提取到托管的 Texture2D 的 GetRawTextureData<byte> 緩沖區(qū)中(zhōng),并使用(yòng) Apply 方法應用(yòng)紋理(lǐ)緩沖區(qū)。最後,它會更新(xīn)目标 RawImage 中(zhōng)的紋理(lǐ),使新(xīn)幀在應用(yòng)程序的 UI 中(zhōng)可(kě)見。

 

圖片11.png

 

以下是 AR Camera Manager 支持的紋理(lǐ)格式:

● RGB24

● RGBA32

● BGRA32

 

檢索 YUV 平面數據

Snapdragon Spaces 目前支持 Y′UV420sp 和 YUY2 格式。Y′UV420sp 包含一個 Y 緩沖區(qū),後跟交錯的 2x2 子采樣 U/V 緩沖區(qū)。YUY2 包含一個單一的緩沖區(qū),其中(zhōng)交錯了 Y 和 U/V 樣本,每個樣本以 Y-U-Y-V 的形式表示,代表兩個水平像素的色度信息,沒有(yǒu)垂直子采樣。有(yǒu)關 YUV 顔色模型的詳細信息,請參閱 YCbCr 維基百科(kē)文(wén)章中(zhōng)的 YUV 部分(fēn)。

 

如果不需要 RGB 轉換,可(kě)以通過 XRCpuImage 的 GetPlane 方法檢索原始 YUV 平面數據。此方法返回一個 XRCpuImage.Plane 對象,可(kě)以從中(zhōng)讀取平面數據。通過 XRCpuImage.planeCount 可(kě)以區(qū)分(fēn)格式,該屬性指示表示幀的平面數量。

 

Y'UV420sp

 

● Y 平面數據的索引為(wèi) 0,可(kě)以通過 GetPlane(0) 訪問。

● UV 平面數據的索引為(wèi) 1,可(kě)以通過 GetPlane(1) 訪問。


YUY2

YUYV 平面數據的索引為(wèi) 0,可(kě)以通過 GetPlane(0) 訪問。

 

圖片12.png

 

有(yǒu)關 XRCpuImage.GetPlane 的詳細信息,請參閱 Unity 文(wén)檔

 

有(yǒu)關 XRCpuImage.Plane 的詳細信息,請參閱 Unity 文(wén)檔。


以下示例代碼在 frameReceived 事件觸發時請求來自 AR Camera Manager 的 CPU 圖像,如果成功,它會獲取 XRCpuImage 的原始平面數據,并根據 YUV 格式應用(yòng)不同的圖像處理(lǐ)算法。

 

圖片13.png

 

檢索傳感器/内部信息

攝像頭管理(lǐ)器的 TryGetIntrinsics 函數将返回一個 XRCameraIntrinsics 對象,該對象描述了所選傳感器的物(wù)理(lǐ)特性。有(yǒu)關 XRCameraIntrinsics 的詳細信息,請參閱 Unity 文(wén)檔。(https://docs.unity3d.com/Packages/com.unity.xr.arsubsystems@4.2/api/UnityEngine.XR.ARSubsystems.XRCameraIntrinsics.html)

以下示例代碼檢索所選傳感器的内參,并在應用(yòng)程序 UI 中(zhōng)顯示這些信息。

 

圖片14.png


檢索傳感器/外部參數

AR Foundation API 不提供傳感器的外參,不過,您可(kě)以使用(yòng)以下兩種方法來獲取傳感器的外參:

 

方法 1:Snapdragon Spaces 輸入綁定

Snapdragon Spaces 提供了 ColorCameraPosition 和 ColorCameraRotation 的輸入動作(zuò)。您可(kě)以将這些輸入動作(zuò)與 Tracked Pose Driver (Input System) 配合使用(yòng),通過将它們綁定到 Position Input 和 Rotation Input 上。将 Tracked Pose Driver (Input System) 組件添加到一個 GameObject 上,該 GameObject 的位姿将與彩色攝像頭的外參位姿匹配。

 

 圖片15.png

 

下圖展示了如何使用(yòng)這些輸入綁定。

 

圖片16.png


方法二:Snapdragon Spaces 相機姿态提供器

Space相機姿态提供器組件添加到場景中(zhōng),并使用(yòng) GetPoseFromProvider 函數來獲取與 AR 相機管理(lǐ)器最新(xīn)的 frameReceived 事件相關的相機姿态。這個姿态是相對于 AR 會話坐(zuò)标系統的。

 

下面的示例代碼演示了如何獲取所選傳感器的外參并在應用(yòng)程序的 UI 中(zhōng)顯示。

 

圖片17.png


Spaces Camera Pose Provider還可(kě)以用(yòng)作(zuò)Tracked Pose Driver的姿勢提供程序。

 

提升性能(néng)的提示:

相機訪問操作(zuò)可(kě)能(néng)會消耗較多(duō)計算資源,無論是由于圖像分(fēn)辨率較大還是算法的複雜性。

● 使用(yòng) XRCpuImage.Convert 轉換圖像時,提供較小(xiǎo)的 outputDimensions 以減少計算量。

● 使用(yòng) XRCpuImage.GetPlane 處理(lǐ)圖像時,可(kě)以考慮對數據緩沖區(qū)進行下采樣。

 

Snapdragon Spaces 提供了直接内存訪問轉換設置,這改變了 XRCpuImage.Convert 讀取和寫入數據的方式。默認情況下,Snapdragon Spaces 使用(yòng) Marshal.Copy 進行幀數據的移動。啓用(yòng)此設置後,Spaces 将使用(yòng) NativeArray<byte> 直接表示源和目标緩沖區(qū)。可(kě)以在 Project Settings > XR Plug-in Management > OpenXR (> Android Tab) > Snapdragon Spaces > Camera Frame Access (Experimental) > Direct Memory Access Conversion 中(zhōng)找到這個設置。啓用(yòng)此設置可(kě)能(néng)會在某些設備上提高性能(néng),但在其他(tā)架構上的表現可(kě)能(néng)會有(yǒu)所下降。以下是建議啓用(yòng)直接内存訪問轉換設置的設備表:


設備

建議

Lenovo ThinkReality A3

性能(néng)提升,推薦使用(yòng)

Lenovo ThinkReality VRX

性能(néng)不足,不推薦使用(yòng)

 

Spaces AR C相機管理(lǐ)器配置和 DownsamplingStride 屬性在版本 0.21.0 中(zhōng)已被棄用(yòng)。請改用(yòng) XRCpuImage.ConversionParams 設置較小(xiǎo)的 outputDimensions,或者使用(yòng) XRCpuImage.GetPlane 并設置自定義下采樣因子。

 

檢索其他(tā)的傳感器數據

Spaces AR Camera Manager Config 可(kě)以通過 GetActiveCameraCount 方法獲取設備中(zhōng)的相機傳感器數量。這些信息對于區(qū)分(fēn)雙鏡頭設備和 VR 設備,以及正确處理(lǐ)相機圖像可(kě)能(néng)非常重要。


三个医生换着躁我一个视频 日韩无码电影 少女的免费高清中国 日韩视频在线观看 成人午夜爽A片免费视频 午夜福利视频 被绑在坐桩机上抹春药BL推文 欧美性XXXXX极品少妇小说 免费观看成人毛片A片直播千姿 肥老熟妇伦子伦456视频 被夫の上司に犯中文字幕 2023国产拍视频最好的手机 插曲视频免费高清观看动漫版 天美传媒有限公司宣传片 乖宝真紧H太好C了H 人妻在客厅被C的呻吟 女人和拘做受大片免费看 小柔被六个男人躁到早上电影 双腿张开被9个黑人调教影片 老牛影视文化传媒有限公司官方 厨房里的游戏2免费观看 国产做爰又粗又大太疼了 妻子6免费完整高清电视剧在线看中文 性少妇VIDEOSEXFREEXXX片中国 一区二区视频 初恋的滋味2电视剧免费观看 一晚上接8上个客 野外做受又硬又粗又大视频√ 成人做爰66片免费看网站 父亲有力挺送女儿的花园 老色鬼久久AV综合亚洲健身 三年片中国在线观看免费大全 初尝人妻滑进去了莹莹视频 真空下楼取快递被C嗯啊 粗大与亲女伦交换H时霖时夏 成全在线播放视频在线播放 艳肉乱痕1一12章 美丽姑娘高清视频免费中国观看 丰满熟妇被猛烈进入高清片 色情无码WWW视频无码区小黄鸭 樱花影院高清电影好看的电视剧 花房姑娘免费大全好看 国产精品久久久久久 97人妻人人揉人人躁人人 一阴吞两阳与MACD的关系 诱人的老师HD中字 活色生香小说阅读全文 成全影视大全在线看 男男做爰猛烈叫床视频GV 被伴郎的内捧猛烈进出H 麻花传剧原创MV免费观看 日日躁夜夜躁白天躁晚上 隔着内裤把她摸出水的方法 夫妇交换做爰4 上司的丰满人妻3 人妻在客厅被C的呻吟 人C交Z〇〇Z〇〇类另 十九岁免费观看全集完整版 雪迷宫电视剧在线观看免费 麻花传剧原创MV在线看完整版视频 成全影视大全在线观看国语 精品无人乱码一区二区三区的优势 漂亮人妻沦陷按摩2 星空无限传媒官网免费 中文字幕日韩人妻在线视频 老牛影视文化传媒有限公司官方 片多多电影电视剧影视剧情侣 大地二大全资源在线观看 今天免费视频在线观看 花荫露第十七回原文及翻译 公借种日日躁我和公乱 乖宝真紧H嘶爽老子H 在教室伦流澡到高潮HNP雅歌 在线免费观看 妇与子乱肉肉视频 宝贝好紧好爽再搔一点试视频 四个校花洗澡被17个农民工 《年轻的护士1》在线观看视频 精品人妻午夜一区二区三区四区 少妇2做爰伦理