gpt4 book ai didi

ios - VNRectangleObservation 角在 iPhone 上压缩在 x 轴上

转载 作者:搜寻专家 更新时间:2023-11-01 06:57:21 25 4
gpt4 key购买 nike

我正在通过设备的摄像头捕捉视频,并将其提供给 Vision 框架以执行矩形检测。代码看起来像这样(为简洁起见进行了压缩……与此问题无关的隐藏行):

func captureOutput(_ output: AVCaptureOutput, 
didOutput sampleBuffer:
CMSampleBuffer, from connection: AVCaptureConnection) {

// Get a CIImage from the buffer
guard let buffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
let image = CIImage(cvImageBuffer: buffer)

// Set up corner detector
let handler = VNImageRequestHandler(ciImage: image, orientation: .up options: [:])
let request = VNDetectRectanglesRequest()

// Perform corner detection
do {
try handler.perform([request])
guard let observation = request.results?.first as? VNRectangleObservation else {
print("error at \(#line)")
return
}
handleCorners(observation)
} catch {
print("Error: \(error)")
return
}
}

这在 iPad Air 2 上工作得很好,我可以使用 observation 对象中的角来绘制漂亮的叠加层。但在 iPhone X 上,x 轴的角被“压缩”了。

例如,如果我捕捉一张几乎占据整个屏幕宽度的名片图像,我希望 observation.topLeft 有一个 x 值接近于零。相反,它接近 0.15。右角也是如此(预期:~1.0,实际:~0.85)。

知道为什么会这样吗? CIImage extent 属性在两个设备上是相同的。只是 Vision 的角在 x 轴上被压缩了。

最佳答案

我在使用 ARKit 实时检测矩形时遇到了一个非常相似的问题。经过一些调查,我看到了这个 answer 并发现:“问题是 ARKit 提供了相机分辨率为 1920 x 1440 的图像缓冲区(frame.capturedImage)。iPhone X 的屏幕是 375 x 812 点。它似乎 ARKit 可以看到的比它在手机屏幕上显示的要多。”所以我只是使用屏幕比例更正了捕获的图像大小,这个“解决方案”解决了我的问题。

关于ios - VNRectangleObservation 角在 iPhone 上压缩在 x 轴上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52710192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com