【发布时间】:2018-09-18 18:32:55
【问题描述】:
我正在开发一个应用程序,该应用程序使用来自 DJI Mavic 2 的视频源并通过机器学习模型运行它以识别对象。
我设法让我的应用程序使用 sample DJI project 预览来自无人机的提要,但我在尝试将视频数据转换为 Vision framework 可用的格式时遇到了很多麻烦。
我使用this example from Apple 作为创建模型的指南(它正在工作!)但看起来我需要创建一个VNImageRequestHandler 对象,该对象是使用cvPixelBuffer 类型的cvPixelBuffer 创建的,以便使用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
编辑:根据我从 DJI 的(参差不齐的)文档中收集到的信息,看起来视频源是 H264 压缩的。他们声称DJIWidget 包含用于解压的辅助方法,但我没有成功理解如何正确使用它们,因为没有关于它使用的文档。
编辑 2:这是 DJIWidget 框架的 issue I created on GitHub
编辑 3:使用 VideoFrameProcessor 的其他方法更新代码 sn-p,从 videoFeed 方法中删除旧代码
编辑4:关于如何成功提取像素缓冲区并利用它的详细信息可以在this comment from GitHub
中找到【问题讨论】:
-
请把所有的跟进和 cmets 放在这里。不要在 GitHub 上创建问题。我们已弃用对 GitHub 问题的支持
标签: ios swift dji-sdk ios-vision