使用 CoreImage 框架在模拟器上检测到但在 iphone 上未检测到的人脸
Faces detected on simulator but not on iphone using CoreImage framework
我正在使用 CoreImage 检测图片上的人脸。它在模拟器上运行良好,但在我的 iphone 5 上,它几乎无法处理用 iphone 的相机拍摄的照片(它可以处理从网上挑选的照片)。
下面的代码展示了我是如何检测人脸的。对于每张照片,应用程序都会记录
step 1 : image will be processed
但它只记录
step 2 : face detected
他们中的少数人,而几乎每一张脸都在模拟器上检测到,或者如果我使用来自网络的图片。
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")
// ...
我已经找了三个小时的解决方案,我很绝望:)。
如有任何建议,我们将不胜感激!
提前致谢。
我发现了一个非常奇怪的方法来解决我的问题。
通过在选择我的图片时将 UIImagePickerController()
的 allowsEditing
属性 设置为 true
,一切正常......我不明白为什么,但它有效。
我正在使用 CoreImage 检测图片上的人脸。它在模拟器上运行良好,但在我的 iphone 5 上,它几乎无法处理用 iphone 的相机拍摄的照片(它可以处理从网上挑选的照片)。
下面的代码展示了我是如何检测人脸的。对于每张照片,应用程序都会记录
step 1 : image will be processed
但它只记录
step 2 : face detected
他们中的少数人,而几乎每一张脸都在模拟器上检测到,或者如果我使用来自网络的图片。
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")
// ...
我已经找了三个小时的解决方案,我很绝望:)。
如有任何建议,我们将不胜感激!
提前致谢。
我发现了一个非常奇怪的方法来解决我的问题。
通过在选择我的图片时将 UIImagePickerController()
的 allowsEditing
属性 设置为 true
,一切正常......我不明白为什么,但它有效。