У меня есть приложение, которое неоднократно указывает объекту 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.
Есть идеи?