Получите CVPixelBuffer (кадр камеры вместе с моделями Ar) в качественной манере - PullRequest
1 голос
/ 29 мая 2019

Мне нужно получить CVPixelBuffer, содержащий кадр камеры вместе с моделями AR, которые я поместил, со скоростью 30+ кадров в секунду, предпочтительно с низким энергопотреблением и нагрузкой на процессор.

CapturedImageиз кадра в session(_:didUpdate:) нет моделей AR.

Я пытался использовать sceneView.snapshot(), чтобы получить UIImage, который я затем преобразовал в CVPixelBuffer.Это имеет заметно высокий энергетический эффект.

Наконец, я также попытался создать SCNRenderer, который затем использую для получения UIImage через snapshot(atTime:with:antialiasingMode:), а затем преобразовать в CVPixelBuffer.Это имеет немного меньшее влияние на процессор и энергию.Но это работает только в портретном режиме, сгенерированный UIImage некорректен в ландшафтном режиме.

Есть ли способ получить CVPixelBuffer с меньшими затратами ресурсов процессора и энергии (по крайней мере, по сравнению с вышеупомянутым)

1 Ответ

1 голос
/ 03 июня 2019

Вы можете создать свой собственный CVPixelBuffer, затем получить из него MTLTexture и, наконец, сделать визуализацию SCNRenderer в этой текстуре.Это не потребует затрат процессора на генерацию UIImage из API снимков.

Ключевой частью здесь является использование CVMetalTextureCache для получения текстуры металла из пикселя.буфер.

...