在Xcode中我们可以通过创建ARResourceGroup, 添加.arobject的文件到ReferenceObject, 以及相关模型来到达3D物体检测识别的效果。同样的效果我们在Swift Playgrounds中亦可以实现, 但到目前为止(2022-03-15)Swift Playgrounds还没有可以创建ARResourceGroup的功能菜单,所以我们需要手动去创建。


1. 空间特征信息提取

我们使用iPad为例,首先需要对所要检测识别的实物进行空间特征信息提取,并且储存为.arobject格式的文件,然后导入到工程文件。截至目前(2022-03-15)我们有两种办法获取物体的空间特征信息,这两种方法都适用于iOS端或iPadOS端设备,这里我们使用iPad。

方法一:通过Apple官方提供的ARKit Scanner应用程序。

下载地址:Apple Developer Documentation

扫描特征信息与提取,请看下载链接中的教程。获取的特征信息为.arobject的文件,我们需要将这个文件保存并上传到Swift Playgrounds的工程文件中。

方法二:通过Reality Composer获取

我们需要在ios端或者ipados端App Store下载Reality Composer,按照视频演示步骤,也可以获得物体特征信息文件,并保存上传到Swift Playgrounds的工程文件里。


2. 创建参考物体库

当我们将物体的空间特征信息文件.arobject以及模型文件上传到swift playgrounds工程文件后,就可以开始创建参考物体库,具体代码如下:

var trackedObjectLibs = Set<ARReferenceObject>()

创建物体特征信息的url :

let arObjectUrl = Bundle.main.url(forResource: "MXMaster3", withExtension: "arobject")

通过特征信息url创建参考物体:

let referenceObject = try? ARReferenceObject(archiveURL: arObjectUrl!)

给参考物体一个与模型一样的名字,并且添加参考物体到参考物体库中:

referenceObject?.name = "MXMaster3"
trackedObjectLibs.insert(referenceObject!)

3. 配置与加载模型

ARKit并没给3D物体识别提供独一的Configuration,而是使用ARWorldTrackingConfiguration.

将手动创建的参考物体库分配给配置下的detectionObjects检测物体库,ARKit只会用这个检测物体库里的特征信息文件与用户环境中的物体特征信息作匹配。

let config = ARWorldTrackingConfiguration()
config.detectionObjects = trackedObjectLibs

最后我么可以通过 session(_ session: ARSession, didAdd anchors: [ARAnchors])方法来加载模型。


总结:

关于物体特征信息获取的两种办法,我个人的体验是第一种方法获取的无论是特征信息数量还是准确度都能满足较好的用户体验。


以下为完整代码:

import SwiftUI
import ARKit
import RealityKit
import Combine struct ContentView: View {var body: some View {ZStack {ARViewContainer().edgesIgnoringSafeArea(.all)}}
}struct ARViewContainer: UIViewRepresentable {func makeUIView(context: Context) -> ARView {let arView = ARView(frame: .zero)var trackedObjectLibs = Set<ARReferenceObject>()let arObjectUrl = Bundle.main.url(forResource: "MXMaster3", withExtension: "arobject")let referenceObject = try? ARReferenceObject(archiveURL: arObjectUrl!)referenceObject?.name = "MXMaster3"trackedObjectLibs.insert(referenceObject!)let config = ARWorldTrackingConfiguration()let peopleOcclusion: ARConfiguration.FrameSemantics = [.personSegmentationWithDepth]if type(of: config).supportsFrameSemantics(peopleOcclusion){config.frameSemantics = peopleOcclusion}config.detectionObjects = trackedObjectLibsarView.session.delegate = arViewarView.session.run(config, options: [])return arView}func updateUIView(_ uiView: UIViewType, context: Context) {}
}extension ARView: ARSessionDelegate {public func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {guard let objectAnchor = anchors[0] as? ARObjectAnchor else {return}let objectAnchorEntity = AnchorEntity(anchor: objectAnchor)let referenceModelName = objectAnchor.referenceObject.namevar cancellable: AnyCancellable? = nilcancellable = ModelEntity.loadModelAsync(named: referenceModelName!, in: .main).sink(receiveCompletion: { status inprint("Completion: \(status)")cancellable?.cancel()}, receiveValue: { entity inentity.setOrientation(simd_quatf.init(angle: -(.pi/2.2), axis: simd_float3(x: 0, y: 1, z: 0)), relativeTo: nil)entity.setPosition(simd_float3(x: 0, y: 0.1, z: 0), relativeTo: nil)objectAnchorEntity.addChild(entity)})self.scene.addAnchor(objectAnchorEntity)}
}

