在Swift中重塑面部坐标

San*_*tix 5 image-processing vision face-detection ciimage swift

我想重塑面部坐标,如在视频中显示:https://www.dropbox.com/s/vsttylwgt25szha/IMG_6590.TRIM.MOV?dl = 0(对不起,不幸的是视频大小约为11 MB).

我只是使用iOS Vision API捕获面部坐标:

// Facial landmarks are GREEN.
fileprivate func drawFeatures(onFaces faces: [VNFaceObservation], onImageWithBounds bounds: CGRect) {
    CATransaction.begin()
    for faceObservation in faces {

        let faceBounds = boundingBox(forRegionOfInterest: faceObservation.boundingBox, withinImageBounds: bounds)

        guard let landmarks = faceObservation.landmarks else {
            continue
        }

        // Iterate through landmarks detected on the current face.
        let landmarkLayer = CAShapeLayer()
        let landmarkPath = CGMutablePath()
        let affineTransform = CGAffineTransform(scaleX: faceBounds.size.width, y: faceBounds.size.height)

        // Treat eyebrows and lines as open-ended regions when drawing paths.
        let openLandmarkRegions: [VNFaceLandmarkRegion2D?] = [
            //landmarks.leftEyebrow,
            //landmarks.rightEyebrow,
            landmarks.faceContour,
            landmarks.noseCrest,
          //  landmarks.medianLine
        ]

        // Draw eyes, lips, and nose as closed regions.
        let closedLandmarkRegions = [
            landmarks.nose
            ].compactMap { $0 } // Filter out missing regions.

        // Draw paths for the open regions.
        for openLandmarkRegion in openLandmarkRegions where openLandmarkRegion != nil {
            landmarkPath.addPoints(in: openLandmarkRegion!,
                                   applying: affineTransform,
                                   closingWhenComplete: false)
        }

        // Draw paths for the closed regions.
        for closedLandmarkRegion in closedLandmarkRegions {
            landmarkPath.addPoints(in: closedLandmarkRegion ,
                                   applying: affineTransform,
                                   closingWhenComplete: true)
        }

        // Format the path's appearance: color, thickness, shadow.
        landmarkLayer.path = landmarkPath
        landmarkLayer.lineWidth = 1
        landmarkLayer.strokeColor = UIColor.green.cgColor

        landmarkLayer.fillColor = nil

        landmarkLayer.shadowOpacity = 1.0
        landmarkLayer.shadowRadius = 1

        // Locate the path in the parent coordinate system.
        landmarkLayer.anchorPoint = .zero
        landmarkLayer.frame = faceBounds
        landmarkLayer.transform = CATransform3DMakeScale(1, -1, 1)

        pathLayer?.addSublayer(landmarkLayer)
    }

    CATransaction.commit()
}
Run Code Online (Sandbox Code Playgroud)

如何从这里前进?有人可以指导我吗?