【问题标题】:CIDetector , detected face image is not showing?CIDetector ,检测到的人脸图像不显示?
【发布时间】:2017-09-04 15:19:35
【问题描述】:

我正在使用 CIDetector 来检测 UIImage 中的人脸。我正确地获得了面部矩形但是当我将图像裁剪为检测到的面部矩形时。它没有显示在我的图像视图中。

我已经检查过了。我的形象不是零

这是我的代码:-

@IBAction func detectFaceOnImageView(_: UIButton) {
    let image = myImageView.getFaceImage()
    myImageView.image = image
}


extension UIView {

func getFaceImage() -> UIImage? {
    let faceDetectorOptions: [String: AnyObject] = [CIDetectorAccuracy: CIDetectorAccuracyHigh as AnyObject]

    let faceDetector: CIDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: faceDetectorOptions)!

    let viewScreenShotImage = generateScreenShot(scaleTo: 1.0)

    if viewScreenShotImage.cgImage != nil {
        let sourceImage = CIImage(cgImage: viewScreenShotImage.cgImage!)
        let features = faceDetector.features(in: sourceImage)
        if features.count > 0 {
            var faceBounds = CGRect.zero
            var faceImage: UIImage?
            for feature in features as! [CIFaceFeature] {
                faceBounds = feature.bounds
                let faceCroped: CIImage = sourceImage.cropping(to: faceBounds)
                faceImage = UIImage(ciImage: faceCroped)
            }
            return faceImage
        } else {
            return nil
        }
    } else {
        return nil
    }
}

func generateScreenShot(scaleTo: CGFloat = 3.0) -> UIImage {
    let rect = self.bounds
    UIGraphicsBeginImageContextWithOptions(rect.size, false, 0.0)
    let context = UIGraphicsGetCurrentContext()
    self.layer.render(in: context!)
    let screenShotImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    let aspectRatio = screenShotImage.size.width / screenShotImage.size.height
    let resizedScreenShotImage = screenShotImage.scaleImage(toSize: CGSize(width: self.bounds.size.height * aspectRatio * scaleTo, height: self.bounds.size.height * scaleTo))
    return resizedScreenShotImage!
}
}

有关更多信息,我附上价值观的屏幕截图。

屏幕截图 1

屏幕截图 2

屏幕截图 3

【问题讨论】:

    标签: ios swift cidetector


    【解决方案1】:

    试试这个:

    let faceCroped: CIImage = sourceImage.cropping(to: faceBounds)
    //faceImage = UIImage(ciImage: faceCroped)
    let cgImage: CGImage = {
        let context = CIContext(options: nil)
        return context.createCGImage(faceCroped, from: faceCroped.extent)!
    }()
    
    faceImage = UIImage(cgImage: cgImage)
    

    【讨论】:

    猜你喜欢
    • 2015-12-23
    • 2012-06-24
    • 2016-06-24
    • 2019-12-01
    • 2016-01-29
    • 2015-03-14
    • 2018-02-06
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多