Проблема с распознаванием лиц с использованием CIDetector

Я работаю над приложением, в котором мне нужно определять положение левого глаза, правого глаза и рта. У меня imageView на моем self.view, а imageView содержит изображение лица, теперь я хочу получить координаты глаз и рта. Я видел 2-3 примера кода для этого, но все они примерно одинаковы во всех кодах, которые мы должны инвертировать, чтобы сопоставить координаты, которые мне не нужны, потому что в моем представлении есть другие элементы управления. И еще одна вещь, которую они все используют

UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"image.png"]];

но у моего imageView есть фрейм, и я не могу инициализировать его с изображением. Когда я это сделал, я обнаружил, что координаты глаз и рта faceFeature неверны.

Я начал свой код с этот пример кода, но в этом представлении также инвертируется его Y координата.

Может ли кто-нибудь помочь мне, как я могу определить положение глаз и рта на изображении UIImageView без инвертирования моего self.view.

Пожалуйста, дайте мне знать, если мой вопрос недостаточно ясен.


person TheTiger    schedule 22.06.2012    source источник


Ответы (2)


Получилось! - отредактировал класс, чтобы у него был faceContainer, содержащий все объекты лица (рот и глаза), затем этот контейнер поворачивается, и все. Очевидно, это очень грубо, но это работает. Вот ссылка: http://www.jonathanlking.com/download/AppDelegate.m. Затем замените им делегат приложения из примера кода.

- СТАРЫЙ СТОЛ -

Взгляните на этот Документация Apple и сдвиньте вперед 42 с . Также вам, вероятно, стоит посмотреть доклад, поскольку в нем есть демонстрация того, чего вы пытаетесь достичь, он называется «Использование основного изображения в iOS и Mac OS X» и имеет вид здесь.

person Jonathan King    schedule 22.06.2012
comment
спасибо за ответ, но что вы пытаетесь объяснить? Я знаю, как определить лицо FaceFeature, глаза и положение рта с помощью CGImage, у меня другой вопрос, у меня проблема с uiimage uiimageview. - person TheTiger; 22.06.2012
comment
Извините, совершенно неправильно понял ваш вопрос! - person Jonathan King; 22.06.2012
comment
@VakulSaini, ты нашел мой новый ответ полезным? И если да, можете ли вы отметить это как правильный ответ. - person Jonathan King; 23.06.2012
comment
Спасибо @jonathanlking, вы написали для меня код, и я нашел его хорошим ... вы создали новое представление контейнера и вместо того, чтобы инвертировать весь вид, вы перевернули представление контейнера .... но остается одна проблема, как я сказал в мой вопрос, что у моего imageView есть собственный фрейм, и я не хочу запускать его с изображением, как вы делаете в своем коде ..... но большое спасибо за вашу помощь. - person TheTiger; 23.06.2012

Хитрость здесь в том, чтобы преобразовать возвращаемые точки и границы из CIDetector в ваши координаты, вместо того, чтобы переворачивать ваше собственное представление. CIImage имеет начало в левом нижнем углу, которое вам нужно будет преобразовать в левый верхний

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);
// Same for eyes, etc

Для вашего второго вопроса о UIImageView вам просто нужно сделать

imageview.image = yourImage

После того, как вы инициализировали свое изображение

person Jack    schedule 19.09.2013