人脸检测迅捷视觉套件

May*_*day 2 vision face-detection swift4 ios11

我正在尝试适用于 iOS 11 的 Vision 套件。我可以使用 Vision 并且我可以找到边界框值。但我不知道如何使用这些点绘制矩形。我希望我的问题很清楚。

Blu*_*ngs 5

希望您能够使用VNDetectFaceRectanglesRequest并能够检测人脸。要显示矩形框,有很多方法可以实现。但最简单的方法是CAShapeLayer在您检测到的每张脸的图像上绘制图层。

考虑你有VNDetectFaceRectanglesRequest像下面

let request = VNDetectFaceRectanglesRequest { [unowned self] request, error in
            if let error = error {
                // somthing is not working as expected
            }
            else {
                //  we got some face detected
                self.handleFaces(with: request)
            }
        }
        let handler = VNImageRequestHandler(ciImage: ciImage, options: [:])
        do {
            try handler.perform([request])
        }
        catch {
           // catch exception if any
        }
Run Code Online (Sandbox Code Playgroud)

您可以实现一个handleFace为检测到的每个人脸调用的简单方法,并使用VNFaceObservation属性绘制一个CAShapeLayer.

func handleFaces(with request: VNRequest) {
        imageView.layer.sublayers?.forEach { layer in
            layer.removeFromSuperlayer()
        }
        guard let observations = request.results as? [VNFaceObservation] else {
            return
        }
        observations.forEach { observation in
            let boundingBox = observation.boundingBox
            let size = CGSize(width: boundingBox.width * imageView.bounds.width,
                              height: boundingBox.height * imageView.bounds.height)
            let origin = CGPoint(x: boundingBox.minX * imageView.bounds.width,
                                 y: (1 - observation.boundingBox.minY) * imageView.bounds.height - size.height)

            let layer = CAShapeLayer()
            layer.frame = CGRect(origin: origin, size: size)
            layer.borderColor = UIColor.red.cgColor
            layer.borderWidth = 2

            imageView.layer.addSublayer(layer)
        }
    }
Run Code Online (Sandbox Code Playgroud)

更多信息可以在 Github repo iOS-11-by-Examples 中找到