Как заставить работать простое распознавание лиц? - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь получить простой пример распознавания лиц, работающий с ML Kit на iOS. Вот выдержки из кода Objective 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 не возвращает ошибок, но и лиц тоже нет. Это журналы:

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

Я что-то не так делаю?

1 Ответ

0 голосов
/ 01 апреля 2019

Я понял это.Проблема заключалась в том, что мне нужно установить метаданные изображения с ориентацией, подобной этой:

    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

...