1

カメラから画像を取得し(を利用UIImagePickerController)、ドキュメントディレクトリに保存しています。

次に、これらの画像を別のビュー コントローラーでフェッチして、 と を使用して顔の部分を取得しCIDetector APIますCIfacefeature API

問題は、画像を適切に取得できるのに、顔をまったく検出していないことです。そして、同じ画像をメインバンドルに保存すると、検出されます。

どこに問題があるのか​​わからない??。私はすべてを試しました。UIImageドキュメント ディレクトリまたはカメラに保存される画像の形式に問題がある可能性があります。

助けてください。私はあなたに感謝します。

- (void) imagePickerController:(UIImagePickerController *)picker       didFinishPickingMediaWithInfo:(NSDictionary *)info
{
   UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
                                                         NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString* path = [documentsDirectory stringByAppendingPathComponent: 
                      [NSString stringWithString: @"SampleImage.jpg"] ];
    NSData* data = UIImageJPEGRepresentation(image, 0);
    [data writeToFile:path atomically:YES];
    [picker  dismissModalViewControllerAnimated:YES];
    FCVC *fcvc = [[FCVC alloc] initwithImage:image];

    [self.navigationController pushViewController:fcvc animated:YES];
}

FCVC の ViewDidLoad で、次の関数を渡して呼び出しています。

-(void)markFaces:(UIImage *)pic 
{
    CIImage* image = [CIImage imageWithCGImage:pic.CGImage];
    CGImageRef masterFaceImage;

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

// create an array containing all the detected faces from the detector    
   NSArray* features = [detector featuresInImage:image];
   for(CIFaceFeature* faceFeature in features)
   {       
        masterFaceImage  =  CGImageCreateWithImageInRect(facePicture.CGImage,CGRectMake(faceFeature.bounds.origin.x,faceFeature.bounds.origin.y, faceFeature.bounds.size.width,faceFeature.bounds.size.height));
   }
   self.masterExtractedFace = [UIImage imageWithCGImage:masterFaceImage];
}

前もって感謝します。

4

1 に答える 1

1

これに対する簡単な修正は、カメラを常に縦向きで使用している場合、次の小さなスニペットを追加することです。

NSDictionary* imageOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:6] forKey:CIDetectorImageOrientation];
NSArray* features = [detector featuresInImage:image options:imageOptions];

方向を動的に把握する必要がある場合に、現在の方向を把握すること。

小切手kCGImagePropertyOrientation

于 2012-07-19T12:06:02.020 に答える