尝试使用 VNFaceObservation 捕获 x: y: 位置

Posted

技术标签:

【中文标题】尝试使用 VNFaceObservation 捕获 x: y: 位置【英文标题】:Trying to capture x: y: positions using VNFaceObservation 【发布时间】:2018-06-28 01:08:21 【问题描述】:

我正在使用下面的代码来捕捉和绘制人脸的特征。但是,试图捕获的 x:y: 位置在图像之间并不一致。我意识到我没有正确捕获它,所以如果有人可以提供一些指导。我想使用 x: y: 添加另一个图像的子视图。非常感激。 约翰。

 var noseCrestPoint = CGPoint()
    var noseCrestPointX = CGFloat()
    var noseCrestPointY  = CGFloat()

    context?.saveGState()
    context?.setStrokeColor(UIColor.yellow.cgColor)
    if let landmark = face.landmarks?.noseCrest 
        for i in 0...landmark.pointCount - 1  // last point is 0,0
            let point = landmark.normalizedPoints[i]
            if i == 0 
                context?.move(to: CGPoint(x: x + CGFloat(point.x) * w, y: y + CGFloat(point.y) * h))
                noseCrestPoint = CGPoint(x: x + CGFloat(point.x) * w, y: y + CGFloat(point.y) * h)
                noseCrestPointX =  noseCrestPoint.x
                noseCrestPointY =  noseCrestPoint.y
             else 
                context?.addLine(to: CGPoint(x: x + CGFloat(point.x) * w, y: y + CGFloat(point.y) * h))
            
        
    
    context?.setLineWidth(3.0)
    context?.drawPath(using: .stroke)
    context?.saveGState()

【问题讨论】:

【参考方案1】:

好的,我找到了解决方案。第一个代码块是绘制脸部,第二个是将我的另一个图像放在眼睛附近的边界框内。

    // draw the face rect
    let w = face.boundingBox.size.width * image.size.width
    let h = face.boundingBox.size.height * image.size.height
    let x = face.boundingBox.origin.x * image.size.width
    let y = face.boundingBox.origin.y * image.size.height
    let faceRect = CGRect(x: x, y: y, width: w, height: h)
    context?.saveGState()
    context?.setStrokeColor(UIColor.red.cgColor)
    context?.setLineWidth(3.0)
    context?.addRect(faceRect)
    context?.drawPath(using: .stroke)
    context?.restoreGState()



let eyeImageView = UIImageView()
    let eyeImage = UIImage (named:"eyes2.png")
   // eyeImageView.frame = CGRect(x: x, y: y, width: w/2, height: h/4)
    eyeImageView.image = eyeImage;
    eyeImageView.image?.draw(in: CGRect(x: x + (w/4), y: y, width: w/1.5, height: h/3))

这解决了我的问题。 希望有人觉得这很有帮助。 问候 江泽

【讨论】:

我没有添加子视图,而是使用 .draw(in:CGRect 功能来解决问题。

以上是关于尝试使用 VNFaceObservation 捕获 x: y: 位置的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 JQuery 捕获日志失败和 404

尝试/捕获不捕获 HttpListenerException

尝试使用 SQLAlchemy 捕获完整性错误

尝试在 GUI 中使用文件捕获 java

python 尝试使用stacktrace捕获

尝试使用 C++ 中的锁进行捕获