美文网首页
关于 iOS 11 Vision 框架与机器学习

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

作者: 张嘉夫 | 来源:发表于2017-06-15 11:56 被阅读891次

从名字就大概能猜到,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 的力量,就可以造出无比强大的图像处理管道!

相关文章

网友评论

      本文标题:关于 iOS 11 Vision 框架与机器学习

      本文链接:https://www.haomeiwen.com/subject/ufiyqxtx.html