MacOS: уменьшите использование ЦП для VNFaceObservation - PullRequest
1 голос
/ 01 ноября 2019

Я пытаюсь определить лица на веб-канале с помощью Vision API. Загрузка процессора очень высока, например, 60% или 80%. Есть ли способ уменьшить его?

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

try? VNSequenceRequestHandler().perform([VNDetectFaceRectanglesRequest()], on: image)
if let results = VNDetectFaceRectanglesRequest().results as? [VNFaceObservation] {
    DispatchQueue.main.async {
        // update UI
    }
}

1 Ответ

1 голос
/ 11 ноября 2019

Видение

  • Попробуйте определить regionOfInterest in VNDetectFaceRectanglesRequest
  • Убедитесь, что ваш запрос " […] запрос свободен дляиспользовать GPU для ускорения его обработки."со свойством usesCPUOnly
  • Если позволяет использование, попробуйте preferBackgroundProcessing

AVFoundation ТакжеВы можете выбрать более низкое качество для своих устройств захвата, если вы используете AVCapture

Как и выбор правильных настроек на основе ProcessInfo.processInfo.thermalState:

  • 'AVCaptureSession.sessionPreset'
  • Анализ максимального числа лиц в секунду
  • Отключение HDR не требуется для вашего AVCaptureDevice

Другое

  • Уменьшите количество обновлений вашего CVPixelBuffer
    • Выделите его фиксированный размер
    • Если вы отображаете его для пользователя, используйте только отображаемую часть
  • Если вы выполняете некоторую постобработку изображений, подумайте об использовании Accelerate

Избегайте такой большой работы в главном потоке

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...