swift

CoreImage 人脸检测

2020-05-19  本文已影响0人  秋叶红90

首先需要导入

import CoreImage

添加一个人脸图片 展示在viewController的self.imgView上
然后

func detect() {
        let personPic:UIImageView! = self.imgView
        guard let personciImage = CIImage(image: personPic.image!) else {
            return
        }
        
        let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh]
        let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy)
        let faces = faceDetector?.features(in: personciImage)
        
        // 将 Core Image 坐标转换成 UIView 坐标
        let ciImageSize = personciImage.extent.size
        var transform = CGAffineTransform(scaleX: 1, y: -1)
        transform = transform.translatedBy(x: 0, y: -ciImageSize.height)
        
        for face in faces as! [CIFaceFeature] {
            print("Found bounds are \(face.bounds)")
            
            // 实现坐标转换
            var faceViewBounds = face.bounds.applying(transform)
            
            // 计算实际的位置和大小
            let viewSize = personPic.bounds.size
            let scale = min(viewSize.width / ciImageSize.width,
                            viewSize.height / ciImageSize.height)
            let offsetX = (viewSize.width - ciImageSize.width * scale) / 2
            let offsetY = (viewSize.height - ciImageSize.height * scale) / 2
            
            faceViewBounds = faceViewBounds.applying(CGAffineTransform(scaleX: scale, y: scale))
            faceViewBounds.origin.x += offsetX
            faceViewBounds.origin.y += offsetY
            
            let faceBox = UIView(frame: faceViewBounds)
            
            faceBox.layer.borderWidth = 3
            faceBox.layer.borderColor = UIColor.red.cgColor
            faceBox.backgroundColor = UIColor.clear
            personPic.addSubview(faceBox)
            
            self.imgView_top.constant = faceViewBounds.origin.y - 102*self.imgView.height/CGFloat(300)
            self.imgView_left.constant = faceViewBounds.origin.x - 63*self.imgView.width/CGFloat(375)
            
            
            
            if face.hasLeftEyePosition {
                print("Left eye bounds are \(face.leftEyePosition)")
            }
            
            if face.hasRightEyePosition {
                print("Right eye bounds are \(face.rightEyePosition)")
            }
        }
    }

此方法还可以检测文字 和 长方形,等功能

上一篇 下一篇

猜你喜欢

热点阅读