首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用CIfacefeature和SquareCam输出错误的眼睛位置

使用CIfacefeature和SquareCam输出错误的眼睛位置
EN

Stack Overflow用户
提问于 2016-11-25 18:12:01
回答 1查看 393关注 0票数 1

我试图写的代码,把一个贴纸的眼睛和代码是基于SquareCam的。

它可以很好地检测人脸,但当我尝试在左眼上输出图像时,它总是给出错误的位置,即使我使用相同的方法查找人脸矩形。

我手机上有结果。

代码在这里。

代码语言:javascript
复制
  for ff in features as! [CIFaceFeature] {
        // find the correct position for the square layer within the previewLayer
        // the feature box originates in the bottom left of the video frame.
        // (Bottom right if mirroring is turned on)
        var faceRect = ff.bounds

        let temp = faceRect.origin.x
        faceRect.origin.x = faceRect.origin.y
        faceRect.origin.y = temp
        // scale coordinates so they fit in the preview box, which may be scaled
        let widthScaleBy = previewBox.size.width / clap.size.height
        let heightScaleBy = previewBox.size.height / clap.size.width
        faceRect.size.width *= widthScaleBy
        faceRect.size.height *= heightScaleBy
        faceRect.origin.x *= widthScaleBy
        faceRect.origin.y *= heightScaleBy

        var eyeRect : CGRect
        eyeRect = CGRect()
        eyeRect.origin.x = ff.leftEyePosition.y
        eyeRect.origin.y = ff.leftEyePosition.x
        eyeRect.origin.x *= widthScaleBy
        eyeRect.origin.y *= heightScaleBy


        eyeRect.size.width = faceRect.size.width * 0.15
        eyeRect.size.height = eyeRect.size.width


        if isMirrored {
            faceRect = faceRect.offsetBy(dx: previewBox.origin.x + previewBox.size.width - faceRect.size.width - (faceRect.origin.x * 2), dy: previewBox.origin.y)
            eyeRect = eyeRect.offsetBy(dx:previewBox.origin.x + previewBox.size.width - eyeRect.size.width - (eyeRect.origin.x * 2),dy : previewBox.origin.y)

        } else {
            faceRect = faceRect.offsetBy(dx: previewBox.origin.x, dy: previewBox.origin.y)
            eyeRect = eyeRect.offsetBy(dx: previewBox.origin.x, dy:previewBox.origin.y)

        }

        print(eyeRect)
        print(faceRect)

        var featureLayer: CALayer? = nil
        var eyeLayer : CALayer? = nil
        // re-use an existing layer if possible
        while featureLayer == nil && (currentSublayer < sublayersCount) {
            let currentLayer = sublayers[currentSublayer];currentSublayer += 1
            if currentLayer.name == "FaceLayer" {
                featureLayer = currentLayer
                currentLayer.isHidden = false
                eyeLayer = featureLayer?.sublayers?[0]
                //eyeLayer?.isHidden = false
            }
        }

        // create a new one if necessary
        if featureLayer == nil {
            featureLayer = CALayer()
            featureLayer!.contents = square.cgImage
            featureLayer!.name = "FaceLayer"
            previewLayer?.addSublayer(featureLayer!)

            eyeLayer = CALayer()
            eyeLayer!.contents = eyes.cgImage
            eyeLayer!.name = "EyeLayer"
            featureLayer?.addSublayer(eyeLayer!)
        }


        featureLayer!.frame = faceRect
        eyeLayer!.frame = eyeRect
EN

回答 1

Stack Overflow用户

发布于 2018-02-24 06:29:13

0,0位于eyePositions的左下角,因此您必须使用eyePosition.y = image.size.height - eyePosition.y才能与frames位于相同的坐标系中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40802426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档