在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. oracle为什么不用指定数据库,两个数据库怎么保持数据正确显示
  2. 微软职位内部推荐-SENIOR DEVELOPMENT LEAD
  3. WinAPI: midiOutCachePatches - 预装音色
  4. vscode正则表达式替换php数组,vscode正则替换
  5. 【CF1194E】Count The Rectangles【类扫描线】【单调性】【树状数组】
  6. Numpy的切片操作
  7. 【渝粤题库】陕西师范大学202081 管理学 作业 (专升本、高起本、高起专)
  8. 树莓派开始玩转linux pdf_用树莓派构建 Kubernetes 集群 | Linux 中国
  9. python中xy坐标如何从十个中找到最远的两个_python – Opencv单应性从像素xy坐标中查找全局xy坐标...
  10. Deep Learning Literature 常用词中英文总结(一)
  11. 关于使用hexo搭建博客并实现实时编写markdown的思路
  12. 【poj3615】 Cow Hurdles
  13. Java程序设计之扑克牌
  14. java object 转 double_Java 类型转换以及Object转成其他类型
  15. 数据结构与算法之排序篇(下)
  16. 想要快速增肌?肌酸可以帮你高效获得肌肉和力量
  17. 超好用的卸载软件 —— Geek
  18. 计算机画图更改,如何用电脑画图功能修改图片与加字
  19. 联想微型计算机供电电源线,拆修一只联想电源适配器,告诉你一个不为人知的秘密...
  20. 3步实现神经机器翻译模型处理

热门文章

  1. vue组件通信及插槽
  2. C++:在VS中release版本下设置断点调试,详细步骤
  3. java基于ssm的宠物用品商城管理系统 springboot vue
  4. 【威胁分析】揭秘!WannaRen勒索病毒背后,一条恶意软件分发产业链
  5. onmouseover 、onmouseout 与onmouseenter 、onmouseleave的区别
  6. 怎么截取视频做gif动图?手把手教你视频在线转gif制作
  7. mysql 导入ddl_导出数据库的DDL语句
  8. multipart的运用
  9. MQTT消息队列压力测试
  10. Java权限修饰符的作用范围