1

以下のコードを使用して、画像から顔を検出しました。

-(void)markFaces:(UIImageView *)imagePick {

CIImage* image = [CIImage imageWithCGImage:imagePick.image.CGImage];
CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeFace 
                                          context:nil options:[NSDictionary dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]];
NSDictionary* imageOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:6] forKey:CIDetectorImageOrientation];
NSLog(@"imageOptions %@",imageOptions);
NSArray* features = [detector featuresInImage:image options:imageOptions];

if([features count] > 0)
{
    NSLog(@"Face Found");
}
else
{
    NSLog(@"Face not Found");        
}
}

ランドスケープモードからスナップをクリックすると、このアルゴリズムは機能しません。なんで?どんな助けでも大歓迎です。

前もって感謝します

4

1 に答える 1

0

問題は次の行にあると思います。

NSDictionary* imageOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:6] forKey:CIDetectorImageOrientation];

渡す数字が6であるため、実際には縦向きのみを探すように指示しています。

ヘッダー ファイルのドキュメントには、次のように記載されています。

// -[CIDetector featuresInImage:options:] で使用できるオプション

/* このキーの値は、kCGImagePropertyOrientation にあるような 1..8 の整数 NSNumber です。存在する場合、その方向に基づいて検出が行われますが、返される特徴の座標は画像の座標に基づいたままになります。*/

そしてオプションは

ここに画像の説明を入力

文書化されていないのは面倒ですfeaturesInImage:options:(これを見たので、バグを報告する必要があります)

于 2012-07-23T13:30:18.130 に答える