iOS Vision 框架概览
Vision 是 Apple 在 WWDC 2017 推出的图像识别框架,它基于 Core ML,所以可以理解成 Apple 的工程师设计了一种算法模型,然后利用 Core ML 训练,最后整合成一个新的框架,相比开源模型然后让开发者自己整合起来,这种方式更安全也更方便我们使用。
那么既然是图像识别框架,那就是用来识别图像的,具体识别啥?我们可以看看官方文档:
- Face Detection and Recognition:面部检测
- Machine Learning Image Analysis:机器学习图像分析
- Barcode Detection:矩阵码/条形码检测
- Image Alignment Analysis:图像对齐分析
- Text Detection:文字检测
- Horizon Detection:水平面检测
- Object Detection and Tracking:物体检测和追踪
可以看到,能做的事还是很多的,在此之前我们许多类似的工作都是利用第三方识别框架,例如面部识别,现在我们可以尝试使用官方提供的框架。当然,不能做的事情也有,比如面部特征对比,物体特征对比,这些功能或许以后会有。
那么,具体该怎么用呢。Apple 在 Vision 框架中提供了非常统一的调用方式,我们想要获取系统检测到的数据如同从字典里获取数据一样简单。
1.首先,每一种识别类型都有对应的 Request 方法,例如面部特征检测就有 VNDetectFaceLandmarksRequest,Barcode 检测有 VNDetectBarcodesRequest
2.在创建 Request 的时候,指定你的 completeHandler,Handler 可以是一个闭包,也可以是一个方法,只要类型一致即可
3.现在有了 Request,我们还需要一个容器,这个容器存放即将处理的图片以及一些配置信息,处理单一图片使用 VNImageRequestHandler,处理图片序列使用 VNSequenceRequestHandler
4.如果我们使用的是 VNImageRequestHandler,那么在初始化时就提供需要处理的图片,初始化以后使用 perform(_:) 方法执行我们的 Request
5.在第二步提供的 Handler 中处理系统提供的分析数据
看起来似乎很麻烦,实际上代码量很少,这个框架最麻烦的地方不在于 API 的使用,而在于图片处理方案的取舍,以及分析数据的使用。
在这里大家可以看一看我的使用 Vision 识别照片的人物面部,这是一个利用 VNDetectFaceLandmarksRequest 来检测面部矩形区域的最基本的样例,如果我有空的话会写更多的样例,同时也会更新在这里(拖延症如是说 (¬_¬))