ARKit 人物遮挡样本是如何完成的?

2024-01-20

这可能是一个晦涩的问题,但我在网上看到了很多非常酷的示例,展示了人们如何使用 ARKit 3 中新的 ARKit 人物遮挡技术来有效地将人物与背景“分离”,并对“人物”应用某种过滤。人”(见).

在查看苹果提供的源代码和文档时,我发现我可以检索segmentationBuffer来自我已经完成的 ARFrame,就像这样;

func session(_ session: ARSession, didUpdate frame: ARFrame) {
    let image = frame.capturedImage
    if let segementationBuffer = frame.segmentationBuffer {

        // Get the segmentation's width
        let segmentedWidth = CVPixelBufferGetWidth(segementationBuffer)

        // Create the mask from that pixel buffer.
        let sementationMaskImage = CIImage(cvPixelBuffer: segementationBuffer, options: [:])

        // Smooth edges to create an alpha matte, then upscale it to the RGB resolution.
        let alphaUpscaleFactor = Float(CVPixelBufferGetWidth(image)) / Float(segmentedWidth)
        let alphaMatte = sementationMaskImage.clampedToExtent()
            .applyingFilter("CIGaussianBlur", parameters: ["inputRadius": 2.0)
            .cropped(to: sementationMaskImage.extent)
            .applyingFilter("CIBicubicScaleTransform", parameters: ["inputScale": alphaUpscaleFactor])

        // Unknown...

    }
}

在“未知”部分中,我试图确定如何在原始摄像机源上渲染新的“模糊”人物。似乎没有任何方法可以在原始相机源的“顶部”绘制新的 CIImage,因为 ARView 无法手动更新。


在下面的代码片段中我们看到personSegmentationWithDepth深度合成的 type 属性(有 RGB、Alpha 和 Depth 通道):

// Automatically segmenting and then compositing foreground (people), 
// middle-ground (3D model) and background.

let session = ARSession()

if let configuration = session.configuration as? ARWorldTrackingConfiguration {
    configuration.frameSemantics.insert(.personSegmentationWithDepth)
    session.run(configuration)
}

您可以手动访问 CVPixelBuffer 中世界跟踪的深度数据(执行分割的深度值):

let image = frame.estimatedDepthData

您可以手动访问 CVPixelBuffer 中面部跟踪的深度数据(来自 TrueDepth 相机):

let image = session.currentFrame?.capturedDepthData?.depthDataMap

另外,还有一个generateDilatedDepthARKit 3.0中的实例方法:

func generateDilatedDepth(from frame: ARFrame, 
                       commandBuffer: MTLCommandBuffer) -> MTLTexture

在你的情况下你必须使用estimatedDepthData因为苹果文档说:

它是一个缓冲区,表示用于遮挡虚拟内容的相机输入的估计深度值。

var estimatedDepthData: CVPixelBuffer? { get }

如果你乘以DEPTH来自此缓冲区的数据(首先您必须将深度通道转换为 RGB)RGB or ALPHA using 合成技术 https://developer.apple.com/library/archive/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CISourceOverCompositing你会得到很棒的效果。

看这 6 个图像:下面一行代表使用深度通道校正的三个 RGB 图像:深度分级、深度模糊、深度点位置传递。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ARKit 人物遮挡样本是如何完成的? 的相关文章

  • UINavigationBar 滑开而不是留在原处

    我创建了演示项目来展示问题 我们在 UINavigationController 中有两个视图控制器 MainViewController这是根 class MainViewController UIViewController lazy
  • UNTimeIntervalNotificationTrigger nextTriggerDate() 是否给出了错误的日期?

    我正在更新本地通知以与 iOS 10 配合使用 但遇到了一个问题 我认为 nextTrigger 函数返回的不是 满足触发条件的下一个日期 而是返回当前日期时间加上您最初设置 UNTimeInvervalNotificationTrigge
  • Swift 错误:发出 SIGABRT 信号如何解决

    我只是 Swift 编码的初学者 我的想法很简单 就是一个有两个按钮的应用程序 单击时 文本字段将更改其文本 在 Main StoryBoard 中 我添加一个文本字段和两个按钮 在 ViewController swift 文件中 我这样
  • Swift UIImage 转换为 PDF

    在我的应用程序中 必须从 iPad Gallery 出售 UIImage 并将其转换为 PDF 并保存在服务器端 我可以选择图像并将其发送到服务器端 但后端说 pdf 为空 空数据 我还在控制台中看到警告 错误 发现扩展时遇到 发现 错误
  • 实例化 UISegementedControl 的子类时,对类使用未实现的初始化程序“init(frame:)”

    当我尝试使用以下实例时 出现以下错误MySegmentControl在下面的代码中 该错误发生在应用程序启动后 知道我错过了什么吗 致命错误 对类 TestingSubclassing MySegmentControl 使用未实现的初始化程
  • 在 MLMediaLibrary 中加载媒体源时出错

    我在加载时遇到错误mediaSourcesMac OS X 中的属性 我正在尝试使用以下方法获取 Apple Photos 源MLMediaLibrary class 我的应用程序是沙盒的 并且具有图片文件夹的只读权限 我收到错误 MLMe
  • 如何实现pickerView类的didSelectRow方法?

    我以前从未使用过选择器视图 我认为它类似于表视图类的 func tableView tableView UITableView didDeselectRowAtIndexPath indexPath NSIndexPath 方法 但是我无法
  • iOS 图表错误:Thread1:EXC_BAD_ACCESS(代码=2,地址=0x2a0c220)

    因此 我正在遵循 AppCoda 上的 iOS Charts 教程 我完美地遵循了它 然后当我遇到问题时 我还复制了代码以使其完全匹配 问题是 当我尝试创建饼图然后运行它时 我收到错误 线程1 EXC BAD ACCESS 代码 2 地址
  • 错误:“字符串”无法转换为“字符串!”

    mapView rac valuesForKeyPath userTrackingMode observer self subscribeNextAs block handling 我收到一个错误 String is not convert
  • 适用于 iOS 的 Firebase 云消息通知未显示打开和分析

    我正在使用 FCM 向 iOS 应用程序发送通知 设备上可以很好地接收通知 但我无法在通知控制台 GUI 中获取 打开 或 转化 率 对于发送的近 200 0000 条通知 它始终显示 0 个打开 和 0 个转化 我仔细检查了所有的实现 但
  • 升级到 SDK 4.1 后 Facebook 登录失败(总是 isCancelled)

    我已在 iOS 应用程序中将 Facebook SDK 从 3 21 1 升级到 4 1 已上线 我仔细遵循升级指南 并实施了新的登录方法 我使用的代码是 Facebook 文档中提供的代码 但是自从升级以来 每次我尝试登录 设备或模拟器
  • 使用 Swift 的核心数据瞬态值

    有谁知道 或者有一个例子 如何使用 Swift 处理核心数据瞬态值 我知道在属性之前使用 NSManaged 但无法弄清楚如何编写逻辑以使用 Swift 构建瞬态值 复选标记短暂的数据模型中特定属性的字段 例如sectionTitle 为该
  • 如何在 SwiftUI 中使用 @FetchRequest 和新的可搜索修饰符?

    是否可以使用新的 searchable结合 FetchRequest 我有这样的代码 struct FooListView View Environment managedObjectContext private var viewCont
  • 快速在视图之间传递数据

    我试图熟悉 Swift 但找不到如何使用 Swift 在视图之间传递数据 class ViewController UIViewController IBOutlet var field UITextField IBOutlet var b
  • 如何在ios中打开本机文件应用程序?

    如何使用 url 方案或其他方式打开 ios 的本机文件应用程序 我尝试搜索 url 方案但没有运气 这个问题似乎没有答案 苹果论坛上有这个问题的帖子 但仍然没有答案 https forums developer apple com mes
  • 为 Swift 中的Optional提供默认值?

    如果您只想在 nil 的情况下提供默认值 那么在 Swift 中处理可选值的习惯用法似乎过于冗长 if let value optionalValue do something with value else do the same thi
  • iOS 如何以编程方式简单返回到先前呈现/推送的视图控制器?

    如何以编程方式返回到先前的视图控制器 我找到了这个answer https stackoverflow com questions 28760541 programmatically go back to previous viewcont
  • 协议扩展,不符合协议

    我正在创建一个名为MyFramework含有LoginProtocol swift它有一些默认行为 import UIKit public protocol LoginProtocol func appBannerImage gt UIIm
  • 应用内购买导致偶尔崩溃

    我在互联网上搜索了这方面的帮助 但没有结果 我的应用程序已在应用程序商店中上线 少数用户报告应用程序在进行应用内购买后冻结并崩溃 我的游戏中唯一的 IAP 它基本上解锁了完整版本 即使他们重新启动设备并尝试继续 设备也会再次崩溃 我无法重现
  • 获取 PHAsset 的本地文件路径

    我希望我的用户能够在 Instagram 上分享一张照片 并且我需要获取该照片的本地文件目录 不过 我将图像作为 PHAsset 获取 而不是 ALAsset 所有其他答案似乎都涵盖了这个主题 查看 PHAsset 文档 我没有看到 本地目

随机推荐

  • qmake 中的 debug_and_release 配置功能有什么优点?

    我只能看到未来的一个优点 我们能够发行make all commad 好吧 我不打电话make在我的开发人员生命中的任何阶段 我使用 Qt Creator 当我构建项目时 我希望它严格作为调试或发布 我想这是人们预期的行为 But debu
  • 使用 r 中的 gsub 删除模式

    我有一根绳子Project Change Request PCR HONDA DIGITAL PLATEFORM保存在supp matches and supp matches1包含字符串Project Change Request PCR
  • 我想将一个表中的行分配到另一个表中的行,这些行可以在 SQL oracle 中占用相同数量的行

    我正在尝试编写一个 SQL 查询 它将记录从一个表分配到另一个具有相同数量的表 在这个例子中我有两个表 Students and Teachers 我想将学生分配给每位老师 学生 亚当 班尼特 埃尔默 贾斯汀 路易斯 诺亚 杰克 老师 Le
  • 将照片保存到 iPhone 照片库中的自定义相册

    我正在尝试在 iPhone 的照片库中创建一个自定义相册 然后将我用相机拍摄的照片或从手机相机胶卷中选择的照片保存到该自定义相册中 我可以成功创建相册 但照片没有保存在那里 而是保存到模拟器的 已保存照片 相册中 我不知道如何判断UIIma
  • 后递增运算符在 for 循环中不递增[重复]

    这个问题在这里已经有答案了 我正在做一些关于 Java 的研究 发现这非常令人困惑 for int i 0 i lt 10 i i System err print hoo 这是永无休止的循环 有人有很好的解释为什么会发生这样的事情吗 fo
  • NoneType 错误 self.widget.insert

    我试图在我的应用程序中拥有一个输出框架 当我运行它时 我收到错误 NoneType object has no attribute insert on self widget insert end string 任何帮助 将不胜感激 imp
  • 将多个数据帧导出到 .csv 文件中

    我想使用循环将多个数据帧作为单独的 csv 文件导出到工作目录 而不是写出所有名称 Sample data frame employee lt c John Doe Peter Gynn Jolie Hope salary lt c 210
  • Git-跟踪远程分支

    我是 Mercurial 用户 我对远程分支的行为感到困惑 我有一个远程分支origin dev 我想在本地分支上复制它dev 我想要的是 每当我git pull 更改为origin dev被合并到dev 每当我git push 更改为de
  • clang 如何引导 C/C++ 代码优化?

    有人告诉我 clang 是一个像 gcc 一样工作的驱动程序 可以进行预处理 编译和链接工作 在编译和链接过程中 据我所知 实际上是llvm进行了优化 O1 O2 O3 Os flto 但我就是无法理解howllvm参与其中 看来编译源代码
  • jQuery 多个选择器,获取哪个选择器触发事件

    当处理具有多个选择器的事件时 例如 item a another item a click function e 是否可以确定哪个父选择器触发了该事件 是吗 item or another item 谢谢你 由于选择器可以是任何东西 因此您
  • 量角器 e2e 抛出 webdriver 未定义

    我的量角器一直在运行 直到几天前我开始遇到 Using the selenium server at http localhost 4444 wd hub UNCAUGHT EXCEPTION Error connect ECONNREFU
  • 在 Haskell 中动态构建列表理解

    我很好奇是否可以在 Haskell 中动态构建列表理解 举个例子 如果我有以下内容 all pows a a b b a y b z y lt take a 0 z lt take b 0 我得到了我所追求的 Main gt List so
  • hashCode 等于 Integer.MIN_VALUE 的 Java 字符串

    是否存在 hashCode 完全等于 Integer MIN VALUE 的已知 Java 字符串 为哈希表编写测试有助于避免在执行余数运算之前在哈希码上运行 Math Abs 的常见错误 理想情况下 该字符串仅包含 ASCII 字符 但我
  • 在mysql中,显示数据库;命令未列出我的所有数据库

    我可以使用 HeidiSQL 访问我的所有数据库 但是如果我转到 mysql exe 窗口并使用显示数据库 11 个中只有 2 个出现 这些都是 127 0 0 1 上的数据库 有什么想法吗 您正在登录 HeidiSQLroot 所以它向您
  • Docker 中的 ng build --prod 非常慢

    当我尝试在 docker 中构建 angular7 项目时 大约需要 40 分钟 需要40分钟的线路是 ng 构建 prod 92 块资产优化 TerserPlugin 我在同一台笔记本电脑上在 docker 外部运行了 ng build
  • 创建 vscode 主题时如何自定义命令调色板颜色和键绑定

    为自己创建一个 VSCode 主题 我喜欢目前的颜色配置 但是当我打开命令调色板时 它是 透视 的 因此很难阅读 设计主题时如何配置调色板 V1 36为命令调色板 快速打开面板添加了这两个颜色自定义 quickInput backgroun
  • Gcc 隐藏来自包含的静态库的符号的可见性

    I have 一个共享库 比如说libShared so 其中包含一个类Bar 用一种方法int Bar do int d const 一个静态库 比如说libStatic a 其中包含一个类Foo 用一种方法int Foo act int
  • 如何在 C# 中更改 EMF+ 图像的颜色

    我正在尝试开发一种特殊类型的热图 其中标记的颜色取决于某些计算变量的值 我需要做的是更改现有 EMF Image 的颜色 以下代码在使用 png 或 wmf 文件时非常有用 但在使用 EMF 文件时 DrawImage 不会绘制任何内容 E
  • 如何创建非托管 Neo4j 扩展?

    我对我的项目有一些具体要求 因此我决定实现非托管 Neo4j 扩展 我在 Neo4j 文档中找到了这些信息 非托管扩展 http neo4j com docs stable server unmanaged extensions html
  • ARKit 人物遮挡样本是如何完成的?

    这可能是一个晦涩的问题 但我在网上看到了很多非常酷的示例 展示了人们如何使用 ARKit 3 中新的 ARKit 人物遮挡技术来有效地将人物与背景 分离 并对 人物 应用某种过滤 人 见 在查看苹果提供的源代码和文档时 我发现我可以检索se