zoukankan      html  css  js  c++  java
  • iOS

    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的代码而已。

    应用场景

    1. Face Detection and Recognition(人脸检测和识别)

    2. Machine Learning Image Analysis(机器学习图像分析)

    3. Barcode Detection(条码检测)

    4. Image Alignment Analysis(图像对齐分析)

    5. Text Detection(文本检测)

    6. Horizon Detection(地平线检测)

    7. 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

  • 相关阅读:
    APP测试--功能测试
    笨方法学python--读文件
    笨方法学python--参数,解包,变量
    Jmeter工具学习(四)——插件安装及使用(转载)
    JMeter工具学习(三)——获取全局变量 token
    FROM_UNIXTIME()时间戳转换函数
    软件测试用例编写规范总结(转载)
    Jmeter之Bean shell使用(二)(转载)
    JMeter工具学习(一)工具使用详细介绍
    JMeter工具学习(二)——获取登录 token
  • 原文地址:https://www.cnblogs.com/caolongs/p/7903284.html
Copyright © 2011-2022 走看看