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])
// 处理面部轮廓回调 class func faceRectangles(observations: [VNFaceObservation], image: UIImage, complete: detectImageHandler) -> Void { for faceObversion in observations { //转换坐标 let rect = self.convertRect(oldRect: faceObversion.boundingBox, imageSize: image.size) } }
// 处理人脸特征回调 class func faceLandmarks(observations: [VNFaceObservation], image: UIImage, complete: detectImageHandler) -> Void { for faceObversion in observations { // 获取细节特征 let landmarks: VNFaceLandmarks2D = faceObversion.landmarks! //... } }
// 左眼,右眼 var leftEye: VNFaceLandmarkRegion2D? var rightEye: VNFaceLandmarkRegion2D? // 鼻子,鼻嵴 var nose: VNFaceLandmarkRegion2D? var noseCrest: VNFaceLandmarkRegion2D? var medianLine: VNFaceLandmarkRegion2D? // 外唇,内唇 var outerLips: VNFaceLandmarkRegion2D? var innerLips: VNFaceLandmarkRegion2D? // 左眉毛,右眉毛 var leftEyebrow: VNFaceLandmarkRegion2D? var rightEyebrow: VNFaceLandmarkRegion2D? // 左瞳,右瞳 var leftPupil: VNFaceLandmarkRegion2D? var rightPupil: VNFaceLandmarkRegion2D?
项目代码:Demo
参考: oc