#ARKit# ARKit图片检测新手教程
WWDC2019发布了ARKit3.0, 如果你对ARKit不是很了解,想尝试一下,本文将引导你实现ARKit的图片识别功能。
测试例子
下载Apple官方的例子:
下载完,用XCode打开,就可以正常测试了。详细细节,可以参考上边的链接,或者例子中的README.md
测试用的图片在工程的Resouces/Assets.xcassets目录下。

添加自定义识别图
步骤
文档里有详细步骤,简单来说就是:
- 在Assets.xcassets添加一个新的资源,类型为AR Reference Image
 

- 
把新的识别图拖到这个新资源里
 - 
选中新添加的资源,为它设置资源名字和物理尺寸
 

注意,这里的尺寸设置的越精确越好。ARKit需要利用这个尺寸来计算物理距离。
完成!
警告
慢,如果只是这样子,你会发现在新图片上有个警告图标:

错误信息:
Assets.xcassets: warning: Ambiguous Content: The AR reference image "" has an unassigned child.
如果忽略这个警告,直接测试,则会发现无法识别这个图。
修复错误
那么这个错误该怎么修复呢?
到这个图片所在的目录下,找到Contents.json文件

注意,XCode默认是不显示这个文件的。
用文本编辑器打开

{
  "images" : [
    
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  },
  "properties" : {
    "width" : 10,
    "unit" : "centimeters"
  }
}
如果对比例子中自带图片的Contents.json文件,你会发现有一个很大的区别:

{
  "images":[
      {"idiom":"universal","filename":"imac-27.jpg"}
  ],
  "info":{
      "version":1,
      "author":"xcode"
  },
  "properties":{
      "width":23.439,
      "unit":"inches"
  }
}
对比发现,自动生成的Contents.json文件中,images数组是空的。
需要手动添加图片的信息,像这样:

{
  "images" : [
    {"idiom":"universal","filename":"unitylogo.jpg"}
  ],
  "info" : {
    "version" : 1,
    "author" : "xcode"
  },
  "properties" : {
    "width" : 10,
    "unit" : "centimeters"
  }
}
这时候,XCode里的警告就消失了。

打包测试,也能正常识别图片了。
持续显示识别图
官方例子中,识别图被识别出来以后,高亮显示了一下,然后就消失了。怎么样才能持续显示呢?
需要修改一下显示的动画。
找到ViewController.swift文件,修改imageHighlightAction方法:

// 文件:ViewController.swift
    var imageHighlightAction: SCNAction {
//        return .sequence([
//            .wait(duration: 0.25),
//            .fadeOpacity(to: 0.85, duration: 0.25),
//            .fadeOpacity(to: 0.15, duration: 0.25),
//            .fadeOpacity(to: 0.85, duration: 0.25),
//            .fadeOut(duration: 0.5),
//            .removeFromParentNode()
//        ])
        return .sequence([
            .wait(duration: 0.25),
            .fadeOpacity(to: 0.85, duration: 0.25),
            .fadeOpacity(to: 0.15, duration: 0.25),
            .fadeOpacity(to: 0.85, duration: 0.25)
            ])
    }
测试,完成!

代码工程
https://github.com/zhangzhibin/ARKitImageDetection
后续
更多内容,欢迎关注我的公众号:耿直的IT男阿斌
