【问题标题】:Faces detected on simulator but not on iphone using CoreImage framework在模拟器上检测到人脸,但在使用 CoreImage 框架的 iPhone 上检测不到
【发布时间】:2015-10-27 06:02:43
【问题描述】:

我正在使用 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")
                            // ...

我一直在寻找解决方案三个小时,我很绝望:)。

任何建议将不胜感激!

提前致谢。

【问题讨论】:

  • 图像的分辨率是否相同?我不确定 Apple 使用哪种算法,但多尺度检测可能是某些系统的问题。有没有试过把手机没检测到人脸的图片拉出来,放到模拟器里看看能不能用?
  • 是的,它总是在模拟器上工作,即使是从 iPhone 的相机拍摄的照片
  • 所以当你在手机上运行时,变量 faceFeatures 基本上返回一个空向量?
  • 是的,如果我使用 iPhone 相机中的图片(它适用于网络上的图片)
  • 不抱歉,但我刚刚注意到其他事情:如果我将相同的图片放入我的 images.assets 中(直接放入我的项目中),那么就会检测到人脸。所以我认为从照片库中挑选图片时会发生一些事情(使用 UIImagePickerController )

标签: face-detection core-image


【解决方案1】:

我找到了一种非常奇怪的方法来解决我的问题。

在挑选我的照片时,通过将UIImagePickerController()allowsEditing 属性设置为true,一切正常……我不明白为什么,但它可以工作。

【讨论】:

    猜你喜欢
    • 2019-12-01
    • 2013-09-24
    • 1970-01-01
    • 2016-03-10
    • 2014-07-21
    • 1970-01-01
    • 2017-07-30
    • 2011-06-22
    • 2019-11-18
    相关资源
    最近更新 更多