3

我在使用适用于 iOS 的 GoogleMobileVision 时遇到了一些问题。

像这样设置 UIImagePickerController

UIImagePickerController* picker = [[UIImagePickerController alloc]init];
picker.delegate = self;

picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
[self presentViewController:picker animated:YES completion:^
{
    self.faceImageView.layer.sublayers = nil; // drawing and re-drawing some lines...
}];

和探测器:

[super viewDidLoad];
NSDictionary* options = @{
                          GMVDetectorFaceLandmarkType : @(GMVDetectorFaceLandmarkAll),
                          GMVDetectorFaceClassificationType : @(GMVDetectorFaceClassificationAll),
                          GMVDetectorFaceTrackingEnabled : @(NO),
                          //GMVDetectorFaceMode : @(GMVDetectorFaceAccurateMode) // Accurate mode detects face, but with wrong orientation; Fast mode can't detect faces!
                          };

self.faceDetector = [GMVDetector detectorOfType:GMVDetectorTypeFace options:options];

但是,如果使用:picker.allowsEditing = YES;一切正常!

问题:是图像大小的原因吗?picker.allowsEditing = YES;在 iPhone 6s 和 1932x2576 上返回大小为 750x750 的图像,默认值为picker.allowsEditing

XCode v. 8.1 iPhone 6S iOS 10.1.1 GoogleMobileVision v 1.0.4

4

2 回答 2

2

只需使用此规范化图像的方向

func imageByNormalizingOrientation() -> UIImage {
    if imageOrientation == .up {
        return self
    }
    UIGraphicsBeginImageContextWithOptions(size, false, scale)
    draw(in: CGRect(origin: CGPoint.zero, size: size))
    let normalizedImage: UIImage? = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return normalizedImage!
}

然后将输出图像发送到 features(in:, options:)。

于 2017-06-22T11:03:24.610 回答
0

问题-

每当裁剪后从选取器中获取图像(picker.allowsEditing = YES;)然后它可以工作,但如果裁剪未完成(picker.allowsEditing = NO;)则不起作用。

肥胖症-

每当使用 picker.allowsEditing = YES; 裁剪图像时,imageOrientation 都会设置为向上。

假设-

谷歌移动视觉看起来最适合使用向上的图像。但后来我发现

let options = [GMVDetectorImageOrientation: GMVImageOrientation.leftTop.rawValue] //rightTop 也有效 let faces = faceDetector.features(in: image, options: nil) as? [GMVFaceFeature] 但这很令人困惑,要为哪个 imageOrientation 设置哪个 GMVImageOrientation。因此,我通过使用this规范了方向。

因此,在将图像发送到特征(in:, options:) 时,只需将图像作为 image.imageByNormalizingOrientation() 发送。

这对我有用。

于 2017-06-27T06:08:07.937 回答