1. 程式人生 > >[Xcode10 實際操作]九、實用進階-(18)影象人臉識別:對圖片中的人像進行面部檢測

[Xcode10 實際操作]九、實用進階-(18)影象人臉識別:對圖片中的人像進行面部檢測

本文將演示對圖片中的人像,進行面部檢測。

在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】

 1 import UIKit
 2 //匯入要使用的CoreImage框架
 3 //該框架提供了強大和高效的圖片處理功能。
 4 //用來對基於畫素的影象進行分析、操作和特效處理
 5 import CoreImage
 6 
 7 class ViewController: UIViewController {
 8     
 9     override func viewDidLoad() {
10         super.viewDidLoad()
11 // Do any additional setup after loading the view, typically from a nib. 12 13 //將當前檢視控制器的背景顏色設定為黑色,以突出顯示影象檢視 14 self.view.backgroundColor = UIColor.black 15 16 //從專案資原始檔夾中,讀取一張圖片資源。 17 let image = UIImage(named: "Picture") 18 //建立一個影象檢視,並知指定需要顯示的圖片
19 let imageView = UIImageView(image: image) 20 //設定影象檢視的中心點座標,位於(160,260) 21 imageView.center = CGPoint(x: 160, y: 260) 22 //將影象檢視,新增到當前檢視控制器的根檢視。 23 self.view.addSubview(imageView) 24 25 //初始化一個CoreImage影象物件,並載入之前匯入的圖片 26 let ciImage = CIImage(image: image!)
27 //建立一個上下文物件,該物件是對影象進行處理的具體物件 28 let ciContext: CIContext = { return CIContext(options: nil) }() 29 //建立一個檢測物件,並設定檢測型別為面部檢測,檢測精準度為高精度。 30 //該物件使用影象處理機制,去搜索並識別在圖片或影片中, 31 //明視訊記憶體在的面部、矩形、條形碼等物件。 32 let ciDetector = CIDetector(ofType: CIDetectorTypeFace, context: ciContext, 33 options: [CIDetectorAccuracy: CIDetectorAccuracyHigh]) 34 35 //獲得影象的尺寸資訊 36 let ciImageSize = ciImage!.extent.size 37 //CoreImage框架座標系統的原點,位於螢幕左下角。 38 //UIView座標系統的原點,位於螢幕左上角。 39 //所以需要對識別到的面部區域,進行上下反轉操作 40 var transform = CGAffineTransform.identity 41 //設定在垂直方向上,進行翻轉操作。 42 transform = transform.scaledBy(x: 1.0, y: -1.0) 43 //然後設定在垂直方向上移動的距離。 44 transform = transform.translatedBy(x: 0, y: ciImageSize.height * -1) 45 46 //建立一個數組,用來儲存檢測到的所有面部資訊。 47 let features: [CIFeature]! = ciDetector!.features(in: ciImage!) 48 //新增一個迴圈語句,對陣列進行操作 49 for feature in features 50 { 51 //對檢測到的面部區域,進行反轉操作。 52 //使面部區域能夠顯示在影象檢視的正確位置。 53 let frame = feature.bounds.applying(transform) 54 //初始化一個影象物件,並設定其位置和尺寸與面部區域相同 55 let faceView = UIView(frame: frame) 56 //設定檢視層的邊框寬度為2 57 faceView.layer.borderWidth = 2 58 //設定檢視層的邊框顏色為白色 59 faceView.layer.borderColor = UIColor.white.cgColor 60 61 //將檢視新增到當前檢視控制器的根檢視 62 imageView.addSubview(faceView) 63 } 64 } 65 66 override func didReceiveMemoryWarning() { 67 super.didReceiveMemoryWarning() 68 // Dispose of any resources that can be recreated. 69 } 70 }