2019独角兽企业重金招聘Python工程师标准>>>

简介

AVFoundation 是一个可以用来使用和创建基于时间的视听媒体数据的框架。AVFoundation 的构建考虑到了目前的硬件环境和应用程序,其设计过程高度依赖多线程机制。充分利用了多核硬件的优势并大量使用block和GCD机制,将复杂的计算机进程放到了后台线程运行。会自动提供硬件加速操作,确保在大部分设备上应用程序能以最佳性能运行。

如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会进行修改,
联系我时,请备注使用AVFoundatio实现动态人脸识别(技术交流群:656315826)
最后:
祝大家学习愉快~谢谢~

介绍一些人脸识别的方式

  1. CoreImage静态人脸识别, 可识别照片, 图像等
  2. Face++是新一代云端视觉服务平台,提供一整套世界领先的人脸检测,人脸识别,面部分析的视觉技术服务
  3. OpenCV由一系列 C 函数和少量 C++ 类构成, 实现了图像处理和计算机视觉方面的很多通用算法
  4. Vision 是 Apple 在 WWDC 2017 伴随iOS 11推出的基于CoreML的图像识别框架
  5. AVFoundation可以用来使用和创建基于时间的视听媒体的框架,今天我们使用的人脸识别方式也是使用AVFoundation框架

对关键类的简单介绍

  1. AVCaptureDevice 代表了输入设备,例如摄像头与麦克风。我们可以从这个类中获取手机硬件的照相机、声音传感器等。
  2. AVCaptureDeviceInput:设备输入数据管理对象,可以根据AVCaptureDevice创建对应的对象
  3. AVCaptureOutput代表输出数据,输出的可以是图片或者视频
  4. AVCaptureSession: 媒体(音、视频)捕捉会话
1 负责把捕捉的音频视频数据输出到输出设备中。
2 一个AVCaptureSession可以有多个输入或输出。
3是连接AVCaptureInput和AVCaptureOutput的桥梁,它协调input到output之间传输数据。
4 它有startRunning和stopRunning两种方法来开启会话和结束会话。
5 每个session称之为一个会话,也就是在应用运行过程中如果你需要改变会话的一些配置(例如:切换摄像头),此时需要先开启配置,配置完成之后再提交配置。
  1. AVCaptureVideoPreviewLayer: 图片预览层我们的照片以及视频是如何显示在手机上的呢?那就是通过把这个对象添加到UIView的layer上的

添加扫描设备

  • 获取设备(摄像头)
  • 创建输入设备
  • 创建扫描输出
  • 创建捕捉回话

输出设备

  • 这里使用AVCaptureMetadataOutput, 可以扫描人脸, 二维码, 条形码等信息
  • 必须设置代理, 否则获取不到扫描结果
  • 需要设置要输出什么样的数据: face(人脸), qr(二维码)等等
//创建原数据的输出对象
let metadataOutput = AVCaptureMetadataOutput()//设置代理监听输出对象输出的数据,在主线程中刷新
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)//告诉输出对象要输出什么样的数据,识别人脸, 最多可识别10张人脸
metadataOutput.metadataObjectTypes = [.face]

切换摄像头

  • 获取当前摄像头方向
  • 创建新的输入input
  • 移除旧输入capture, 添加新的输入capture
  • 具体代码如下:
