Swift: CoreImage 人脸检测会将每个圆形物体检测为人脸
Swift: CoreImage Face Detection will Detect Every round object as a Face
在我的应用程序中,我想对 UIImage 使用人脸检测,所以我使用库中的 CoreImage 构建(我知道视觉库也是人脸检测的最新库。但是它仅支持 ios 11.0 及更高版本)。该库工作正常,直到我注意到任何具有圆形表面的图像都会被检测为人脸,即使它不是。
这是我的代码:
func checkFaceDetection(image: UIImage) -> Bool {
var isFace = false
let personciImage = CIImage(image: image)
let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh]
let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy)
let faces = faceDetector?.features(in: personciImage!)
if let face = faces?.first as? CIFaceFeature {
print("Found face at \(face.bounds)")
if face.hasLeftEyePosition && face.hasRightEyePosition && face.hasMouthPosition && face.hasFaceAngle{
isFace = true
}else{
isFace = false
}
}
return isFace
}
即使我用左眼,右眼,嘴巴和脸角过滤了那个图像,它仍然不能解决我的问题。
您可以将 CIDetectorAccuracyHigh 改为低。它会更有用
let imageOptions = NSDictionary(object: NSNumber(value: 5) as NSNumber, forKey: CIDetectorImageOrientation as NSString)
在我的应用程序中,我想对 UIImage 使用人脸检测,所以我使用库中的 CoreImage 构建(我知道视觉库也是人脸检测的最新库。但是它仅支持 ios 11.0 及更高版本)。该库工作正常,直到我注意到任何具有圆形表面的图像都会被检测为人脸,即使它不是。
这是我的代码:
func checkFaceDetection(image: UIImage) -> Bool {
var isFace = false
let personciImage = CIImage(image: image)
let accuracy = [CIDetectorAccuracy: CIDetectorAccuracyHigh]
let faceDetector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: accuracy)
let faces = faceDetector?.features(in: personciImage!)
if let face = faces?.first as? CIFaceFeature {
print("Found face at \(face.bounds)")
if face.hasLeftEyePosition && face.hasRightEyePosition && face.hasMouthPosition && face.hasFaceAngle{
isFace = true
}else{
isFace = false
}
}
return isFace
}
即使我用左眼,右眼,嘴巴和脸角过滤了那个图像,它仍然不能解决我的问题。
您可以将 CIDetectorAccuracyHigh 改为低。它会更有用
let imageOptions = NSDictionary(object: NSNumber(value: 5) as NSNumber, forKey: CIDetectorImageOrientation as NSString)