惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
S
Securelist
博客园 - Franky
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
IT之家
IT之家
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
The Cloudflare Blog
云风的 BLOG
云风的 BLOG
N
News and Events Feed by Topic
AI
AI
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Schneier on Security
Schneier on Security
Attack and Defense Labs
Attack and Defense Labs
Vercel News
Vercel News
腾讯CDC
Google DeepMind News
Google DeepMind News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
WordPress大学
WordPress大学
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
Netflix TechBlog - Medium
量子位
S
Schneier on Security
Hacker News: Ask HN
Hacker News: Ask HN
Cyberwarzone
Cyberwarzone
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News and Events Feed by Topic
T
Tenable Blog
PCI Perspectives
PCI Perspectives
MyScale Blog
MyScale Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
W
WeLiveSecurity
N
News | PayPal Newsroom
P
Proofpoint News Feed
O
OpenAI News
C
CERT Recently Published Vulnerability Notes
B
Blog
Cisco Talos Blog
Cisco Talos Blog
Microsoft Security Blog
Microsoft Security Blog
V
Visual Studio Blog
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Y
Y Combinator Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy

木土金王可

复盘 2024,年度好物分享 落地 第二十台相机:宝丽来(Polaroid)Impulse AF 第十九台相机:哈苏(Hasselblad)X1D II 第十八台相机:宝丽来(Polaroid)Macro 5 SLR 第十七台相机:康泰时(Contax)S2 稻荷山 Dave Chappelle: The Closer 语言是思想的边界 对街头卖惨表演的看法 《民主森林》 电梯英雄 2023,年度好物分享 《大画幅 4x5》复活 新加坡华侨银行(OCBC)开户指南 第十六台相机:宾得(Pentax)PC35AF-M SEDATE 第十五台相机:沙慕尼(Chamonix)4x5 F2 Xbox 连接 Studio Display Twitter、Apple、Meta 和 Reddit 广告平台使用体验 第十四台相机:康泰时(Contax)S2 你到底什么时候买相机 拍摄胶片的理由 HomePod 不能作为 Mac 音响 男性生来就是残缺的女性 第十三台相机:柯尼卡(Konica)Big Mini 301 三年,十二台相机 恐怖片很好看啊 比残忍更残忍 用 SwiftUI 重构「行动日」 推荐《女生呵护指南》 你是左派还是右派? 驯服内心的猛犸象:为什么你应该停止关心别人对你的想法 想写点什么,但又不知道该写什么 摄影构图 精致的结婚照 中文没死,是有的人死了 上海爆发 COVID-19 疫情以来我收藏的文章(持续更新) 自我审查 25 美元,成为美国计算机学会(ACM)会员 当我们谈论离屏渲染时,我们在谈论什么 如何让 iOS 给你的应用开后门 二零一九年夏秋之交工作生活的异动 一声一世 iOS 限制输入字数与特殊字符的巧妙方法 对于番茄学习法的误解 Swift 中的空字符串 我如何自学 iOS 开发 为什么我不喜欢社交网络 如何与人见面 为什么我不喜欢即时通讯 以配置信息(UserDefaults)的形式存储应用数据 在文件沙盒中读取与写入应用数据 在 iOS 开发中使用键值对监听(KVO)与通知(Notification) 介绍 GCD 中的线程,队列,延迟执行,线程阻断,信号量,任务组与任务对象 iOS 原生 URLSession 网络请求 什么是自动引用计数(ARC)和引用循环 在 iOS 开发中使用代理与协议 独立开发的第一个应用:行动日 为什么我会把 Google Pixel 换成 iPhone SE? 手动进行 Nexus 和 Pixel 系列手机的 OTA 更新 开启 Chromebook 的夜间模式
将同事送我的仙人掌转换成 3D 模型
kinnouka bokudo · 2021-07-24 · via 木土金王可

2021 WWDC,Apple 在 RealityKit 框架下引入了新 API:PhotogrammetrySession,通过这个 API,可以从不同角度拍摄物体,并且基于这些相片,生成一个可以用于 AR/VR 显示的 3D 模型。

最近我也收到一个来自同事的礼物,她家的仙人掌掉落下来的小仙人掌。于是我萌生了这个将仙人掌转换成 3D 模型的想法。

开始,拍照

Apple 对于这个新 API 提供了非常多的相关代码和文章。其中包括用于拍摄的应用的 源代码

通过 Xcode 将这段源代码编译使其应用运行在 iPhone 上,可以对前期拍摄起到非常大的帮助作用。这个应用的主要功能是每隔一段时间自动拍摄一张相片,并且会记录相片的景深信息(注:必须使用至少拥有两个镜头的 iPhone 才可以使用这个应用,因为至少两个镜头才可以支持记录景深信息)。

