Есть ли ограничения по размеру исходного изображения в Google Mobile Vision для iOS?

У меня возникли проблемы при использовании GoogleMobileVision для iOS.

С 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; возвращает изображение размером 750x750 на iPhone 6s и 1932x2576 для значения по умолчанию picker.allowsEditing

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

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!
}

а затем отправьте выходное изображение в функции (в:, параметры:).

Эта проблема-

Всякий раз, когда изображение берется из сборщика после обрезки (picker.allowsEditing = YES;), тогда оно работает, но не работает, если обрезка не выполняется (picker.allowsEditing = NO;).

Obeseration-

Всякий раз, когда изображение обрезается с помощью picker.allowsEditing = YES;, для imageOrientation устанавливается значение up.

Предположение-

Google mobile vision лучше всего работает с ориентированными вверх изображениями. Но позже я узнал, что

let options = [GMVDetectorImageOrientation: GMVImageOrientation.leftTop.rawValue] //rightTop также работает let Face = faceDetector.features(in: image, options: nil) как? [GMVFaceFeature] Но это весьма запутывает то, какая GMVImageOrientation будет установлена ​​для какой imageOrientation. Тогда я нормализовал ориентацию, используя это.

Поэтому при отправке изображения в функции (в:, options:) просто отправьте изображение как image.imageByNormalizingOrientation().

Это сработало для меня.

Другие вопросы по тегам