1

我想弄清楚我如何才能從用戶的相機膠捲的圖像,並在其上運行一些核心圖像操作(檢測人臉)。我能夠成功地將圖像加載到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; 

在其他地方,在蘋果的實際執行文件,會是這樣的地方居然被定義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 
相關問題