java vision gx_使用 ARKit 进行面部追踪(使用 Vision)

我目前正在使用 Vision 和 ARKit 来查找框架中的任何面孔。我用来做这个的代码如下:

func runFaceDetection() {

let pixelBuffer : CVPixelBuffer? = (sceneView.session.currentFrame?.capturedImage)

if pixelBuffer == nil { return }

let ciImage = CIImage(cvPixelBuffer: pixelBuffer!)

let imageRequestHandler = VNImageRequestHandler(ciImage: ciImage, options: [:])

do {

try imageRequestHandler.perform(self.visionRequests)

} catch {

print(error)

}

}

我使用以下代码尝试将这些返回的矩形映射到给定的面:

func faceRectanglesCompletionHandler(request: VNRequest, error: Error?) {

if error != nil {

print("error: " + (error?.localizedDescription)!)

return

}

guard let faces = request.results else {

print("No faces found in frame")

return

}

DispatchQueue.main.async {

for faceRect in self.faceRects {

faceRect.removeFromSuperview()

}

self.faceRects = []

}

for face in faces {

let observation = face as! VNFaceObservation

print(observation.boundingBox)

let newWidth = bounds.width * observation.boundingBox.width

let newHeight = bounds.height * observation.boundingBox.height

let newX = bounds.width * observation.boundingBox.origin.x

let newY = bounds.height * observation.boundingBox.origin.y

let newBoundingBox = CGRect(x: newX, y: newY, width: newWidth, height: newHeight)

DispatchQueue.main.async {

let faceView = UIView.init(frame: newBoundingBox)

faceView.backgroundColor = .red

faceView.alpha = 0.5

self.faceRects.append(faceView)

}

}

DispatchQueue.main.async {

for faceRect in self.faceRects {

self.view.addSubview(faceRect)

}

}

}

问题是这不能正确地将面部矩形映射到屏幕上的点。我的 viewController 的 bounds 属性设置为bounds = sceneView.bounds,其中 sceneView 是我的 AR 场景。当面部矩形出现时,它们通常不会出现,它们将显示为具有太多高度和宽度不足的细长矩形。我在映射代码中做错了什么?问题的图像如下。

pmNg4.jpg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值