首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用AVDepthData制作三维模型?

如何用AVDepthData制作三维模型?
EN

Stack Overflow用户
提问于 2018-10-23 16:13:44
回答 1查看 2.8K关注 0票数 7

我对TrueDepth相机的数据处理问题很感兴趣。获取人脸数据,建立人脸三维模型,并将模型保存到.obj文件中是非常必要的。

由于在三维模型中需要的是人的眼睛和牙齿,所以ARKit / SceneKit是不合适的,因为ARKit / SceneKit不能填充这些区域的数据。

但是在SceneKit.ModelIO库的帮助下,我成功地以.obj格式导出了ARSCNView.scene (类型为SCNScene)。我试着把这个项目作为基础:摄像头

在这个项目中,使用TrueDepth摄像机的工作是使用金属完成的,但是如果我没有弄错的话,使用金属渲染的MTKView不是3D模型,不能作为.obj导出。

请告诉我是否有办法将MTKView导出到SCNScene,还是直接导出到.obj?如果没有这样的方法,那么如何用AVDepthData建立三维模型呢?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-10-24 21:06:37

AVDepthData制作3D模型是可能的,但这可能不是你想要的。一个深度缓冲区就是一个像素距摄像机值的二维数组.所以你得到的唯一的“模型”不是非常三维的,它只是一张高度图。这意味着你不能从侧面看到你无法从正面看到的轮廓。(附加到WWDC 2017谈深度摄影的“使用深度数据”示例代码展示了这方面的一个示例。)

如果你想要更多真正的3D“模型”(类似于ARKit提供的东西),你需要做ARKit所做的工作--随着时间的推移,使用多种颜色和深度帧,以及一个经过训练以理解人脸的机器学习系统(以及为快速运行该系统而优化的硬件)。你可能不会觉得自己这么做是可行的选择.

可以使用model /O从ARKit中获取一个可导出的模型。您需要的代码大纲如下:

  1. 从面部跟踪会话中获取ARFaceGeometry
  2. 从面几何的verticestextureCoordinatestriangleIndices数组中创建triangleIndices。(Apple注意到纹理坐标和三角形索引数组永远不会改变,所以您只需要创建那些每次获得新帧时都需要更新的顶点。)
  3. 从索引缓冲区创建一个MDLSubmesh,从子网格加上顶点和纹理坐标缓冲区创建一个MDLMesh。(可以选择使用MDLMesh函数在创建网格后生成顶点法线缓冲区。)
  4. 创建一个空的MDLAsset并将网格添加到其中。
  5. MDLAsset导出到URL (提供具有.obj文件扩展名的URL,以便推断要导出的格式)。

该序列根本不需要SceneKit (或金属,或任何显示网格的能力),这可能会被证明是有用的,这取决于您的需要。如果您确实希望涉及到SceneKit和Metal,您可能可以跳过几个步骤:

  1. 在金属设备上创建ARSCNFaceGeometry,并从人脸跟踪会话中传递给它一个ARFaceGeometry
  2. 使用MDLMesh(scnGeometry:)获取该几何图形的I/O模型表示,然后按照上面的步骤4-5将其导出到.obj文件。

不过,不管你怎么切.如果这是一个强有力的要求建模眼睛和牙齿,没有任何苹果提供的选项会帮助你,因为他们没有做到这一点。所以,一些值得思考的东西:

  • 考虑一下这是否是一个很强的要求?
  • 复制苹果的所有工作,做你自己的脸模型从颜色+深度图像序列推断?
  • 根据leftEyeTransform/rightEyeTransform报道的以球体为中心的眼球模型作弊?
  • 欺骗在牙齿建模使用的预制牙模型,由ARKit提供的面部几何显示?(用一个单独的开合关节来表达你的下颌模型,并使用ARKit的blendShapes[.jawOpen]将它与脸部并排动画。)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52953590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档