【发布时间】:2017-12-22 09:40:20
【问题描述】:
作为参考,这源于 Vision API 中的一个问题。我正在努力使用 Vision 通过VNDetectFaceRectanglesRequest 检测图像中的人脸,这在确定图像中正确的人脸数量并为每个人脸提供boundingBox 方面是成功的.
我的麻烦是,由于我的UIImageView(其中包含有问题的UIImage)正在使用.scaleAspectFit 内容模式,我在纵向模式下正确绘制边界框时遇到了巨大的困难(事情很好横向)。
这是我的代码;
func detectFaces(image: UIImage) {
let detectFaceRequest = VNDetectFaceRectanglesRequest { (request, error) in
if let results = request.results as? [VNFaceObservation] {
for faceObservation in results {
let boundingRect = faceObservation.boundingBox
let transform = CGAffineTransform(scaleX: 1, y: -1).translatedBy(x: 0, y: -self.mainImageView.frame.size.height)
let translate = CGAffineTransform.identity.scaledBy(x: self.mainImageView.frame.size.width, y: self.mainImageView.frame.size.height)
let facebounds = boundingRect.applying(translate).applying(transform)
let mask = CAShapeLayer()
var maskLayer = [CAShapeLayer]()
mask.frame = facebounds
mask.backgroundColor = UIColor.yellow.cgColor
mask.cornerRadius = 10
mask.opacity = 0.3
mask.borderColor = UIColor.yellow.cgColor
mask.borderWidth = 2.0
maskLayer.append(mask)
self.mainImageView.layer.insertSublayer(mask, at: 1)
}
}
let vnImage = VNImageRequestHandler(cgImage: image.cgImage!, options: [:])
try? vnImage.perform([detectFaceRequest])
}
这是我所看到的最终结果,请注意,方框在其 X 位置是正确的,但在纵向时,它们的 Y 位置在很大程度上是不准确的。 p>
【问题讨论】:
标签: ios swift core-graphics apple-vision