从名字就大概能猜到,Vision 可以执行计算机视觉任务。过去我们大概只能用 OpenCV 来做,但现在 iOS 终于有了自己的 API。
Vision 可以执行的任务有以下种类:
- 找出图片里的面部。每张脸都有一个矩形。
- 寻找详细的面部特征,例如眼睛和嘴巴的位置,头的形状等等。
- 找出图片里矩形的东西,如路标。
- 跟踪视频里物体的移动。
- 确定 horizon 的角度。
- 转换两张图片使内容对齐。对于拼接图片很有用。
- 检测图片中包含文本的区域。
- 检测和识别条形码。
利用 Core Image 和 AVFoundation 已经能够实现上述的某些任务,但它们现在都被集中在同一个框架里,有统一的 API。
如果你的 App 需要做这些计算器视觉任务,就不再需要自己实现或用其他人的库了——用 Vision 框架即可。也可以把它和 Core Image 结合使用,以获得更强的图像处理能力。
还有更好的:Vision 可以用于驱动 Core ML,利用这些计算机视觉技术来预处理你的神经网络。例如,可以使用 Vision 来检测人脸的位置和尺寸,裁剪该区域的视频帧并在面部位置运行神经网络。
事实上,只要对图片或视频使用 Core ML,就应该使用 Vision。如果只用 Core ML,就需要确保输入图像是模型所需的格式,但有了 Vision 框架就可以调整图像的大小。省事。
使用 Vision 驱动 Core ML 的代码如下所示:
// Core ML 机器学习模型
let modelCoreML = ResNet50()
// 将 Core ML 模型连接到 Vision
let visionModel = try? VNCoreMLModel(for: modelCoreML.model)
let classificationRequest = VNCoreMLRequest(model: visionModel) {
request, error in
if let observations = request.results as? [VNClassificationObservation] {
/* 利用预测完成任务 */
}
}
let handler = VNImageRequestHandler(cgImage: yourImage)
try? handler.perform([classificationRequest])
注意可以给 VNImageRequestHandler
请求对象的数组,以把几个计算机视觉任务连在一起,像这样:
try? handler.perform([faceDetectionRequest, classificationRequest])
Vision 让计算机视觉真的变得易于使用。但对于喜欢机器学习的人来说,则可以把计算机视觉任务的输出输入到 Core ML 模型中。再结合 Core Image 的力量,就可以造出无比强大的图像处理管道!