在这个应用自动帮助我们拍摄的同时,我们只需要围绕着物体,缓慢移动镜头,完整的记录物体各个角度下的样子。关于拍照还有很多注意事项,比如最好拍摄 20 至 200 张相片,当前拍摄的物体的相片与上一张相片最好有 70% 以上的重合度,尽量在光线均匀的环境下拍摄,不要拍摄透明或者强烈反光的物体之类的。更多详细注意事项可以看《Capturing Photographs for RealityKit Object Capture》。

下图分别是 Apple 官方推荐的拍摄场景和我的拍摄场景。

Apple 官方将物体放在一个会旋转的平台上,并且用上文中提及的应用自动拍照。我将仙人掌放在一个普通的凳子上,然后右手举着相机,尽可能保持不动,左手从底部托着等凳子,缓慢的手动旋转。

拍摄完成之后将相片导入 Mac,然后就开始处理这些相片了。

Show Me the Code

这里需要用到 Apple 提供的另一段相关的 源代码,这段代码将在 Mac 运行,通过调用本文的主角 API PhotogrammetrySession,在 Mac 上将所拍摄的物体生成为 3D 模型。

在开始使用 PhotogrammetrySession 之前,需要先创建一个 PhotogrammetrySession.Request,这个 request 需要指定两个参数:URLPhotogrammetrySession.Request.Detail。他们分别表示最终输出 3D 模型的绝对地址和 3D 模型的精细程度,地址必须以 .usdz 后缀结尾,因为这是 3D 模型的格式名字,而精细程度则会影响 3D 模型的大小。

有了这个 request 之后就可以创建 PhotogrammetrySession,在创建这个 session 时,也需要一个 URL 参数,用来表示用于生成 3D 模型的图片所在文件夹的绝对地址:

let outputUrl = URL(fileURLWithPath: "/Users/jake/Downloads/Cactus.usdz")
var request = PhotogrammetrySession.Request.modelFile(url: outputUrl, detail: .full)

let inputFolderUrl = URL(fileURLWithPath: "/Users/jake/Downloads/Cactus Images")
guard let session = try PhotogrammetrySession(input: inputFolderUrl) else { return }

在创建 session 时还可以加入 PhotogrammetrySession.Configuration 参数:

let config = Configuration()
config.featureSensitivity = .high
config.sampleOrdering = .sequential
config.isObjectMaskingEnabled = true

guard let session = try PhotogrammetrySession(input: inputFolderUrl, configuration:config) else { return }

其中 featureSensitivity 表示处理模型时的细致程度,sampleOrdering 表示模型的相片是否连续,可以用于提高处理速度,isObjectMaskingEnabled 好像表示是否将模型与模型所在的背景区隔开,应该也可以提高处理速度。但在我实际使用中,我发现这几个参数无论如何调整似乎都没什么差别,也有可能是因为这个 API 还处于测试版的原因。

最后调用 sessionprocess(requests: [PhotogrammetrySession.Request]) 方法,然后等待制作完成就可以啦。这里可以一次性处理多个 requset,就可以同时生成多个模型,节约时间。

session.process(requests: [request])

async {
    do {
        for try await output in session.outputs {
            switch output {
                case .processingComplete:

                case .requestError(let request, let error):

                case .requestComplete(let request, let result):

                case .requestProgress(let request, let fractionComplete):

...

十几分钟之后

最后得到的模型在 Mac 上显示如下:

我用 iPhone 12 mini 一共给这个仙人掌拍了一百多张相片,使用的电脑是 2020 款 M1 芯片最低配金色 MacBook Air,按照 Apple 官方的说法,使用英特尔芯片的 MacBook 处理速度会更慢。我试着生成了好几种不同精度的模型,发现处理速度只跟相片数量有关,相片数量越多,处理时间越长,与模型精细程度等无关。

也许用带激光雷达的 iPhone 或者 iPad 拍摄相片,制作出来的 3D 模型效果会更好。

最后

在得到仙人掌的 3D 模型之后,通过使用 QLPreviewController 就可以很方便的在手机上显示出来:

override func viewDidAppear(_ animated: Bool) {
    let previewController = QLPreviewController()
    previewController.dataSource = self
    present(previewController, animated: true, completion: nil)
}

func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
    return 1
}

func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
    guard let path = Bundle.main.path(forResource: "Cactus", ofType: "usdz") else {
        fatalError("Couldn't find the supported input file.")
    }

    let url = URL(fileURLWithPath: path)
    return url as QLPreviewItem
}

效果如图所示:

看起来还不错,但 Apple 官方的样例才是惊为天人,可以从「AR Quick Look」下载并使用 Apple 官方模型。

2021 年 7 月 24 日