- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在通过设备的摄像头捕捉视频,并将其提供给 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/
我开发了使用 Vision Framework 检测矩形的单 View 应用程序。视频输出和检测到的矩形将显示在 UIView 的子层中(见下图)。在 CGPoint 中由 VNRectangleOb
我需要转换 VNRectangleObservation 收到的 CGPoints (bottomLeft,bottomRight, topLeft, topRight) 到另一个坐标系(例如屏幕上
我正在使用 Vision 框架来检测捕获的照片中的矩形文档。检测并绘制文档周围的路径工作正常。然后我想将图像裁剪为仅检测到的文档。我成功裁剪了图像,但坐标似乎没有对齐,裁剪后的图像只是检测到的文档的一
我正在通过设备的摄像头捕捉视频,并将其提供给 Vision 框架以执行矩形检测。代码看起来像这样(为简洁起见进行了压缩……与此问题无关的隐藏行): func captureOutput(_ outpu
我正在使用 CoreML SqueezeNet 模型从图像中检测纸张或矩形。 我已经根据苹果文档创建了模型和请求。 guard let model = try? VNCoreMLModel(for:
我是一名优秀的程序员,十分优秀!