2012-03-29 1 views
1

iOS 5.0의 코어 이미지 supports facial detection (another example of this)은 얼굴의 전체 위치는 물론 그 얼굴 안의 눈과 입의 위치를 ​​알려줍니다.iOS에서 얼굴 안의 입과 치아를 어떻게 인식 할 수 있습니까?

그러나이 위치를 수정하여 그 안에있는 입과 치아의 위치를 ​​감지하고 싶습니다. 나의 목표는 입의 가드를 사용자의 입과 치아 위에 두는 것이다.

iOS에서이를 수행 할 수있는 방법이 있습니까?

+0

편집 질문에 도움이되기를 바랍니다 만, 완전히 다시 작성 그들과 존재하지 않는 문장을 추가하는 것은 또 다른 것이다. @Brad Larson은 'iOS 5의 핵심 이미지가 얼굴 인식을 지원한다는 것을 알고 있습니다.' 사용자는이를 알지만 어떻게 이것을 추정 할 수 있습니다. 내가 이것을 지적한 유일한 이유는 내가이 대답을 내 대답에 언급했기 때문에 나는 그 질문을 전혀 읽지 않은 것처럼 내 대답을 본다! – bandejapaisa

+0

@bandejapaisa - iOS 5.0의 Core Image에 대한 튜토리얼 (링크 된 블로그 게시물의 제목에 설명되어 있음)에 연결된 Asker가 있으므로 향후 어느 시점에서 죽었을 경우를 대비하여 링크에 있었던 것을 표현하고 싶습니다. . 그런 다음 그들은 이것이 자신의 필요에 비해 충분하지 않다는 것을 지적 했으므로 코어 이미지가 왜 좋은 해결책이 아닌지를 설명하는 질문을 명확히했습니다. 그들이 제시하는 링크의 내용을 감안할 때 이것이 정당화 된 것이라고 생각합니다. –

답변

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)를 얻으면 간단히 물건을 그 위에 또는 그 근처에두기 만하면됩니다.

이 거리는 실험적으로 계산 될 수 있으며 눈과 입에 의해 형성된 삼각형에 상대적이어야합니다. 나는 가능하면이 거리를 계산하기 위해 얼굴을 많이 사용합니다 (트위터 아바타?)

이 그들을 더 읽을 수 있도록 지역 사회가 한 일이 도움이 :)

+0

감사합니다 Nacho, 아주 유용했습니다 :) – javienegas