1

J'essaie de comprendre comment obtenir une image à partir de la pellicule de l'utilisateur et exécuter des opérations Core Image (détecter des visages). Je suis capable de charger l'image avec succès dans une uiimageview, mais pour une raison quelconque, je ne suis pas capable d'utiliser cette image pour détecter les visages en utilisant l'image de base. Le tableau en question est le dernier bit de code, ce tableau devrait contenir CIFaceFeatures, mais il arrive toujours vide. J'ai essayé d'utiliser différentes images, mais ne fonctionnera toujours pas. Des idées?Pourquoi ce tableau est-il toujours vide?

-(void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
[self dismissViewControllerAnimated:YES completion:nil]; 
UIImage *image = [info valueForKey:@"UIImagePickerControllerOriginalImage"]; 
self.facePicture.image = image; 

CIImage* image = [CIImage imageWithCGImage:self.facePicture.image.CGImage]; 

CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace 
              context:nil options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]]; 

NSArray* features = [detector featuresInImage:image]; //***features array is empty 
NSLog(@"array count is %i",features.count); //returns 0 
//Code continues with face detection stuff 

} 

Répondre

1

Essayez de changer la ligne suivante

UIImage *image = [info valueForKey:@"UIImagePickerControllerOriginalImage"]; 

à:

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

L'important est l'évolution de l'utilisation @"UIImagePickerControllerOriginalImage" à l'aide UIImagePickerControllerOriginalImage. La raison est que UIImagePickerControllerOriginalImage est déclarée comme suit:

extern NSString *const UIImagePickerControllerOriginalImage; 

Par ailleurs, dans le dossier de mise en œuvre effective d'Apple, sera quelque chose comme ça où UIImagePickerControllerOriginalImage est en fait défini:

NSString *const UIImagePickerControllerOriginalImage = @"someStringLiteral"; 

La chaîne réelle littérale La valeur que Apple a choisi d'utiliser peut être n'importe quoi, et ne doit pas nécessairement être identique au nom de la variable. En appelant [info objectForKey:@"UIImagePickerControllerOriginalImage"], vous étiez en train de faire l'hypothèse que UIImagePickerControllerOriginalImageest réellement @"UIImagePickerControllerOriginalImage", ce qui ne doit pas nécessairement être le cas.

Je fais l'hypothèse que la ligne d'origine a abouti à une valeur retournée de nil, ce qui signifie qu'aucun objet n'a été trouvé pour la clé @"UIImagePickerControllerOriginalImage". Si ce image est alors nil, le reste du code devrait fondamentalement "échouer silencieusement". Si vous suivez le code, cela équivaudrait à faire quelque chose comme ceci:

self.facePicture.image = nil; 

CIImage* image = [CIImage imageWithCGImage:NULL]; // likely returns nil 

NSArray* features = [detector featuresInImage:nil]; //***features array is empty 
NSLog(@"array count is %i", features.count); //returns 0 
Questions connexes