关于 iOS 11 Vision 框架与机器学习

2017-06-15  本文已影响891人  张嘉夫

从名字就大概能猜到,Vision 可以执行计算机视觉任务。过去我们大概只能用 OpenCV 来做,但现在 iOS 终于有了自己的 API。

Vision 可以执行的任务有以下种类:

利用 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 的力量,就可以造出无比强大的图像处理管道!

上一篇 下一篇

猜你喜欢

热点阅读