Я работаю над приложением, которое использует видеопоток от DJI Mavic 2 и запускает его через модель машинного обучения для идентификации объектов.
Мне удалось получить мое приложение для предварительного просмотра канала с дрона с помощью этого примера проекта DJI , но у меня возникли большие проблемы при попытке перевести видеоданные в формат, которыйиспользуется в Vision
framework .
Я использовал этот пример от Apple в качестве руководства для создания моей модели (которая работает!), но, похоже, мне нужносоздать VNImageRequestHandler
объект, который создается с cvPixelBuffer
типа CMSampleBuffer
, чтобы использовать Vision
.
Любая идея, как сделать это преобразование?Есть ли лучший способ сделать это?
class DJICameraViewController: UIViewController, DJIVideoFeedListener, DJISDKManagerDelegate, DJICameraDelegate, VideoFrameProcessor {
// ...
func videoFeed(_ videoFeed: DJIVideoFeed, didUpdateVideoData rawData: Data) {
let videoData = rawData as NSData
let videoBuffer = UnsafeMutablePointer<UInt8>.allocate(capacity: videoData.length)
videoData.getBytes(videoBuffer, length: videoData.length)
DJIVideoPreviewer.instance().push(videoBuffer, length: Int32(videoData.length))
}
// MARK: VideoFrameProcessor Protocol Implementation
func videoProcessorEnabled() -> Bool {
// This is never called
return true
}
func videoProcessFrame(_ frame: UnsafeMutablePointer<VideoFrameYUV>!) {
// This is never called
let pixelBuffer = frame.pointee.cv_pixelbuffer_fastupload as! CVPixelBuffer
let imageRequestHandler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, orientation: exifOrientationFromDeviceOrientation(), options: [:])
do {
try imageRequestHandler.perform(self.requests)
} catch {
print(error)
}
}
} // End of DJICameraViewController class
EDIT : из того, что я собрал из документации DJI (пятнистая), похоже, что видеопоток сжат H264.Они утверждают, что DJIWidget
включает вспомогательные методы для распаковки, но мне не удалось понять, как правильно их использовать, потому что нет документации, касающейся его использования.
EDIT 2 :Вот проблема , которую я создал на GitHub для платформы DJIWidget
EDIT 3 : обновленный фрагмент кода с дополнительными методами для VideoFrameProcessor
, удаление старого кода из videoFeed
method
EDIT 4 : Подробную информацию о том, как успешно извлечь буфер пикселей и использовать его, можно найти в этом комментарии из GitHub