2017-04-09 27 views
0

我使用CIDetector来检测UIImage中的人脸。我得到正确的面部矩形,但是当我裁剪图像检测到面部矩形。它不会显示在我的图像视图中。CIDetector,检测到的脸部图像未显示?

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

这里是我的代码: -

@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 Screen Shot 1

屏幕截图2 Screen Shot 2

屏幕截图3 Screen Shot 3

回答

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) 
+0

能否请您解释一下什么是我做错了? –

+0

@PawanJoshi我之前遇到过这个问题,我不知道为什么直接转换不起作用。然而,似乎其他人也面临这个问题:[http://stackoverflow.com/questions/40939075/unable-to-convert-ciimage-to-uiimage-in-swift-3-0](http://stackoverflow .COM /问题/ 40939075 /无法对转换-ciimage到UIImage的功能于迅速-3-0) – chengsam

相关问题