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

  • 相关阅读:
    MySQL++:(转)mybatis 常用 jdbcType数据类型
    CF1556F Sports Betting (状压枚举子集DP)
    ICPC Greater New York Region 2020 F
    post方式实现导出/下载文件
    自定义一个v-if
    在vue项目中引用element-ui时 让el-input 获取焦点的方法
    element-select当下拉框数据过多使用懒加载
    vue强制刷新组件更新数据的方式
    .net core efcore dbfirst(sqlserver,mysql,oracle,postgresql)
    camunda安装配置mysql以及整合springboot
  • 原文地址:https://www.cnblogs.com/caolongs/p/7903284.html
Copyright © 2011-2022 走看看