Ошибка и зависание в iOS Vision API "computeBlinkFunction" во время обнаружения функции
Я использую iOS Vision API для обнаружения функций в режиме реального времени на ARFrame
Буферы передавались с камеры на iPhone X. Обычно это работает довольно хорошо, но как на iOS 11, так и на iOS 12 я иногда видел ошибки в консоли, о которых я не смог найти никакой информации. Эта ошибка выводится несколько раз подряд и обычно связана с серьезными зависаниями в моем приложении.
Кто-нибудь видел эту ошибку раньше в своей консоли, или есть идеи, что ее вызывает? Любая информация или советы по отладке будут с благодарностью.
LandmarkDetector error -20:out of bounds in int vision::mod::LandmarkAttributes::computeBlinkFunction(const vImage_Buffer &, const Geometry2D_rect2D &, const std::vector<Geometry2D_point2D> &, vImage_Buffer &, vImage_Buffer &, std::vector<float> &, std::vector<float> &) @ /BuildRoot/Library/Caches/com.apple.xbs/Sources/Vision/Vision-2.0.62/LandmarkDetector/LandmarkDetector_Attributes.mm:535
Немного больше информации: я думаю, что эта ошибка происходит во время моего VNDetectFaceLandmarksRequest
, В настоящее время я передаю ограничивающий прямоугольник, найденный ARKit, нормализованный в inputFaceObservations
, но я также видел эти ошибки, когда я использовал VNDetectFaceRectangleRequest
чтобы найти границу лица. Я использую VNSequenceRequestHandler
сделать эти запросы в режиме реального времени на каждом ARFrame
с камеры, работающей в фоновом режиме.
1 ответ
В этом году на WWDC с Vision было рассмотрено, что запросы на обнаружение намного более ресурсоемки, чем запросы на отслеживание. Я считаю, что рекомендация состояла в том, что, как только вы получите обнаружение, вы должны прекратить свои запросы на обнаружение и просто использовать вместо этого отслеживание. Одна вещь, которую я заметил в своем собственном коде Vision (я использую его для текста и штрих-кодов), состоит в том, что, как только вы получаете начальное обнаружение, вы начинаете получать поток наблюдений, и, возможно, Vision выводит наблюдения быстрее чем система может реально справиться, если это будет продолжаться достаточно долго.