zoukankan      html  css  js  c++  java
  • [Xcode 实际操作]九、实用进阶-(18)图像人脸识别:对图片中的人像进行面部检测

    目录:[Swift]Xcode实际操作

    本文将演示对图片中的人像,进行面部检测。

    在项目导航区,打开视图控制器的代码文件【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 }
  • 相关阅读:
    Linux下一个patch补丁命令
    资本中国人物-金融
    深入浅出JMS(一)——JMS简要
    在JBuilder8在使用ANT
    mysql存储引擎
    Linux系统监控
    SIEM
    mysql主从数据库复制
    JVM中可生成的最大Thread数量
    磁盘IO性能监控(Linux 和 Windows)
  • 原文地址:https://www.cnblogs.com/strengthen/p/10090436.html
Copyright © 2011-2022 走看看