目錄:[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 }