1

Я пытаюсь выяснить, как получить изображение из рулона камеры пользователя и запустить на нем некоторые операции с Core Image (обнаружить лица). Я могу успешно загрузить изображение в uiimageview, но по какой-то причине я не могу использовать это изображение для обнаружения лиц с использованием образа ядра. Массив, о котором идет речь, это последний бит кода, этот массив должен содержать CIFaceFeatures, но он продолжает оставаться пустым. Я пробовал использовать разные изображения, но все равно работать не буду. Есть идеи?Почему этот массив всегда пуст?

-(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 

} 

ответ

1

Попробуйте изменить следующую строку

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

к:

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage]; 

Важной частью является переход от использования @"UIImagePickerControllerOriginalImage" с помощью UIImagePickerControllerOriginalImage. Причина этого заключается в том, что UIImagePickerControllerOriginalImage объявляется как следующее:

extern NSString *const UIImagePickerControllerOriginalImage; 

В другом месте, в фактическом файле реализации Apple, будет что-то вроде этого, где UIImagePickerControllerOriginalImage фактически определен:

NSString *const UIImagePickerControllerOriginalImage = @"someStringLiteral"; 

Фактическая строка буквальное значение, которое Apple выбрало для использования, может быть любым, и необязательно должно быть таким же, как имя переменной. Выбрав [info objectForKey:@"UIImagePickerControllerOriginalImage"], вы в основном сделали предположение, что UIImagePickerControllerOriginalImage- Фактически @"UIImagePickerControllerOriginalImage", что необязательно в этом случае.

Я предполагаю, что исходная строка привела к возврату значения nil, что означает, что объект не найден для ключа @"UIImagePickerControllerOriginalImage". Если это image, то nil, остальная часть кода будет в основном «бесшумно терпеть неудачу». Если вы будете следовать коду, это в основном будет означать следующее:

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 
Смежные вопросы