Vison 与 Core ML 的关系
Vision 是 Apple 在 WWDC 2017 推出的图像识别框架。
Core ML 是 Apple 在 WWDC 2017 推出的机器学习框架。
Core ML的作用就是将一个Core ML模型,转换成我们的App工程可以直接使用的对象,就是可以看做是一个模型的转换器。
Vision在这里的角色,就是相当于一个用于识别Core ML模型的一个角色.
-
Core ML可以看做一个模型的转换器,可以将一个 ML Model 格式的模型文件自动生成一些类和方法,可以直接使用这些类去做分析,让我们更简单的在app中使用训练好的模型。
-
Vision本身就是能对图片做分析,他自带了针对很多检测的功能,相当于内置了一些Model,另外Vision也能使用一个你设置好的其它的Core ML Model来对图进行分析。
-
Vision就是建立在Core ML层之上的,使用Vision其实还是用到了Core ML,只是没有显式地直接写Core ML的代码而已。
应用场景
-
Face Detection and Recognition(人脸检测和识别)
-
Machine Learning Image Analysis(机器学习图像分析)
-
Barcode Detection(条码检测)
-
Image Alignment Analysis(图像对齐分析)
-
Text Detection(文本检测)
-
Horizon Detection(地平线检测)
-
Object Detection and Tracking(对象检测和跟踪)
Vison 的使用 与结构图
Vision使用中的角色有: Request,RequestHandler,results和results中的Observation数组。
Request类型: 有很多种,比如图中列出的 人脸识别、特征识别、文本识别、二维码识别等。
// 转换CIImage
let cgImage = image.cgImage!
// 创建处理requestHandler
let detectRequestHandler = VNImageRequestHandler(cgImage: cgImage)
// 设置回调
let completionHandler: VNRequestCompletionHandler = { (request: VNRequest, error: Error?) in
self.handleImageWithType(type: type, image: image, observations: request.results!, complete: complete)
}
// 创建Request
var detectRequest = VNDetectFaceRectanglesRequest.init(completionHandler: completionHandler)//面部轮廓
//var detectRequest = VNDetectFaceRectanglesRequest.init(completionHandler: completionHandler)//面部特征
// 发送请求
try? detectRequestHandler.perform([detectRequest])
// 转换CIImage
let cgImage = image.cgImage!
// 创建处理requestHandler
let detectRequestHandler = VNImageRequestHandler(cgImage: cgImage)
// 设置回调
let completionHandler: VNRequestCompletionHandler = { (request: VNRequest, error: Error?) in
self.handleImageWithType(type: type, image: image, observations: request.results!, complete: complete)
}
// 创建Request
var detectRequest = VNDetectFaceRectanglesRequest.init(completionHandler: completionHandler)//面部轮廓
//var detectRequest = VNDetectFaceRectanglesRequest.init(completionHandler: completionHandler)//面部特征
// 发送请求
try? detectRequestHandler.perform([detectRequest])
// 处理人脸特征回调
class func faceLandmarks(observations: [VNFaceObservation], image: UIImage, complete: detectImageHandler) -> Void {
for faceObversion in observations {
// 获取细节特征
let landmarks: VNFaceLandmarks2D = faceObversion.landmarks!
//...
}
}
// 处理人脸特征回调
class func faceLandmarks(observations: [VNFaceObservation], image: UIImage, complete: detectImageHandler) -> Void {
for faceObversion in observations {
// 获取细节特征
let landmarks: VNFaceLandmarks2D = faceObversion.landmarks!
//...
}
}
项目代码:CoreML-Vision