【发布时间】:2019-02-07 23:28:56
【问题描述】:
我正在构建一个将 ARKit 与 CoreML 相结合的应用程序。我使用以下几行将帧传递给VNImageRequestHandler:
// the frame of the current Scene
CVPixelBufferRef pixelBuffer = _cameraPreview.session.currentFrame.capturedImage;
NSMutableDictionary<VNImageOption, id> *requestOptions = [NSMutableDictionary dictionary];
VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCVPixelBuffer:pixelBuffer options:requestOptions];
注意requestOptions。它应该包含 VNImageOptionCameraIntrinsics 字段,该字段将相机内在函数传递给 CoreML。
在使用 ARKit 之前,我使用 CMSampleBufferRef 从相机获取图像。可以使用以下方法检索和设置内在函数:
CFTypeRef cameraIntrinsicData = CMGetAttachment(sampleBuffer, kCMSampleBufferAttachmentKey_CameraIntrinsicMatrix, nil);
requestOptions[VNImageOptionCameraIntrinsics] = (__bridge id)(cameraIntrinsicData);
但是,我现在使用的是 ARFrame,但我仍然想设置正确的内在函数,因为 pixelBuffer 已旋转。
查看文档:
https://developer.apple.com/documentation/vision/vnimageoption?language=objc
https://developer.apple.com/documentation/arkit/arcamera/2875730-intrinsics?language=objc
我们可以看到ARCamera 也提供了内在函数,但是如何在requestOptions 中正确设置这个值?
到目前为止应该是这样的:
ARCamera *camera = _cameraPreview.session.currentFrame.camera;
NSMutableDictionary<VNImageOption, id> *requestOptions = [NSMutableDictionary dictionary];
// How to put camera.intrinsics here?
requestOptions[VNImageOptionCameraIntrinsics] = camera.intrinsics;
【问题讨论】:
标签: ios objective-c arkit coreml