2012-03-29 15 views
1

iOS 5.0のCore Imageは、顔の全体的な位置と、顔の中の目と口の位置を示す、supports facial detectionanother example of this)です。iOSで顔の口と歯を認識するにはどうすればよいですか?

しかし、この場所を洗練して、その中の口と歯の位置を検出したいと考えています。私の目標は、口のガードをユーザーの口や歯の上に置くことです。

iOSでこれを実現する方法はありますか?

+0

編集質問にホープが、完全に再書き込みそれらと存在しなかった文章を追加することは別のものです。 @ブラッドラーソンは、「iOS 5のコアイメージが顔の検出をサポートしていることを知っている」と付け加えました。ユーザーはこれを知るかもしれませんが、どのようにこれを推測できますか。私がこれを指摘する唯一の理由は、私はこの事実を私の答えに言及し、質問を一切読まなかったように私の答えを見せてくれるからです! – bandejapaisa

+0

@bandejapaisa - iOS 5.0のCore Imageに関するチュートリアルにリンクされている質問者(リンクされたブログ記事のタイトルの右に記載)です。 。彼らは、これが彼らのニーズには不十分であることを示したので、Core Imageがなぜ良い解決策ではないのかを明らかにする質問を明確にしました。彼らが提示したリンクの内容を考えれば、これは正当化されたものだと私は思っています。 –

答えて

9

私はmy blogで指導したことは間違っています。

部品5)座標系の調整:ウィンドウと画像の座標を変更する必要があるとしますが、これは実行しないでください。チュートリアルのように、CoreImageの座標と一致するようにビュー/ウィンドウ(UIKit座標)を変更するべきではありません。

これはそれを行うために、関連するコードの一部です:
(あなたがhereからmy blog postまたは直接から全体のサンプルコードを取得することができますそれがこの、あまりにもCIFiltersを使用して他の例が含まれます。D)を

// Create the image and detector 
CIImage *image = [CIImage imageWithCGImage:imageView.image.CGImage]; 
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeFace 
              context:... 
              options:...]; 

// CoreImage coordinate system origin is at the bottom left corner and UIKit's 
// is at the top left corner. So we need to translate features positions before 
// drawing them to screen. In order to do so we make an affine transform 
CGAffineTransform transform = CGAffineTransformMakeScale(1, -1); 
transform = CGAffineTransformTranslate(transform, 
             0, -imageView.bounds.size.height); 

// Get features from the image 
NSArray *features = [detector featuresInImage:image]; 
for(CIFaceFeature* faceFeature in features) { 

    // Get the face rect: Convert CoreImage to UIKit coordinates 
    const CGRect faceRect = CGRectApplyAffineTransform(
           faceFeature.bounds, transform); 

    // create a UIView using the bounds of the face 
    UIView *faceView = [[UIView alloc] initWithFrame:faceRect]; 

    ... 

    if(faceFeature.hasMouthPosition) { 
     // Get the mouth position translated to imageView UIKit coordinates 
     const CGPoint mouthPos = CGPointApplyAffineTransform(
            faceFeature.mouthPosition, transform); 
     ... 
    } 
} 

口の位置(mouthPos)を取得すると、あなたは単にそれの上または近くに物を置く。

この距離は実験的に計算することができ、目と口によって形成される三角形に対して相対的でなければなりません。私は、可能な場合は、この距離を計算するために顔の多くを使用します(Twitterのアバターを?)

はそれがそれらをより読みやすくし、コミュニティは一つのことである助けるために:)

+0

ありがとうナチョー、それは非常に便利でした:) – javienegas

関連する問題