区块链技术博客
www.b2bchain.cn

Swift-技巧(二)模糊脸部功能求职学习资料

本文介绍了Swift-技巧(二)模糊脸部功能求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

摘要

本文介绍模糊脸部的功能逻辑和实现方式,实现方式会尽可能的使用苹果提供的 API,保证功能高效率和简洁。

逻辑

模糊脸部的逻辑主要有两个流程,就是先找到脸部,然后模糊脸部,那么就引申出这两个实现问题:

  • 如何正确找到脸部区域?
  • 如何只模糊脸部区域?

依次解决这两个问题,那么这个功能就已经轻松实现了。

实现

实现功能方式有很多,这里只是分享一下自己的实现方式。主要借鉴 Core Image 中的方法。

找脸部区域

使用 CIDetector 类来查找图片中的脸部,虽然文档中说明可以找到比如鼻子更具体的部位,但是一直没有找到实现方式,它的识别成功率相对比较高,不是百分之百。

代码逻辑归纳为:

  • 通过CIDetector 类获取图片中的所有脸部区域
  • 通过 CIFilter.sourceOverCompositing 函数绘制出存在所有脸部区域的 mask 图

“`swift
// MARK: – 获取图像中面部区域数据
func getFaceData(from image: UIImage?) -> CIImage? {
guard image != nil, let image = CIImage(image: image!) else { return nil }
// CIDetectorTypeFace
let detector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: nil)

  guard let faceArray = detector?.features(in: image, options: nil) else { return nil}   var maskImage: CIImage? = nil    for face in faceArray {       let bounds = face.bounds       let centerX = bounds.origin.x + bounds.size.width * 0.4       let centerY = bounds.origin.y + bounds.size.height * 0.5        let radius = min(bounds.size.width, bounds.size.height) * 0.5       let gaussion = CIFilter.radialGradient(inputCenter: CIVector(x: centerX, y: centerY),                                              inputRadius0: NSNumber(value: Int(radius)),                                              inputRadius1: NSNumber(value: Int(radius+1)),                                              inputColor0: CIColor(red: 0, green: 1, blue: 0, alpha: 1),                                              inputColor1: CIColor(red: 0, green: 0, blue: 0, alpha: 0))

摘要

本文介绍模糊脸部的功能逻辑和实现方式,实现方式会尽可能的使用苹果提供的 API,保证功能高效率和简洁。

逻辑

模糊脸部的逻辑主要有两个流程,就是先找到脸部,然后模糊脸部,那么就引申出这两个实现问题:

  • 如何正确找到脸部区域?
  • 如何只模糊脸部区域?

依次解决这两个问题,那么这个功能就已经轻松实现了。

实现

实现功能方式有很多,这里只是分享一下自己的实现方式。主要借鉴 Core Image 中的方法。

找脸部区域

使用 CIDetector 类来查找图片中的脸部,虽然文档中说明可以找到比如鼻子更具体的部位,但是一直没有找到实现方式,它的识别成功率相对比较高,不是百分之百。

代码逻辑归纳为:

  • 通过CIDetector 类获取图片中的所有脸部区域
  • 通过 CIFilter.sourceOverCompositing 函数绘制出存在所有脸部区域的 mask 图

“`swift
// MARK: – 获取图像中面部区域数据
func getFaceData(from image: UIImage?) -> CIImage? {
guard image != nil, let image = CIImage(image: image!) else { return nil }
// CIDetectorTypeFace
let detector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: nil)

  guard let faceArray = detector?.features(in: image, options: nil) else { return nil}   var maskImage: CIImage? = nil    for face in faceArray {       let bounds = face.bounds       let centerX = bounds.origin.x + bounds.size.width * 0.4       let centerY = bounds.origin.y + bounds.size.height * 0.5        let radius = min(bounds.size.width, bounds.size.height) * 0.5       let gaussion = CIFilter.radialGradient(inputCenter: CIVector(x: centerX, y: centerY),                                              inputRadius0: NSNumber(value: Int(radius)),                                              inputRadius1: NSNumber(value: Int(radius+1)),                                              inputColor0: CIColor(red: 0, green: 1, blue: 0, alpha: 1),                                              inputColor1: CIColor(red: 0, green: 0, blue: 0, alpha: 0))

摘要

本文介绍模糊脸部的功能逻辑和实现方式,实现方式会尽可能的使用苹果提供的 API,保证功能高效率和简洁。

逻辑

模糊脸部的逻辑主要有两个流程,就是先找到脸部,然后模糊脸部,那么就引申出这两个实现问题:

  • 如何正确找到脸部区域?
  • 如何只模糊脸部区域?

依次解决这两个问题,那么这个功能就已经轻松实现了。

实现

实现功能方式有很多,这里只是分享一下自己的实现方式。主要借鉴 Core Image 中的方法。

找脸部区域

使用 CIDetector 类来查找图片中的脸部,虽然文档中说明可以找到比如鼻子更具体的部位,但是一直没有找到实现方式,它的识别成功率相对比较高,不是百分之百。

代码逻辑归纳为:

  • 通过CIDetector 类获取图片中的所有脸部区域
  • 通过 CIFilter.sourceOverCompositing 函数绘制出存在所有脸部区域的 mask 图

“`swift
// MARK: – 获取图像中面部区域数据
func getFaceData(from image: UIImage?) -> CIImage? {
guard image != nil, let image = CIImage(image: image!) else { return nil }
// CIDetectorTypeFace
let detector = CIDetector(ofType: CIDetectorTypeFace, context: nil, options: nil)

  guard let faceArray = detector?.features(in: image, options: nil) else { return nil}   var maskImage: CIImage? = nil    for face in faceArray {       let bounds = face.bounds       let centerX = bounds.origin.x + bounds.size.width * 0.4       let centerY = bounds.origin.y + bounds.size.height * 0.5        let radius = min(bounds.size.width, bounds.size.height) * 0.5       let gaussion = CIFilter.radialGradient(inputCenter: CIVector(x: centerX, y: centerY),                                              inputRadius0: NSNumber(value: Int(radius)),                                              inputRadius1: NSNumber(value: Int(radius+1)),                                              inputColor0: CIColor(red: 0, green: 1, blue: 0, alpha: 1),                                              inputColor1: CIColor(red: 0, green: 0, blue: 0, alpha: 0))

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Swift-技巧(二)模糊脸部功能求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们