Core ML-Vision

2018/5/14 posted in  AI

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