@IBAction func switchCameraAction(_ sender: Any) {//执行转场动画let anima = CATransition()anima.type = "oglFlip"anima.subtype = "fromLeft"anima.duration = 0.5view.layer.add(anima, forKey: nil)//获取当前摄像头guard let deviceIn = deviceInput else { return }let position: AVCaptureDevice.Position = deviceIn.device.position == .back ? .front : .back//创建新的inputlet deviceSession = AVCaptureDevice.DiscoverySession(deviceTypes: [.builtInWideAngleCamera], mediaType: .video, position: position)guard let newDevice = deviceSession.devices.filter({ $0.position == position }).first else { return }guard let newVideoInput = try? AVCaptureDeviceInput(device: newDevice) else { return }//移除旧输入,添加新输入//设备加锁session.beginConfiguration()//移除旧设备session.removeInput(deviceIn)//添加新设备session.addInput(newVideoInput)//设备解锁session.commitConfiguration()//保存最新输入deviceInput = newVideoInput

处理扫描结果

实现AVCaptureMetadataOutputObjectsDelegate该协议的协议方法(只有一个方法) AVMetadataFaceObject介绍

  1. faceID: 人脸的唯一标识
  • 扫描出来的每一个人, 有不同的faceID
  • 同一个人, 不同的状态下(摇头, 歪头, 抬头等), 都会有不同faceID
  1. hasRollAngle: 是否有倾斜角,侧倾角(左右歪头)(BOOL类型)
  2. rollAngle: 倾斜角,侧倾角的角度(CGFloat类型)
  3. hasYawAngle: 是否有偏转角(左右摇头)
  4. yawAngle: 偏转角角度

获取预览图层的人脸数组

  • 遍历扫描的人脸数组, 转换成在预览图层的人脸数组
  • 主要是人脸在图层的左边的转换
  • 返回转换后的新的数组
fileprivate func transformedFaces(faceObjs: [AVMetadataObject]) -> [AVMetadataObject] {var faceArr = [AVMetadataObject]()for face in faceObjs {//将扫描的人脸对象转成在预览图层的人脸对象(主要是坐标的转换)if let transFace = previewLayer.transformedMetadataObject(for: face){faceArr.append(transFace)}}return faceArr
}

根据人脸位置添加红框

设置红框的frame

faceLayer?.frame = face.bounds

根据偏转角和倾斜角的角度获取CATransform3D

fileprivate func transformDegress(yawAngle: CGFloat) -> CATransform3D {let yaw = degreesToRadians(degress: yawAngle)//围绕Y轴旋转let yawTran = CATransform3DMakeRotation(yaw, 0, -1, 0)//红框旋转问题return CATransform3DConcat(yawTran, CATransform3DIdentity)}//处理偏转角问题fileprivate func transformDegress(rollAngle: CGFloat) -> CATransform3D {let roll = degreesToRadians(degress: rollAngle)//围绕Z轴旋转return CATransform3DMakeRotation(roll, 0, 0, 1)}//角度转换fileprivate func degreesToRadians(degress: CGFloat) -> CGFloat{return degress * CGFloat(Double.pi) / 180}

根据有无偏转角和倾斜角旋转红框

//设置偏转角(左右摇头)
if face.hasYawAngle{let tranform3D = transformDegress(yawAngle: face.yawAngle)//矩阵处理faceLayer?.transform = CATransform3DConcat(faceLayer!.transform, tranform3D)
}//设置倾斜角,侧倾角(左右歪头)
if face.hasRollAngle{let tranform3D = transformDegress(rollAngle: face.rollAngle)//矩阵处理faceLayer?.transform = CATransform3DConcat(faceLayer!.transform, tranform3D)
}

至此, 动态的人脸识别就完成了, 会在人脸位置增加红框显示, 并且红框会根据人脸的位置动态的, 实时的调整

下面就快拿起你的相机测试吧

项目代码获取

想要获取案例源码可以加我技术交流群:656315826 最近我在研究这一块,如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会进行修改,共同学习进步。

祝大家学习愉快

转载于:https://my.oschina.net/u/3874462/blog/1822873

AVFoundation实现动态人脸识别相关推荐

  1. iOS黑科技之(AVFoundation)动态人脸识别(二)

    iOS黑科技之(AVFoundation)动态人脸识别(二) 上一篇介绍了Core Image实现的静态人脸识别, 这里介绍AVFoundation的强大功能之一的动态人脸识别 一. 首先介绍一些人脸 ...

  2. 动态人脸识别系统服务器,动态人脸识别监控管理平台的设计与实现

    摘要: 动态人脸视频监控是计算机视觉领域一个新兴的应用方向和备受关注的前沿课题,它结合了计算机科学,机器视觉,图像处理,模式识别,人工智能等多学科技术知识.国内外的动态人脸识别监控系统都非常注重系统运 ...

  3. 《人脸识别原理及算法——动态人脸识别系统研究》—1章1.2节人脸识别相关学科的进展...

    本节书摘来自异步社区<人脸识别原理及算法--动态人脸识别系统研究>一书中的1章1.2节人脸识别相关学科的进展,作者 沈理 , 刘翼光 , 熊志勇,更多章节内容可以访问云栖社区"异 ...

  4. 人脸识别(3)---静态人脸识别和动态人脸识别的区别

    静态人脸识别和动态人脸识别的区别 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.作为一种新型而且发展较快的技术,很多人对这门技术并没有清晰的理解和认识.比如说,人脸识别有哪些种类,人 ...

  5. 深入动态人脸识别小场景应用,2019年或将迎来爆发期

    人脸识别已经成为人工智能技术的落地风口之一,随着人工智能和深度学习技术的逐渐成熟,人脸识别的商业化落地开始全面加速,智慧学校.工地实名制.会议签到.门禁考勤.访客预约等等,越来越多的小场景应用被解锁. ...

  6. lacp静态和动态区别_静态人脸识别和动态人脸识别有哪些区别

    人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.随着人脸识别技术的发展,在不同的实际应用场景会有不同的种类,比如说静态人脸识别和动态人脸识别,可应用在不同的场景中.这两者有哪些区别呢? ...

  7. 中控考勤机连服务器显示1007,中控智慧ZK-S1007动态人脸识别考勤门禁终端

    中控动态人脸识别ZK-S1007快速开闸多人同时通过闸机会议签到联网门禁机 中控动态人脸识别考勤门禁终端ZK-S1007 慧眼感知系列考勤门禁终端定位为功能丰富.扩展性强的面部指纹采集验证产品,达到更 ...

  8. 基于Java+MySQL 实现(Web)动态人脸识别的认证识别系统【100010315】

    摘 要 在人脸识别领域,主要涉及到两项技术,一项为人脸检测技术,另一项为人脸识别技术.其中,人脸检测技术主要解决存不存在人脸的问题,而人脸识别技术主要解决此人是谁的问题.除此以外,还有人脸对齐.人脸关 ...

  9. 动态人脸识别原理和相关测试数据

    目录 1.动态人脸识别原理流程图 2.精度指标 2.1 人脸检测 2.2人脸识别 3.测试视频 1.动态人脸识别原理流程图 2.精度指标 2.1 人脸检测 人脸检测模块采用的是SCRFD系列模型中的s ...

最新文章

  1. django xadmin 1不在可用的选项中
  2. lombok pom.xml依赖
  3. iis mysql_Windows10本地搭建IIS+PHP+MYSQL+phpMyAdmin运行环境图文教程(也可用于服务器)...
  4. 饱和气压与温度的关系_高中物理讲义:固体液体与物态变化第3节《饱和汽与饱和汽压》...
  5. 读《大道至简》第2章有感
  6. 敏捷数据科学:用Hadoop创建数据分析应用
  7. Github Pages部署个人博客(Hexo篇)
  8. 从著名的list_head看linux内核中OO 从Unix分层内核栈以及中断处理看Linux内核的另类
  9. vue播放flv格式视频
  10. 全球ip地址查询与区域判断
  11. 采集新闻数据的10个经典方法
  12. Spring Framework灰度发布
  13. 学计算机基础知识的app,电脑基础知识零基础入门版-电脑基础知识APP手机大全v1.0 安卓版-007游戏网...
  14. 国潮正当时,把优秀传统文化融入时代脉搏
  15. 在ios中,input唤出软键盘中‘换行’转‘搜索’、‘前往’,及直接唤醒数字键盘的实现(vue)
  16. iOS 15提示“此App的开发者需要更新APP以在此IOS版本上正常工作”
  17. 小米 13 系列新品发布会将延期举行;马斯克:和苹果的误解得到了解决;IntelliJ IDEA 2022.3 发布|极客头条
  18. Java网络爬虫基础概述
  19. 接入微信universal link微信校验不通过
  20. SAP SD 客户物料主数据

热门文章

  1. Azure上部署的资源公网连通性测试工具-psping
  2. 为什么有些人用了1年就获得了你10年的能力?
  3. 浙江理工类专升本自学上岸浙江中医药242指南
  4. 【STM32】USART
  5. 或许,国家疫情应急供应链体系应该这么建
  6. python接口自动化测试书籍_干货丨Python接口测试自动化实战及代码示例:含get、post等方法...
  7. PyTorch安装(CPU版本和CPU版本)——解决pip安装下载速度慢慢慢慢慢的问题
  8. STM8/STM32串口设置为偶校验数据不对
  9. Wireshark抓包——应用层
  10. 【附源码】Python计算机毕业设计面向老年群体的健康养生系统