系統人臉識別:解決系統人臉識別獲得的圖片方向問題

一、最後得到的圖像反向轉換測試

int height = CVPixelBufferGetHeight(pixelBuffer);
CGAffineTransform transform = CGAffineTransformMakeScale(1, -1);
transform = CGAffineTransformTranslate(transform, 0, -1 * height);
/* Do your face detection */
CGRect faceRect = CGRectApplyAffineTransform(feature.bounds, transform);
CGPoint mouthPoint = CGPointApplyAffineTransform(feature.mouthPosition, transform);

 

二、若是圖像一開始就不是正向的spa

/**
     *   問題來自 UIImage 的取向和 CIDetectorImageOrientation 之間的區別。從 iOS 的文檔:
     CIDetectorImageOrientation
     要檢測密鑰被用來指定圖像的顯示方向的功能。此密鑰是一個 NSNumber 對象具備相同的值定義的 TIFF 和 EXIF 規格 ;值的範圍能夠從 1 到 8。值指定原點 (0,0) 的圖像所在的位置。若是不存在,默認值是 1,這意味着圖像的原點是左上角。每一個值所指定的圖像來源的詳細信息,請參閱 kCGImagePropertyOrientation。
     可用在 iOS 5.0 和更高版本。
     在 CIDetector.h 中聲明。
     因此如今的問題是這些兩個方向之間的轉換,在這裏是個人代碼中的所做所爲、 我測試和它爲全部方向工做:
     *
     */
  
    int exifOrientation;
    switch (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 }; // TODO: read doc for more tuneups
    CIDetector *faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:detectorOptions];
   
    NSArray *features = [faceDetector featuresInImage:[CIImage imageWithCGImage:image.CGImage]
                                              options:@{CIDetectorImageOrientation:[NSNumber numberWithInt:exifOrientation]}];
相關文章
相關標籤/搜索