2013-07-18 147 views
1

我想將臉部檢測添加到我的應用程序,並且我添加的代碼給了我一個CGRect,它與臉部無關。iOS,人臉檢測,檢測遠離臉部的位置

下面的代碼

CIImage *cIImage = [CIImage imageWithCGImage:self.imageView.image.CGImage]; 
CIDetector* faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace 
              context:nil options:[NSDictionary 
     dictionaryWithObject:CIDetectorAccuracyHigh forKey:CIDetectorAccuracy]]; 
NSArray *features = [faceDetector featuresInImage:cIImage]; 
for(CIFaceFeature* faceObject in features) 
{ 
    FaceLocation.x = faceObject.bounds.origin.x; 
    FaceLocation.y = faceObject.bounds.origin.y; 
}// Here face location is far off away form the actual face 

但這個代碼給我一個位置遠離實際的臉,我究竟做錯了什麼?

+0

什麼關於邊界的大小?你爲什麼不看完整的界限?當然,原點將在角落。這就是爲什麼它被稱爲起源而不是中心 –

回答

2

問題來自UIImage和CIDetectorImageOrientation中的方向之間的差異。從iOS的文檔:

CIDetectorImageOrientation

用於指定要檢測其特徵的圖像的顯示方向鍵。此密鑰 是一個NSNumber對象,具有與TIFF和 EXIF規範相同的值;值的範圍可以從1到8.值 指定圖像的原點(0,0)的位置。如果不存在 ,則默認值爲1,這表示圖像 的原點位於左上方。有關每個值指定的圖像原點的詳細信息,請參閱kCGImagePropertyOrientation。

適用於iOS 5.0及更高版本。

在CIDetector.h中聲明。

您必須指定CIDetectorImageOrientation。這是我做的事:被檢測的特徵

int exifOrientation; 
switch (self.image.imageOrientation) { 
    case UIImageOrientationUp: 
     exifOrientation = 1; 
     break; 
    case UIImageOrientationDown: 
     exifOrientation = 3; 
     break; 
    case UIImageOrientationLeft: 
     exifOrientation = 8; 
     break; 
    case UIImageOrientationRight: 
     exifOrientation = 6; 
     break; 
    case UIImageOrientationUpMirrored: 
     exifOrientation = 2; 
     break; 
    case UIImageOrientationDownMirrored: 
     exifOrientation = 4; 
     break; 
    case UIImageOrientationLeftMirrored: 
     exifOrientation = 5; 
     break; 
    case UIImageOrientationRightMirrored: 
     exifOrientation = 7; 
     break; 
    default: 
     break; 
} 

NSDictionary *detectorOptions = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh }; 
CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:detectorOptions]; 

NSArray *features = [faceDetector featuresInImage:[CIImage imageWithCGImage:self.image.CGImage] 
              options:@{CIDetectorImageOrientation:[NSNumber numberWithInt:exifOrientation]}]; 

之後,還需要地圖座標到UIImage的觀點,在這裏用我的要點是:https://gist.github.com/laoyang/5747004轉換的座標系

+0

嗨,我不知道如何實施這個要點!應該只是複製並粘貼所有內容?我是xcode的新手。 – funkycoldmedia

+0

它已經實施。只需複製該文件,然後使用它。這是CIFaceFeature –

+0

thnx的一個類別,它做到了。 – funkycoldmedia

0

iOS版10斯威夫特3

如果沒有興趣的臉特徵

您可以查看蘋果example可以人臉檢測它的工作非常好,方向

您可以選擇面metedata使攝像機跟蹤臉部,並顯示在臉上的黃色盒子

其具有良好的性能比這example