iOSの顔検出を画像で表示する(2)

以前書いた記事で、UIImage.imageOrientationがどんな状態でも、一度UIImageで書き直してしまえば問題ないと書いたんですが、やはりうまくいかないので、色々検索していたら見つけました。

参考:笑顔やまばたきも!iPhoneカメラでカンタン顔認識

featuresInImageで顔検出する際に、画像の向きを渡してやらないといけないらしい。optionは既に設定していたので見落としていたのですが・・・

 

    //オプション辞書作成(顔検出の精度/高精度)
    NSDictionary *options = [NSDictionary
                             dictionaryWithObject:CIDetectorAccuracyHigh
                             forKey:CIDetectorAccuracy];
    
    //CIDetectorを生成(画像解析/現在は顔検出のみ指定可能)
    CIDetector *faceDetector = [CIDetector
                                detectorOfType:CIDetectorTypeFace
                                context:_imageContext
                                options:options];

↑ここで指定するoptionは、検出の精度。

    //顔検出(位置情報を配列で返す)>画像向きのオプションを追加
    NSInteger orentation = [self exifOrientation:_originalImage];
    
    NSDictionary *imageOptions = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:orentation] forKey:CIDetectorImageOrientation];
    
    NSArray *faces = [faceDetector featuresInImage:coreImage
                                           options:imageOptions];

↑ここで指定するoptionは、検出に使用する画像の向き。

ということらしいです。

画像の向きの取得は、参考サイトに習って関数化(exifOrientation:_originalImage)してあります。

これでようやく、iPhoneのどの向きで撮影しても、ちゃんと顔検出が出来るようになりました。

よく見たら、前回の記事で参考にしたサイトにも記述があるのですが、特定の数値を指定していたりで、よくわかっていませんでした。

参考:
まみったー iPhone の向きと UIImageOrientation メモ
iOS 5のCIDetectorを使って顔認識してみた
笑顔やまばたきも!iPhoneカメラでカンタン顔認識

テスト環境:iPhone5+Xcode 5.1.1

「iOSの顔検出を画像で表示する(2)」への1件のフィードバック

コメントは停止中です。