2015-08-04 2 views
13

Я использую CoreImage для обнаружения лиц на изображениях. Он отлично работает на симуляторе, но на моем iphone 5 он почти никогда не работает с фотографиями, снятыми с камерой iphone (он работает с фотографиями, выбранными в Интернете).Лица, обнаруженные на симуляторе, но не на iphone с использованием рамки CoreImage

Следующий код показывает, как я обнаруживаю лица. Для каждой фотографии, приложение регистрирует

шаг 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

- это изображения того же разрешения? Я не уверен, какой алгоритм использует Apple, но обнаружение нескольких масштабов может быть проблемой для некоторых систем. вы пытались потянуть изображения, в которых телефон не обнаруживает лица, помещает их в симулятор, а затем видит, работает ли он? – ABC

+0

Да, он всегда работает на симуляторе, даже с фотографиями, снятыми с камеры iPhone – Randy

+0

, поэтому переменная faceFeatures возвращает пустой вектор в основном при запуске на телефоне? – ABC

ответ

4

Я нашел действительно странный способ решить мою проблему.

Установив allowsEditing объект UIImagePickerController() на true при выборе фотографий, все работает отлично ... Я не понимаю, почему, но это работает.