Я создаю приложение, которое сочетает в себе 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;