[Xcode 實際操做]9、實用進階-(18)圖像人臉識別:對圖片中的人像進行面部檢測

目錄:[Swift]Xcode實際操做html

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

在項目導航區,打開視圖控制器的代碼文件【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 }
相關文章
相關標籤/搜索