问题描述
人脸不动时,人脸检测的跟踪ID不断变化,我在ios中使用ML Kit,并遵循了google的文档。
文档:https://developers.google.com/ml-kit/vision/face-detection/ios#performance_tips
这是我的代码:
func captureOutput( _ output: AVCaptureOutput,didOutput sampleBuffer: CMSampleBuffer,from connection: AVCaptureConnection) {
self.detectFaceMLKit(image: sampleBuffer)
}
private func detectFaceMLKit(image: CMSampleBuffer) {
let image = VisionImage(buffer: image)
image.orientation = imageOrientation(
deviceOrientation: UIDevice.current.orientation,cameraPosition: cameraPosition)
faceDetector?.process(image) { [self] faces,error in
guard error == nil,let faces = faces,!faces.isEmpty else {
//TODO : show error
return
}
// Faces detected
if faces.count == 1 {
let face = faces[0]
let frame = face.frame
var rotX : CGFloat = 0
var rotY : CGFloat = 0
var faceTrackingId = 0
if face.hasHeadEulerAngleX {
rotX = face.headEulerAngleX // Head is rotated to the uptoward rotX degrees
print("rotx: \(rotX)")
}
if face.hasHeadEulerAngleY {
rotY = face.headEulerAngleY // Head is rotated to the right rotY degrees
print("rotY: \(rotY)")
}
// If face tracking was enabled:
if face.hasTrackingID {
faceTrackingId = face.trackingID
print("trackingId: \(faceTrackingId)")
}
}
}
func imageOrientation(
deviceOrientation: UIDeviceOrientation,cameraPosition: AVCaptureDevice.Position
) -> UIImage.Orientation {
switch deviceOrientation {
case .portrait:
return cameraPosition == .front ? .leftMirrored : .right
case .landscapeLeft:
return cameraPosition == .front ? .downMirrored : .up
case .portraitUpsideDown:
return cameraPosition == .front ? .rightMirrored : .left
case .landscapeRight:
return cameraPosition == .front ? .upMirrored : .down
case .faceDown,.faceUp,.unknown:
return .up
}
}
请注意:跟踪ID在一开始就可以正常工作,但是在ID“ 10”之后,它将失去人脸跟踪功能,并开始为同一张脸提供一个多ID,而无需在相机中移动该脸。
过滤跟踪ID后的输出样本:
trackingId:21 trackingId:21 trackingId:21 trackingId:21 trackingId:21 trackingId:21 trackingId:22 trackingId:22 trackingId:22 trackingId:22 trackingId:22 trackingId:23 trackingId:23 trackingId:23 trackingId:23 trackingId:23 trackingId:24 trackingId:24 trackingId:24 trackingId:24 trackingId:24
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)