我正在使用CoreImage来检测图片上的面孔。它在模拟器上工作得很好,但在我的iphone 5上,它几乎不能用于使用iphone相机拍摄的照片(它适用于在网络上拍摄的照片)。
以下代码显示了我如何检测面部。对于每张图片,应用程序都会记录
第1步:处理图像
但它只记录
第2步:检测到面部
对于他们中的少数几个,而几乎每个面部都在模拟器上检测到,或者我使用网络上的图片。
var context: CIContext = {
return CIContext(options: nil)
}()
let detector = CIDetector(ofType: CIDetectorTypeFace,
context: context,
options: [CIDetectorAccuracy: CIDetectorAccuracyHigh])
let imageView = mainPic
for var index = 0; index < picsArray.count; index++ {
if !(picsArray.objectAtIndex(index).objectAtIndex(1) as! Bool) {
var wholeImageData: AnyObject = picsArray.objectAtIndex(index)[0]
if wholeImageData.isKindOfClass(NSData) {
let wholeImage: UIImage = UIImage(data: wholeImageData as! NSData)!
if wholeImage.isKindOfClass(UIImage) {
NSLog("step 1 : image will be processed")
let processedImage = wholeImage
let inputImage = CIImage(image: processedImage)
var faceFeatures: [CIFaceFeature]!
if let orientation: AnyObject = inputImage.properties()?[kCGImagePropertyOrientation] {
faceFeatures = detector.featuresInImage(inputImage, options: [CIDetectorImageOrientation: orientation]) as! [CIFaceFeature]
} else {
faceFeatures = detector.featuresInImage(inputImage) as! [CIFaceFeature]
}
let inputImageSize = inputImage.extent().size
var transform = CGAffineTransformIdentity
transform = CGAffineTransformScale(transform, 1, -1)
transform = CGAffineTransformTranslate(transform, 0, -inputImageSize.height)
for faceFeature in faceFeatures {
NSLog("step 2 : face detected")
// ...
我现在一直在寻找一个解决方案三个小时,我非常绝望:)。
任何建议都会非常感激!
提前致谢。
答案 0 :(得分:4)
我发现了解决问题的一种非常奇怪的方式。
通过在挑选照片时将allowsEditing
的{{1}}属性设置为UIImagePickerController()
,一切正常......我无法理解原因,但它确实有效。