2015-08-04 15 views
13

Sto utilizzando CoreImage per rilevare i volti sulle immagini. Funziona benissimo sul simulatore, ma sul mio iphone 5, non funziona quasi mai con le immagini scattate con la fotocamera dell'iphone (funziona con le immagini selezionate sul web).Volti rilevati sul simulatore ma non su iphone utilizzando il framework CoreImage

Il codice seguente mostra come rilevare i volti. Ogni immagini, l'applicazione registra

passaggio 1: immagine verrà elaborata

Ma solo registra

passaggio 2: faccia rilevato

per pochi loro, mentre quasi tutti i volti sono rilevati sul simulatore o se utilizzo immagini dal web.

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") 
          // ... 

Sono in cerca di una soluzione da tre ore e sono abbastanza disperata :).

Qualsiasi suggerimento sarebbe molto apprezzato!

Grazie in anticipo.

+0

le immagini hanno la stessa risoluzione? Non sono sicuro di quale algoritmo usi Apple, ma il rilevamento su più scale può essere un problema con alcuni sistemi. hai provato a tirare le immagini in cui il telefono non rileva i volti, inserendolo nel simulatore e poi verificando se funziona? – ABC

+0

Sì, funziona sempre sul simulatore, anche con le foto scattate dalla fotocamera dell'iPhone – Randy

+0

, quindi la variabile faceFeatures restituisce un vettore vuoto in pratica quando si esegue il telefono? – ABC

risposta

4

Ho trovato un modo davvero strano per risolvere il mio problema.

Impostando la proprietà allowsEditing di UIImagePickerController() a true quando si selezionano le mie foto, tutto funziona correttamente ... Non riesco a capire perché, ma funziona.

Problemi correlati