代码之家  ›  专栏  ›  技术社区  ›  jacob

如何使简单的人脸检测工作?

  •  0
  • jacob  · 技术社区  · 7 年前

    我正在尝试获得一个简单的人脸检测的例子,在iOS上使用ML工具包。以下是目标C代码的摘录:

        FIRVisionFaceDetectorOptions *faceDetectorOptions;
        FIRVision *vision;
        FIRVisionFaceDetector *faceDetector;
    
        faceDetectorOptions = [[FIRVisionFaceDetectorOptions alloc] init];
        faceDetectorOptions.performanceMode = FIRVisionFaceDetectorPerformanceModeAccurate;
        faceDetectorOptions.landmarkMode = FIRVisionFaceDetectorLandmarkModeAll;
        faceDetectorOptions.contourMode = FIRVisionFaceDetectorContourModeNone;
        faceDetectorOptions.classificationMode = FIRVisionFaceDetectorClassificationModeAll;
        faceDetectorOptions.minFaceSize = 0.1; // TODO: finalize this option value
    
        vision = [FIRVision vision];
        faceDetector = [vision faceDetectorWithOptions:faceDetectorOptions];
    
        UIImage *staticImg = [UIImage imageNamed:@"sample.jpg"];
        FIRVisionImage *visionImage = [[FIRVisionImage alloc] initWithImage:staticImg];
    
        NSError* error = Nil;
        NSArray<FIRVisionFace *> * faces = [faceDetector resultsInImage:visionImage error:&error];
        NSLog(@"Synchronous result. error = %@, face count = %lu", error, faces.count);
    

    这个 sample.jpg 文件是以下作为资源下载并添加到我的Xcode项目的图像: http://chwb.org/wp-content/uploads/2014/01/Theo_Janssen-Face1.jpg

    这个 resultsInImage 不返回错误,但也不返回面。IT日志:

    Synchronous result. error = (null), face count = 0
    

    我做错什么了吗?

    0 回复  |  直到 7 年前
        1
  •  0
  •   jacob    7 年前

    我明白了。问题是我需要像这样设置图像元数据的方向:

        FIRVisionImageMetadata *imageMetadata = [FIRVisionImageMetadata new];
        imageMetadata.orientation = [FcFaceDetector visionImageOrientationFromImageOrientation:uiImage.imageOrientation];
        visionImage.metadata = imageMetadata;
    
    + (FIRVisionDetectorImageOrientation) visionImageOrientationFromImageOrientation:(UIImageOrientation)imageOrientation {
        switch (imageOrientation) {
                case UIImageOrientationUp:
                return FIRVisionDetectorImageOrientationTopLeft;
                case UIImageOrientationDown:
                return FIRVisionDetectorImageOrientationBottomRight;
                case UIImageOrientationLeft:
                return FIRVisionDetectorImageOrientationLeftBottom;
                case UIImageOrientationRight:
                return FIRVisionDetectorImageOrientationRightTop;
                case UIImageOrientationUpMirrored:
                return FIRVisionDetectorImageOrientationTopRight;
                case UIImageOrientationDownMirrored:
                return FIRVisionDetectorImageOrientationBottomLeft;
                case UIImageOrientationLeftMirrored:
                return FIRVisionDetectorImageOrientationLeftTop;
                case UIImageOrientationRightMirrored:
                return FIRVisionDetectorImageOrientationRightBottom;
        }
    }
    

    医生们似乎对此并不清楚,因为他们似乎建议不要设置: https://firebase.google.com/docs/ml-kit/ios/detect-faces#2-run-the-face-detector

    推荐文章