0
私はUIDmageで顔を検出するためにCIDetectorを使用しています。私は顔の矩形を正しく取得していますが、検出された顔の矩形に画像をトリミングすると発生します。それは私のイメージビューに表示されていません。CIDetector、検出された顔画像が表示されていませんか?
私はすでにチェックしています。私のイメージは、ここではnil
ではありません私のコードです: -
@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!
}
}
詳細については、私は値のスクリーンショットを添付しています。
あなたは私が間違って何をしていたか説明していただけます? –
@PawanJoshi前にこの問題に直面していましたが、なぜ直接変換が機能しないのかわかりません。しかし、他の人々もこの問題に直面しているようです:[http://stackoverflow.com/questions/40939075/unable-to-convert-ciimage-to-uiimage-in-swift-3-0](http://stackoverflow .com/questions/40939075/ciimage-to-uiimage-in-swift-3-0) – chengsam