iPad Swift Playgrounds中实现AR 3D物体识别相关推荐

  1. 基于ROS机器人的3D物体识别与三维重建(三)基于ROS的3D物体识别

    Kinect2相机标定与点云数据获取 1.介绍 2 基于Gazebo搭建物体识别仿真环境 2.1 Gazebo简介 2.2 创建仿真环境 3 三维物体识别 3.1 基于模板匹配的物体识别流程 3.2 ...

  2. 《AR与VR开发实战》——2.7 3D物体识别

    本节书摘来自华章出版社<AR与VR开发实战>一书中的第2章,第2.7节,作者 张克发 赵兴 谢有龙,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.7 3D ...

  3. 基于结构光测量技术和3D物体识别技术开发的机器人3D视觉引导系统

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自|新机器视觉 基于结构光测量技术和3D物体识别技术开发的机器 ...

  4. 3D物体识别的如果检验

    3D物体识别的如果验证 这次目的在于解释怎样做3D物体识别通过验证模型如果在聚类里面.在描写叙述器匹配后,这次我们将执行某个相关组算法在PCL里面为了聚类点对点相关性的集合,决定如果物体在场景里面的实 ...

  5. 3D物体识别的假设检验

    3D物体识别的假设验证 这次目的在于解释如何做3D物体识别通过验证模型假设在聚类里面.在描述器匹配后,这次我们将运行某个相关组算法在PCL里面为了聚类点对点相关性的集合,决定假设物体在场景里面的实例. ...

  6. 以相关组为基础的3D物体识别

    这次我们要解释如何以pcl_recognition模块来进行3D物体识别.特别地,它解释了怎么使用相关组算法为了聚类那些从3D描述器算法里面把当前的场景与模型进行匹配的相关点对点的匹配.(长难句).对 ...

  7. [Vuforia]二.3D物体识别

    之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本. 3d物体扫描需要先下载扫描的APK进行扫面. 首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网, ...

  8. ARFoundation系列讲解 - 57 3D物体识别一

    一.介绍 目前在ARFoundation中,3D物体识别只支持A9处理器或更高版本的iOS设备,系统版本要求iOS 12或更高版本,Android不支持此功能 .使用3D物体识别跟踪功能需要预先采集3 ...

  9. 3D点云初探:基于全卷积神经网络实现3D物体识别

    基于全卷积神经网络实现3D物体识别 一.从2D图像识别到3D物体识别 二.ModelNet10:3D CAD数据集 1.存储格式 2.读取方法 3.点云可视化 可视化工具 plt可视化 4.数据集定义 ...

最新文章

  1. c语言中菲薄拉次数列,在VB子函数如何写出菲薄拉起数列
  2. ie关闭浏览器tab提示信息
  3. Oracle中删除数据的一个小技巧
  4. 在RHEL上实现OpeenSSH
  5. 浅谈 G1 GC 日志格式
  6. python中dump用法_python中json庫中的load、loads、dump、dumps的區別與用法
  7. 润乾V4导出TXT时自定义分隔符
  8. 【Python】字典dict类型转换为列表list类型
  9. 菜鸟学习笔记:Java提升篇6(IO流2——数据类型处理流、打印流、随机流)
  10. 作业九 二维数组和字符数组的应用
  11. 积温空间分布数据、气温分布数据、日照数据、降雨量分布、太阳辐射数据、地表径流数据、土地利用数据、npp数据、ndvi数据
  12. Android 计步器 - 手机自带系统级的 健康运动App 授权
  13. e531网卡驱动linux,联想e531网卡驱动下载-联想e531笔记本无线网卡驱动v6.30.223.201 官方版 - 极光下载站...
  14. 华为安装gsm框架_华为Mate30Pro怎么安装谷歌服务框架?谷歌服务GMS框架安装方法...
  15. lavas自动创建目录及说明
  16. 再也找不到理由 打扰你_伤感日志
  17. 相机标定篇——相机标定
  18. 监听from的submit事件
  19. C语言-1(第一天学C语言)
  20. Java基础学习第九节——继承、重写

热门文章

  1. 前缀表达式的计算机求值
  2. WSL2安装及其python环境配置
  3. 微信公众平台,如何开通其对应的定位接口?
  4. 时空信息驱动智慧城市建设与运营
  5. Node.js 模块以及npm包的管理和使用
  6. jmockit教程_【原创】如何使用Jmockit进行单元测试
  7. 浪漫表白编程丨程序员的520表白代码 | 程序员专属情人节表白网站
  8. 几个小型数据库的比较
  9. 零基础SSM入门教程(0)--教程背景与目录
  10. MVC详解:什么是MVC,MVC工作原理,MVC优缺点以及为什么要使用MVC