Сбой iOS при повторном вызове Vision с CVPixelBuffer - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть приложение, которое неоднократно указывает объекту VNImageRequestHandler выполнить VNDetectFaceRectanglesRequest из CVPixelBuffer, который мне доставляют с камеры iOS.

Я часто вижу сбои от Fabric, которые выглядят так:

#0 Crashed: com.apple.main-thread

EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000000000000

0 CoreVideo

CVPixelBufferGetWidth + 20

Я уже пытаюсь проверить CVPixelBuffer, используя расширение, прежде чем передать его в видение следующим образом:

var isValid: Bool {
    let cvBufferWidth = CVPixelBufferGetWidth(self)
    let cvBufferHeight = CVPixelBufferGetHeight(self)
    let size = CVPixelBufferGetDataSize(self)
    let bytesPerRow = CVPixelBufferGetBytesPerRow(self)

    guard cvBufferWidth > 0 && cvBufferHeight > 0 && size > 0 && bytesPerRow > 0 else {
        return false
    }

    return true
}

Я также обрабатываю только один CVPixelBuffer за один раз (у Apple есть пример проекта, который говорит, что это лучший метод в комментариях).

Что мне делать? Я не могу избавиться от этой ошибки! Должен ли я заблокировать базовый адрес CVPixelBuffer?

CVPixelBufferLockBaseAddress(self, CVPixelBufferLockFlags.readOnly)

Apple говорит, что не делайте этого, если вы используете GPU, и я знаю, что в некоторых случаях Vision будет использовать GPU.

Есть идеи?

...