簡體   English   中英

如何從AVDepthData制作3D模型?

[英]How to make a 3D model from AVDepthData?

我對TrueDepth Camera的數據處理問題很感興趣。 有必要獲取人臉的數據,建立臉部的3D模型並將該模型保存在.obj文件中。

由於在3D模型中需要存在人的眼睛和牙齒,因此ARKit / SceneKit不適合,因為ARKit / SceneKit不會用數據填充這些區域。

但是在SceneKit.ModelIO庫的幫助下,我設法以.obj格式導出ARSCNView.scene(鍵入SCNScene)。 我試圖以此項目為基礎: https//developer.apple.com/documentation/avfoundation/cameras_and_media_capture/streaming_depth_data_from_the_truedepth_camera

在這個項目中,使用Metal完成TrueDepth Camera,但是如果我沒弄錯的話,使用Metal渲染的MTKView不是3D模型,不能導出為.obj。

請告訴我是否有辦法將MTKView導出到SCNScene或直接導出到.obj? 如果沒有這樣的方法,那么如何從AVDepthData制作3D模型?

謝謝。

可以從AVDepthData制作3D模型,但這可能不是您想要的。 一個深度緩沖區就是 - 一個像素距離相機值的2D陣列。 因此,你從中獲得的唯一“模型”不是非常3D; 它只是一張高度圖。 這意味着你不能從側面看它,看到你從前面看不到的輪廓。 WWDC 2017深度攝影講座附帶的“使用深度數據”示例代碼顯示了這方面的一個例子。)

如果您想要更多真正的3D“模型”,類似於ARKit所提供的,您需要做ARKit所做的工作 - 隨着時間的推移使用多個顏色和深度框架,以及經過訓練以了解人臉的機器學習系統(以及為快速運行該系統而優化的硬件)。 您可能不會發現自己做這個可行的選擇......


可能獲得使用型號I / O出ARKit的導出模型。 您需要的代碼大綱如下:

  1. 從面部跟蹤會話中獲取ARFaceGeometry

  2. 從面幾何的verticestextureCoordinatestriangleIndices數組創建MDLMeshBuffer (Apple注意到紋理坐標和三角形索引數組永遠不會改變,因此您只需創建一次 - 每次獲得新幀時都必須更新頂點。)

  3. 從索引緩沖區創建MDLSubmesh從子MDLMesh加上頂點和紋理坐標緩沖區創建MDLSubmesh (可選地,使用MDLMesh函數在創建網格后生成頂點法線緩沖區。)

  4. 創建一個空的MDLAsset並將網格添加到其中。

  5. MDLAsset導出到URL(提供帶有.obj文件擴展名的URL,以便它推斷出您要導出的格式)。

該序列根本不需要SceneKit(或Metal,或任何顯示網格的能力),根據您的需要,這可能是有用的。 如果你想涉及SceneKit和Metal,你可以跳過幾個步驟:

  1. 在Metal設備上創建ARSCNFaceGeometry ,並從面部跟蹤會話中傳遞ARFaceGeometry

  2. 使用MDLMesh(scnGeometry:)獲取該幾何的模型I / O表示,然后按照上面的步驟4-5將其導出到.obj文件。


無論如何,如果你需要對眼睛和牙齒進行建模,那么蘋果提供的選項都不會對你有所幫助,因為他們都沒有這樣做。 所以,一些值得深思的話:

  • 考慮這是否是一個強烈的要求?
  • 復制Apple的所有工作,從顏色+深度圖像序列進行自己的面部模型推理?
  • 使用根據rightEyeTransform報告的leftEyeTransform / rightEyeTransform中心的球體作弊進行眼睛造型?
  • 使用預先制作的牙齒模型對牙齒造型作弊,並使用ARKit提供的面部幾何圖形進行顯示? (使用單個開合關節表示您的內頜模型,並使用ARKit的blendShapes[.jawOpen]在臉部旁邊制作動畫。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM