我制作了一个“功能性”的面部检测应用程序。但是,问题是.featuresInImage()
中的CIdetector
每次调用func captureOutput()
时都不会检测到面。我已经尝试设置CIDetectorAccuracyLow
,但没有显着改善任何内容。
我已经尝试了我的应用程序和本机iPhone相机,后者可以检测实例中的面部,即使面部略微受阻(例如眼镜)。为什么是这样? Apple是否使用了不同的人脸检测算法?或者在发送到CIDetector
之前我应该做些优化吗?
以下代码供进一步参考:
private var faceDetector: CIDetector?
dynamic var faceFeature: CGRect
...
func captureOutput(captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, fromConnection connection: AVCaptureConnection!) {
// This function is called whenever a new frame is available
let pixelBuffer: CVPixelBufferRef = CMSampleBufferGetImageBuffer(sampleBuffer)!
let inputImage = CIImage(CVPixelBuffer: pixelBuffer)
let features = self.faceDetector!.featuresInImage(inputImage)
for feature in features as! [CIFaceFeature] {
faceFeature = feature.bounds
print("\(faceFeature)")
}
}
更新
我已经进一步测试了我的“功能”代码,似乎有些时候我的脸部处于某个角度和大小,.featuresInImage()
会以视频帧速率检测到我的脸部。
这是否意味着CIDetector工作正常但我必须对输入样本进行一些调整?让算法更容易运行吗?