Проблемы AVCaptureVideoPreviewLayer с гравитацией видео и точностью распознавания лиц

Я хочу использовать AVFoundation для настройки собственного канала камеры и обрабатывать прямую трансляцию для обнаружения улыбок.

Многое из того, что мне нужно, было сделано здесь: https://developer.apple.com/library/ios/samplecode/SquareCam/Introduction/Intro.html

Этот код был написан давно, поэтому мне нужно было внести некоторые изменения, чтобы использовать его так, как я хочу с точки зрения внешнего вида.

Я сделал следующие изменения:

  • Я включил автоматическое расположение и классы размеров, так как я хотел поддерживать разные размеры экрана. Я также изменил размеры слоя предварительного просмотра на полный экран.
  • Предустановка сеанса имеет значение AVCaptureSessionPresetPhoto для iPhone и iPad
  • Наконец, я установил гравитацию видео на AVLayerVideoGravityResizeAspectFill (похоже, это ключевая точка)

Теперь, когда я запускаю приложение, лица обнаруживаются, но, похоже, в координатах места рисования прямоугольников есть ошибка

Кажется, что у немного здесь в ландшафте

кажется, что х немного в портретной

Когда я изменяю гравитацию видео на AVLayerVideoGravityResizeAspect, кажется, все снова работает нормально.

лицо запечатлено, как на самом деле, просто неудачное время для скриншота

и в портрете

Единственная проблема заключается в том, что предварительный просмотр камеры имеет не тот размер, который является полноэкранным.

Так что теперь мне интересно, почему это происходит. Я заметил функцию в квадратной камере: videoPreviewBoxForGravity, которая обрабатывает тип гравитации и, кажется, вносит коррективы. - (CGRect)videoPreviewBoxForGravity:(NSString *) гравитация frameSize:(CGSize)frameSize apertureSize:(CGSize)apertureSize

Одна вещь, которую я заметил здесь, размер кадра остается неизменным независимо от типа гравитации.

Наконец, я прочитал где-то еще, при установке гравитации на AspectFill, некоторая часть подачи обрезается, что понятно, как и в ImageView scaletoFill.

У меня вопрос, как я могу сделать правильные настройки, чтобы это приложение работало для любого типа VideoGravity и любого размера просматривающего слоя.

Я посмотрел на некоторые связанные вопросы, например, CIDetector дает неправильную позицию по чертам лица, похоже, имеет аналогичную проблему, но это не помогает

Заранее спасибо.

0 ответов

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