Неточность происхождения CIFaceDetector
Я пытаюсь использовать CIDetector/CIFaceDetector для базового распознавания лиц, и, хотя кажется, что он распознает лица правильно, прямоугольник границ всегда неточен во всем, что я к нему добавляю. Вот пример с границами, которые он определяет как зеленое поле: http://i.imgur.com/bQNaEnq.jpg
Все, кажется, просто повсеместно сдвигается или отражается на эту сумму. Как будто координаты идут снизу слева, а не сверху слева. Я попробовал все восемь CIDetectorImageOrientations на этом изображении, и они все возвращают одинаковые неверные координаты. Что мне здесь не хватает? Вот код:
NSDictionary *detectorOptions = @{ CIDetectorAccuracy : CIDetectorAccuracyHigh };
self.faceDetector = [CIDetector detectorOfType:CIDetectorTypeFace context:nil options:detectorOptions];
self.features = [self.faceDetector featuresInImage:[CIImage imageWithCGImage:image.CGImage options:@{CIDetectorImageOrientation: @(1)}]];
Это действительно так. Изображение является базовым UIImage imageWithData: из Интернета.
1 ответ
Вы работаете там с UIKit и Core Image. Каждая из этих структур использует различные системы координации.
- Координационная система UIKit начинается в верхнем левом углу
- Координаты базового изображения начинаются слева внизу
Вы, вероятно, рисуете зеленый прямоугольник с координатами Core Image в контексте UIKit. Ваш код работает как надо, вам просто нужно преобразовать координаты.
Вы также можете найти ссылку на него в iOS Dev Library
Посмотрите, как CoreImage и UIKit координируют сообщение в блоге для очень аккуратного способа конвертировать между этими двумя системами.