我正在尝试使用ARKit
创建对象检测器应用。
捕获的ARFrame
传递到使用TuriCreate
创建的对象检测器,该检测器为检测到的对象提供BoundingBoxes。尝试在ARSCNView
上绘制这些边界框时,它们似乎与正确位置未对齐。
这是我进行预测的设置。
捕获的ARFrame
给出CVPixelBuffer
,这是照相机捕获的图像。
pixelBuffer的大小始终为(1920 x 1440),然后将其提供给VNCoreMLRequest
进行预测。将imageCropAndScaleOption设置为.scaleFill以确保将整个pixelBuffer调整为预期的输入大小。
visionRequest.imageCropAndScaleOption = .scaleFill
接收到的预测类型为VNRecognizedObjectObservation
,其中包含边界框。预测的边界框是一个标准化的边界框,其坐标从左下角开始,需要沿y轴翻转。
然后使用VNImageRectForNormalizedRect
方法将flippedBoundingBox缩放到SceneView的帧,以将其绘制到正确的位置。
但是SceneView可以限制为任何尺寸。通过用不同的尺寸约束sceneView,我检查了基于景视图的帧显示的captureImage的部分是否不同。
capturedImage始终具有1920x1440的大小,与SceneView的帧无关。我该如何获取SceneView正在显示的CaptureImage的一部分?
我在WWDC19上浏览了Apple提供的ARDice应用程序,但没有任何帮助。