【问题标题】:iOS, face detection, detecting a location away from the faceiOS,人脸检测,检测远离人脸的位置
【发布时间】:2013-07-16 23:45:39
【问题描述】:

我正在尝试将人脸检测添加到我的应用程序中,而我添加的代码返回了一个与人脸无关的 CGRect。

这是代码

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

但是这段代码给了我一个远离真实面孔的位置,我在这里做错了什么?

【问题讨论】:

  • 边界的大小如何?你为什么不看完整的界限?当然,原点将在角落里。这就是为什么它被称为原点而不是中心

标签: ios face-detection core-image


【解决方案1】:

问题来自于 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转换坐标系

【讨论】:

  • 嗨,我不知道如何实现这个要点!! O应该复制并粘贴其中的所有内容吗?我是 xcode 的新手。
  • 已经实现了。只需复制文件并使用它。这是 CIFaceFeature 上的一个类别
【解决方案2】:

iOS 10 和 Swift 3

如果您对面部特征不感兴趣

你可以检查苹果example你可以检测到它与Orientation

配合得很好

您可以选择人脸元数据使相机跟踪人脸并在人脸显示黄色框

它的性能example

【讨论】:

    猜你喜欢
    • 2016-06-02
    • 2020-06-24
    • 2019-11-18
    • 2013-09-24
    • 1970-01-01
    • 2012-04-17
    • 2013-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多