精华内容
下载资源
问答
  • arkit物体识别
    2018-03-13 09:11:51
    光线差——没有足够的光或光线过强的镜面反光。尝试避免这些光线差的环境。 缺少纹理——如果摄像头指向一面白墙,那也没法获得特征,ARKit 也去无法找到并追踪用户。尝试避免看向纯色、反光表面等地方。 快速移动——通常情况下检测和估算 3D 姿态只会借助图片,如果摄像头移动太快图片就会糊,从而导致追踪失败。但 ARKit 会利用视觉惯性里程计,综合图片信息和设备运动传感器来估计用户转向的位置。因此 ARKit 在追踪方面非常强大。


    作者:张嘉夫
    链接:https://www.jianshu.com/p/7abbb3efdbcb
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    更多相关内容
  • ARKit视觉风暴

    千人学习 2020-01-23 15:49:57
    学会使用ARKit物体检测技术,实现3D物体识别,可以广泛应用于工业、建筑、古董、玩具手办、艺展览等不同场景。 学习ARKit中的经典交互案例,优化AR项目的用户体验。 熟练使用环境纹理、光照估计技术,让AR内容随...
  • Unity ARKit 2 版本 支持多人同地点AR互动,物体识别等新功能
  • ARKit&&Vision的识别物体

    千次阅读 2018-06-16 09:19:01
    我们下面就来做下物体识别的例子,首先从官网下载模型 下载完成之后将其导入到我们新建的工程当中 然后我们将模型给导入 然后目前我们要做的就是点击屏幕的中间部分需要有小球产生以及显示出识别的物体...

    简单了解下,ARKit是苹果的增强虚拟与现实的框架,是苹果在2017年WWDC推出的AR开发平台,而Vision框架是 Apple 在 WWDC 2017 推出的图像识别框架

    我们下面就来做下物体识别的例子,首先从官网下载模型

    这里写图片描述

    下载完成之后将其导入到我们新建的工程当中
    这里写图片描述

    然后我们将模型给导入
    这里写图片描述

    然后目前我们要做的就是点击屏幕的中间部分需要有小球产生以及显示出识别的物体是什么的文字,效果如下所示,它貌似识别成了大炮..

    这里写图片描述

    既然我们需要去通过点击屏幕去显示出小球,那么我们肯定是需要为其去添加手势,这里需要注意的是如果我们创建的是ARKit的框架,那么在Main.Storyboard当中默认设置的就是ARSCNView,ARSCNView是3D的AR场景视图,用来显示现实还有虚拟物件的视图,如果我们想使⽤SceneKit 作为渲染引擎的话就必须去使用它

    这里写图片描述

     //点击屏幕需要手势
        func regiterGestureRecognizers()
        {
            let tapGes = UITapGestureRecognizer(target: self, action: #selector(tapped))
    
            self.sceneView.addGestureRecognizer(tapGes)
        }

    然后再来看下手势的处理方法

      @objc func tapped(recognizer:UIGestureRecognizer){
    
            //创建一个sceneView,当前画面的SceneView也就是截图,我手势点击到的图片
            //ARSCNView是3D的AR场景视图
            let sceneView = recognizer.view as! ARSCNView
    
            //手指碰到手机,有用的范围就是中间部分,因为我们要识别的是屏幕中央的物件是什么
            let touchLocation = self.sceneView.center;
    
            /**
             ARSession是管理设备相机和增强现实需要的运动处理相关的共享对象
    
             一个ARSession对象可以协调完成ARkit的主要过程来帮助你完成一个增强现实的体验。这些过程包括了从运动分析硬件中读取数据、控制设备的相机、对相机捕获的图像进行分析。(会话)session对象会综合所有结果,在你的现实世界和创建的虚拟世界之间创建一个对应的关系。从而构建出一个AR世界。你可以理解为现实与虚拟共存的第三世界。
             每一个AR体验都需要创建一个ARSession对象。你可以选择用SRSCNView或者ARSKView对象来构建AR视图显示部分,该视图对象包括一个ARSession实例。如果您为AR内容构建自己的渲染器,则你需要自己实例化和维护ARSession对象。
             运行一个会话需要配置一个ARSessionConfiguration类或其子类类或其子类ARWorldTrackingSessionConfiguration的实例。这些类决定了ARKit如何追踪设备与现实世界之间的相对位置与运动数据,因此会影响你创建的AR体验的质量。
             */
            //如果没有可用的用东西就直接返回,当前屏幕上没有可用用的帧数
            guard let currentFrame = sceneView.session.currentFrame else
            {
                return
            }
    
            //识别物体的特征点
            //在屏幕当中的某点去捕捉特征值
            let hitTestResults = sceneView.hitTest(touchLocation, types: .featurePoint)
    
            if hitTestResults.isEmpty{return}
    
            //我们只需要对第一个点结果
            guard let hitTestResult = hitTestResults.first else {return}
    
            //这个结果我们需要全局使用
            self.hitTestResult = hitTestResult;
    
            //这个结果我们去拆成一个一个的像素
            //当前帧画面所拿到的图片,需要把拿到的图片转换为像素
            //模型是直接去拿缓冲区里面的东西做处理的
            let pixelBuffer = currentFrame.capturedImage;
    
            //点击了图片转换为像素之后就进入了下面的方法
            performVisionRequest(pixelBuffer: pixelBuffer)
        }

    下面我们再来看下performVisionRequest方法,就是去创建图形分析请求,然后去检测

    func performVisionRequest(pixelBuffer:CVPixelBuffer){
    
            //下面就要用到模型了
            let visionModel = try! VNCoreMLModel(for: self.resentModel.model)
            //VNCoreMLModel 只是用于 Vision 请求的 Core ML 模型的容器。
    
            //然后声明一个模型识别请求:
            //VNCoreMLRequest 是一个图形分析请求,使用 Core ML 模型作为参数。它的完成回调中带一个 request 参数和一个错误对象。
    
            //识别完成之后会调用后面的闭包
            let request = VNCoreMLRequest(model: visionModel){request,error in
                //如果有错误就什么都不干
                if error != nil {return}
                // //其返回的结果是一个VNClassificationObservation数组,每一个VNClassificationObservation都是一个识别的结果,把结果给拿出来,把结果给拿出来
                guard let observations = request.results else{return}
    
                //把第一个结果给拿出来,VNClassificationObservation这个为模型里面的黑盒子,用来处理我们的所有运算结果
                /*
                 首先判断 request.results 是否是一个 VNClassificationObservation 对象数组,当 Core ML 模型是一个分类器,而不是预测器和图像处理器的时候会返回这种类型的数组
                 VNClassificationObservation 有两个属性: identifier — 一个字符串 — 和 confidence — 一个 0 和 1 之间的数字 — 表示分类正确性的概率。当使用对象检测模型时,你可能是通过大于某个可信度来识别对象的,比如 30%.
                 */
                let observation = observations.first as! VNClassificationObservation
    
                print("Name \(observation.identifier) and confidence is\(observation.confidence)")
    
                //展示预测的结果,因为CoreML本身是不知道是什么东西的,只能预测
                DispatchQueue.main.async {
                    //调用displayPredictions函数渲染AR的效果
                    self.displayPredictions(text:observation.identifier)
                }
            }
            //模型需要224*224,取出中间这一块来,进行喂食
            //VNImageCropAndScaleOptionCenterCrop
            //告诉视觉算法如何缩放输入图像的可选设置。
            request.imageCropAndScaleOption = .centerCrop
    
            //拿到结果
            self.visionRequests = [request]
    
            //选择镜像,因为摄像头采集进来的像素是左右相反的
            //数据在里面是阵列的方式
            let imageRequestHandler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: .upMirrored, options: [:])
    
            //这个处理的过程是非常耗费时间的
            DispatchQueue.global().async {
                //把图像拿来进行运行
                /*
                创建一个物体检测请求 VNRequest
                根据数据源(pixelBuffer 或者 UIImage)创建一个 VNImageRequestHandler
                调用[VNImageRequestHandler performRequests] 执行检测
                 */
                try! imageRequestHandler.perform(self.visionRequests)
            }
    
        }

    然后我们再去看下调用displayPredictions函数渲染AR的效果的函数

    func displayPredictions(text:String){
    
            //创建节点
            let node = createText(text: text)
    
            //其中将 ARHitTestResult 信息转换成三维坐标
            //也就是将现实世界中的xyz轴换算到手机当中的xyz轴
            //世界坐标矩阵
            /**
             SCNVector3Make将ARHitTestResult的worldTransform.columns[3].x,worldTransform.columns[3].y,worldTransform.columns[3].z做成SCNVector3,即可得到3维坐标
             */
            node.position = SCNVector3(self.hitTestResult.worldTransform.columns.3.x,
                                       self.hitTestResult.worldTransform.columns.3.y,
                                       self.hitTestResult.worldTransform.columns.3.z)
            //把AR结果给展示出来,scene是一个SCNScene对象代表三维场景及其内容。渲染用于显示的场景
            self.sceneView.scene.rootNode.addChildNode(node)
        }

    然后我们再去看下创建节点的方法createText

    func createText(text:String) -> SCNNode
        {
            //父节点,就和NSObject的概念是一样的
            let parentNode = SCNNode()
    
            //圆形的几何图形,在SceneKit的世界里面单位是以米为单位的,0.01代表的就是1公分的小球形状
            let sphere = SCNSphere(radius: 0.01)
    
            /*
             每个SCNMaterial有8个视觉特性,分别对应在明暗过程中不同的贴图效果。每个视觉特性,都是SCNMaterialProperty的一个实例,可以提供一个颜色或纹理等2D内容。SCNMaterial的lightingModelName也会影响到渲染的最终效果
             Material --> 材料
             可以使用firstMaterial或者materials属性添加一个或多个贴图。多个几何图形可以用相同的贴图,这样修改贴图就可以同时改变所有使用它的几何
             */
            let sphereMaterial = SCNMaterial();
    
            sphereMaterial.diffuse.contents = UIColor.orange
    
            sphere.firstMaterial = sphereMaterial
    
            //创建一个球形的节点
            let sphereNode = SCNNode(geometry: sphere)
    
            //文字,参数1位文字,参数2为厚度
            let textGeo = SCNText(string: text, extrusionDepth: 0)
    
            //设置文字居中
            textGeo.alignmentMode = kCAAlignmentCenter
            //我们不一定需要去创建一个贴图去设置
            textGeo.firstMaterial?.diffuse.contents = UIColor.orange
            //specular指定了材质的镜面反射
            textGeo.firstMaterial?.specular.contents = UIColor.white
            //设置是否是正反两面都能看
            textGeo.firstMaterial?.isDoubleSided = true
            //设置字体的大小
            textGeo.font = UIFont(name: "Futura", size: 0.15)
    
            let textNode = SCNNode(geometry: textGeo)
            //设置缩放
            textNode.scale = SCNVector3Make(0.2, 0.2, 0.2)
    
            parentNode.addChildNode(sphereNode)
            parentNode.addChildNode(textNode)
    
            return parentNode
        }

    下面是关于ViewController当中的一些成员变量

    //分析的结果
        var visionRequests = [VNRequest]()
        //拿到模型
        var resentModel = Resnet50();
    
        //点击之后得到的结果就是截屏下来的那张图片
        //根据2D坐标取得3D模型:ARHitTestResult
        var hitTestResult:ARHitTestResult!;
    展开全文
  • 1.打开3D特征点采集工具,对准需要识别的三维物体 2.需要围绕三维物体,365度旋转。采集的特征点信息越完整,识别跟踪时候就更稳定 3.特征信息采集完成后,点击 "Share" 按钮,将特征点信息发送到电脑 4....

    四、案例开发

    1.打开 3D特征点采集工具 ,对准需要识别的三维物体

    2.需要围绕三维物体,365度旋转。采集的特征点信息越完整,识别跟踪时候就更稳定

    3.特征信息采集完成后,点击 "Share" 按钮,将特征点信息发送到电脑

    展开全文
  • ARKit从入门到精通(7)--二维图像识别

    千次阅读 2020-05-07 14:38:03
    camera扫描识别图片,然后显示一些AR内容(比如3D物体、视频、图片、音频,跳转URL等),这是最基本也是最原始的AR功能。本部分教程通过一个小案例了解ARKit的2D Image Recognition特性。 前提:需要在9....

    以下内容由公众号:三次方AIRX(国内领先的AI、AR、VR技术学习与交流平台) 整理

    在iOS 11.3或更高版本中,开发者可以通过在ARKit中启用图像识别功能。camera扫描识别图片,然后显示一些AR内容(比如3D物体、视频、图片、音频,跳转URL等),这是最基本也是最原始的AR功能。本部分教程通过一个小案例了解ARKit的2D Image Recognition特性。

    前提:需要在9.3或更高版本上运行Xcode,并且在iOS 11.3或更高版本上测试。

    在开始之前先下载基础工程(https://pan.baidu.com/s/1JnBBYytgCtoMj8y9jS8fPw  密码:rj8w),我们在此基础上进行开发(一些UI控件已经准备好)。

    Step 1:启用图像识别功能

    在Xcode打开刚刚下载的工程,效果如下图:

    为了使用ARKit的Image Recognition功能,我们首先需要:

    1.准备好被识别的图像

    2.设置好image的物理size

    点击Assets.xcassets,然后你会看到AR Resources,操作如下图:

    也可以将自己的图像拖放到这个组中。但是要确保给图片命名。

    接下来需要设置图片的物理size。ARKit需要知道现实世界的图像大小来确定图像到相机的距离。输入不正确的物理图像大小将导致ARImageAnchor与相机的距离错误。

    需要记住的是每次添加要识别的新图像时,都要提供物理图像大小。例如,“Book”图像的物理尺寸如下:

    这是在15.4英寸MacBook Pro显示屏上打开图像文件时的物理图像大小属性。

    Step 2:图像属性

    ARKit的图像识别能力可能会随着图像的性质而变化。在AR Resources组中的图像会看到“Book”图像有两个质量评估。当图像对比度高时,图像检测效果最好。如下图所示:

    “Snow Mountain”和“Trees In The Dark”图片没有黄色警告。这意味着ARKit认为这些图像很容易识别。

    Step 3:编写代码

    打开ViewController.swift文件,将以下方法插入View Controller class:

    func resetTrackingConfiguration() {
        guard let referenceImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else { return }
        let configuration = ARWorldTrackingConfiguration()
        configuration.detectionImages = referenceImages
        let options: ARSession.RunOptions = [.resetTracking, .removeExistingAnchors]
        sceneView.session.run(configuration, options: options)
        label.text = "Move camera around to detect images"
    }

    接下来,在viewWillAppear(_:)和resetButtonDidTouch(_:)方法中调用resetTrackingConfiguration()方法。

    使用ARImageAnchor识别图像:现在我们要将一个透明的白色平面覆盖到检测到的图像上。白色平面反映了新检测到的参考图像的形状和大小,以及图像与设备摄像头的距离。

    更新renderer(_:didAdd:for:) 方法:

    
    func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
        guard let imageAnchor = anchor as? ARImageAnchor else { return }
        let referenceImage = imageAnchor.referenceImage
            let imageName = referenceImage.name ?? "no name"
            
        let plane = SCNPlane(width: referenceImage.physicalSize.width, height: referenceImage.physicalSize.height)
        let planeNode = SCNNode(geometry: plane)
        planeNode.opacity = 0.20
        planeNode.eulerAngles.x = -.pi / 2
        
        planeNode.runAction(imageHighlightAction)
    }

    现在我们已经有了平面节点和检测到的图像的名称,我们将把平面节点添加到节点参数中,并设置标签的文本来显示识别的图像的名称。在planeNode.runAction(imageHighlightAction)之后插入以下代码:

    
    node.addChildNode(planeNode)
    DispatchQueue.main.async {
        self.label.text = "Image detected: \"\(imageName)\""
    }

    接下来我们先测试一些我们目前实现的功能,效果如下图:

    Step 4:显示3D物体

    首先注释掉下面的代码:

    
    let planeNode = self.getPlaneNode(withReferenceImage: imageAnchor.referenceImage)
    planeNode.opacity = 0.0
    planeNode.eulerAngles.x = -.pi / 2
    planeNode.runAction(self.fadeAction)
    
    node.addChildNode(planeNode)

    用以下代码替换TODO: Overlay 3D Object comment:

    let overlayNode = self.getNode(withImageName: imageName)
    overlayNode.opacity = 0
    overlayNode.position.y = 0.2
    overlayNode.runAction(self.fadeAndSpinAction)
    
    node.addChildNode(overlayNode)

    接下来测试运行效果如下图:

    完整项目链接:

    https://github.com/appcoda/ARKitImageRecognition

    参考资料:

    https://www.appcoda.com/arkit-image-recognition/

    公众号[三次方AIRX]:三次方•数字化人才在线教育平台。帮助Z时代大学生和0-5年职场人获得混合现实、人工智能、游戏开发、大数据等能力。

    展开全文
  • ARFoundation系列讲解 - 57 3D物体识别

    千次阅读 2020-12-04 13:06:40
    目前在ARFoundation中,3D物体识别只支持A9处理器或更高版本的iOS设备。使用3D物体识别跟踪功能需要预先采集3D物体特征点信息。苹果公司给我们提供了一个采集3D物体特征点工具,我们需要下载并使用Xcode编译成应用...
  • ARFoundation之路-3D物体识别之一

    千次阅读 热门讨论 2019-08-14 14:02:37
      3D物体跟踪技术,是指通过图像处理技术对摄像头中拍摄到的3D物体识别定位并对其姿态进行跟踪的技术。3D物体跟踪技术的基础也是图像识别,但比前述图像识别跟踪要复杂得多,原因在于现实世界中的物体是三维的,从...
  • ARKIt 1.5中新增 面部追踪、垂直面检测 、 更高精度绘制不规则表面、 识别2D图像、重新定位, 自动对焦、分辨率、重置世界原点 检测不规则平面绘制 创建plan预制体添加脚本ARKitPlaneMeshRender 第一个参数为...
  • 记录真实世界对象的空间特征,然后使用结果在用户环境中查找这些对象并触发AR内容。...在iOS 12中,您可以通过在ARKit中启用对象检测来创建此类AR体验:您的应用程序提供参考对象,它可以对已知真实世界...
  • ARKit 2教程:创建AR购物体验-扫描和检测真实3D对象 了解如何使用ARKit扫描现实世界中的物体以在您的应用程序中检测到它们,并创建令人惊叹的AR购物体验。 :right_arrow:
  • 在Xcode中我们可以通过创建ARResourceGroup, 添加.arobject的文件到ReferenceObject, 以及相关模型来到达3D物体检测识别的效果。同样的效果我们在Swift Playgrounds中亦可以实现, 但到目前为止(2022-03-15)Swift ...
  • unity AR3D物体识别

    万次阅读 2017-11-21 10:15:29
    上篇讲到了各种AR插件的一些对比 因为上个项目需求用到3D物体...1.先讲一下EasyAR的3D物体识别 这个平台的3D识别是需要你上传一个与现实物体一样的OBJ模型的格式 模型包括一个OBJ (.obj)文件以及相应的MTL (.
  • ARKit 获取识别到的水平面

    千次阅读 2017-08-14 16:35:09
    承接ARKit案例开发/宣传Demo开发/游戏开发 QQ:2118590660 ...ARKit 识别到平面后会以委托的方式传出来  分别为 添加一个平面、 更新平面、移除平面   public delegate void ARAnchorAdd...
  • Unity ARKit的基本使用

    千次阅读 2020-07-03 11:48:03
    Unity ARKit的基本使用资源下载使用ARKit至少需要以下三个类UnityARSessionNativeInterface接收ARKit检测到的特征点接收ARKit检测到的平面信息根据现实显示影子在Unity编辑器上进行调试原文链接 资源下载 Bitbucket...
  • ARFoundation系列讲解 - 59 3D物体识别

    热门讨论 2021-05-08 23:03:44
    五、多物体跟踪 1.先将AR Tracked Object Manager组件下的Tracked Object Prefab属性清空 2.再采集一个 花露水 的特征点信息(过程和前面一样这里我就不演示了) 3.将新采集的3D特征点文件加入识别图库 4.在...
  • ARKit has been established as a reliable way to do stable consumer level AR since its first announcement at WWDC in June. More recently, during the iPhone X announcement, it was revealed that ARKit wi...
  • AR扫描效果,ARCoreMagicDoor,arkit,arCore,PortalKit+Pro+VR+and+Mobile+supported,QR+CodeBarcode+Scanner+and+Generator--Cross+PlatformPro+v4.3u5.1-2017(二维码的识别
  • ARKit之路-运动跟踪原理

    千次阅读 2020-07-29 21:54:55
    本节我们将更加深入的学习ARKit运动跟踪原理,通过学习就会很自然的理解ARKit在运动跟踪方面的优劣势,并在开发中尽量避免劣势或者采取更加友好的方式扬长避短。 (一)ARKit坐标系   实现虚实融合最基本的要求是...
  • ARKit之路-手势检测

    千次阅读 2020-09-01 21:58:03
      智能移动设备的手势操作是使用者接受并已习惯的操作方式,在移动端AR应用中,对虚拟物体的操作也基本通过手势操作完成,本节我们将学习一些手势检测基础知识。需要注意的是本节中描述的手势检测是指用户在手机...
  • 比如识别一个立方体,将之置换为一个虚拟的飞船,拿起立方体看到的就是拿起飞船,移动旋转立方体看到的就是飞船在移动旋转。
  • 1. 使用ARKit,结合使用CoreML进行图像识别,然后将相应的数据图表放置到被识别物体上方。 2. 结合SceneKit,在真实场景中渲染3D图表,可以进行简单到操作。 详细信息,请参考github页面:[Project Data to ...
  • Vuforia官方更新到7.5.26之后说支持ARCore1.4,但是我拿官方的案例打包到小米8 SE与华为P20 Pro都没有成功(PS :如果有成功的,请指导下博主),也因此放下ARCore转战ARKit,比想象中的顺利 官方有点点小坑哇,说...
  • ARKit之路-ARKit原理

    千次阅读 2020-07-03 22:05:56
      ARKit提供如此出众AR体验的背后是苹果公司强大的软硬件整合能力和做到极致的用户体验,苹果公司的生态拥有其他企业无法比拟的优势,这不仅包括强大的硬件资源,还包括精细健壮的软件技术和追求完美的场景渲染。...
  • 关于苹果ARKit的功能梳理和展望

    千次阅读 2020-12-31 10:10:59
    自从在 WWDC 2017 中引入以来,ARKit 的功能不断发展,它最初启用了六自由度(6DoF)设备跟踪和 Plane tracking 跟踪,现在经过五次迭代(1.0、1.5、2.0、3.0、3.5),实现了许多功能 最新的 iPad Pro 上的新功能,...
  • Unity中的ARKit的基本使用简介

    千次阅读 2020-01-09 18:34:13
    ARKit的简单使用ARKit插件下载介绍准备工作场景创建ARReference和ARReferenceSetARReferenceARReferenceSet代码示例引用接收ARKit检测到的特征点:接收ARKit检测到的平面信息根据现实显示影子打包 ARKit 插件下载 该...
  • 大众印象中的AR增强现实(Augmented Reality)是通过计算机视觉增强...传统的AR是通过计算目标物体的特征点和透视角度,通过视觉增强算法推算摄像机与被识别物体之间的相对位置和夹角,AR增强显示系统是围绕着被识别
  • Unity-ARKit入门

    千次阅读 2018-08-02 19:13:47
    ARKit简介 ARKit是苹果在 2017 WWDC 发布的一款全新的增强现实框架技术产品. ARKit 可以将 iOS 设备的摄像头和设备动作检测 (Motion) 功能,集成到您的应用或者游戏当中,从而为用户提供增强现实体验。ARKit原...
  • 青亭网(ID:qingtinwang)--链接科技前沿,服务商业创新5月...据青亭网了解,本次更新中加入的4个AR Foundation功能包括:面部追踪、2D图片追踪、3D物体追踪和环境识别。面部追踪功能同时支持ARKit和ARCore,它可通过...
  • ARKit 测距

    2017-10-19 18:14:27
    通过ARKit完成的一个房屋测距的demo。主要用到平面识别,2D坐标3D坐标转换

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 549
精华内容 219
关键字:

arkit物体识别