作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 Core ML & Vision 在已识别对象周围显示边界框时遇到问题。
水平检测似乎工作正常,但是,垂直框太高,越过视频的顶部边缘,没有一直到达视频的底部,也没有跟随视频的运动相机正确。在这里您可以看到问题:https://imgur.com/Sppww8T
这是视频数据输出的初始化方式:
let videoDataOutput = AVCaptureVideoDataOutput()
videoDataOutput.alwaysDiscardsLateVideoFrames = true
videoDataOutput.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: Int(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange)]
videoDataOutput.setSampleBufferDelegate(self, queue: dataOutputQueue!)
self.videoDataOutput = videoDataOutput
session.addOutput(videoDataOutput)
let c = videoDataOutput.connection(with: .video)
c?.videoOrientation = .portrait
let handler = VNImageRequestHandler(cvPixelBuffer: image, options: [:])
try? handler.perform(vnRequests)
viewRect
设置为视频 View 的大小:812x375(我知道,视频层本身有点短,但这不是这里的问题):
let observationRect = VNImageRectForNormalizedRect(observation.boundingBox, Int(viewRect.width), Int(viewRect.height))
var observationRect = observation.boundingBox
observationRect.origin.y = 1.0 - observationRect.origin.y
observationRect = videoPreviewLayer.layerRectConverted(fromMetadataOutputRect: observationRect)
最佳答案
我使用这样的东西:
let width = view.bounds.width
let height = width * 16 / 9
let offsetY = (view.bounds.height - height) / 2
let scale = CGAffineTransform.identity.scaledBy(x: width, y: height)
let transform = CGAffineTransform(scaleX: 1, y: -1).translatedBy(x: 0, y: -height - offsetY)
let rect = prediction.boundingBox.applying(scale).applying(transform)
.imageCropAndScaleOption = .scaleFill
.
关于ios - 带有 VNRecognizedObjectObservation 的 boundingBox 框架不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55132517/
我在使用 Core ML & Vision 在已识别对象周围显示边界框时遇到问题。 水平检测似乎工作正常,但是,垂直框太高,越过视频的顶部边缘,没有一直到达视频的底部,也没有跟随视频的运动相机正确。在
我是一名优秀的程序员,十分优秀!