如果你想检测人脸并在每个人脸上画一个矩形,试试这个:
let request=VNDetectFaceRectanglesRequest{request, error in
var final_image=UIImage(named: image_to_process)
if let results=request.results as? [VNFaceObservation]{
print(results.count, "faces found")
for face_obs in results{
//draw original image
UIGraphicsBeginImageContextWithOptions(final_image.size, false, 1.0)
final_image.draw(in: CGRect(x: 0, y: 0, width: final_image.size.width, height: final_image.size.height))
//get face rect
var rect=face_obs.boundingBox
let tf=CGAffineTransform.init(scaleX: 1, y: -1).translatedBy(x: 0, y: -final_image.size.height)
let ts=CGAffineTransform.identity.scaledBy(x: final_image.size.width, y: final_image.size.height)
let converted_rect=rect.applying(ts).applying(tf)
//draw face rect on image
let c=UIGraphicsGetCurrentContext()!
c.setStrokeColor(UIColor.red.cgColor)
c.setLineWidth(0.01*final_image.size.width)
c.stroke(converted_rect)
//get result image
let result=UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
final_image=result!
}
}
//display final image
DispatchQueue.main.async{
self.image_view.image=final_image
}
}
guard let ciimage=CIImage(image:image_to_process) else{
fatalError("couldn't convert uiimage to ciimage")
}
let handler=VNImageRequestHandler(ciImage: ciimage)
DispatchQueue.global(qos: .userInteractive).async{
do{
try handler.perform([request])
}catch{
print(error)
}
}