热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

人脸识别库于仕琪老师库地址

https:github.comShiqiYu知乎关于人脸识别实时滤镜讨论:映客直播中人脸特效是基于人脸识别还是AR?有什么可以使用的SDK么ÿ

https://github.com/ShiqiYu

 

=================================================

知乎关于人脸识别实时滤镜讨论:

映客直播中 人脸特效是基于人脸识别还是AR?有什么可以使用的SDK么?


在直播中可以添加这样的特效,可以准确的识别人脸器官的位置,即使头部扭动也可有相应的角度上的自适应,这个有什么来源的sdk可以研究接入么,这个属于人脸识别还是AR呢?
---------------------------
作者:匿名用户
链接:https://www.zhihu.com/question/52892092/answer/205076802
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本人来说说该这是如何实现的吧。关键字:人脸检测+图片 + opengles。

我来说说Android上面是如何实现的吧。通过Camera接口获取预览数据,然后将图像所在的Surface绑定到opengles 的EGLSurface中,opengles通过从Surface中读取EXTERNAL_OES类型的纹理Texture到帧缓冲区Framebuffer中(即将相机的图像帧读入FBO中),然后就是通过opengles将png 或者其他格式的图片贴纸读入生成相应的纹理Texture。有了贴纸的Texture,接下来就是将贴纸绘制到帧缓冲区Framebuffer中。绘制完成,通过eglSwapBuffers将EGLSurface中渲染完成的帧交换显示到前台,这就是问题中所贴出来的预览界面。

上面流程几乎所有有贴纸特效的相机、直播推流端等应用都基本走的流程,不管是不是用ffmpeg做推流,特效这块,基本上都需要接入opengles来做渲染,一方面是减少CPU使用,降低能耗,降低发热量,另一方面是渲染速度,gpu专门做渲染这一块的,在实时渲染方面,CPU软实时渲染的效率是完全不够的。这个过程需要什么支撑?那就是人脸检测技术,我将贴纸纹理渲染到预览帧中,需要拿到准确的人脸关键点,这个是必须的。人脸检测基本上都是用opencv来检测的,也有第三方的SDK可以接入,比如Face++,美颜相机等存在贴纸特效的应用几乎都在用这个,可以免费试用,自己从头开发的话,准确率和检测时间是个大问题,人脸关键字检测的算法比较成熟了,但传统的算法跑在手机上还是做一些调整的,尤其是这种实时渲染的,得至少控制在一帧(16ms)内,因为除了检测,我们还需要做其他的渲染,比如美颜、美白、磨皮、瘦脸等,哪怕是用opengles来做,也是勉强够用而已。举个例子,美颜相机的贴纸相机,在1080P分辨率的手机上,默认Texture 的大小也仅仅是480 x 864(存在虚拟键)、540 x 960(不存在虚拟键),也就是说,预览帧的分辨率是这么大的,而不是屏幕的1080P(目前市面上的美颜类相机,预览帧(Camera PreviewSize)几乎没有达到1080P的,都是渲染完成后在放大的。除了美颜相机, Camera360的预览texture是764 x 1024, 全屏是720 x 1280,但显示则是1080 x 1440、1080 x 1920,各家的相机流程差不多,渲染方案的话有单FBO 和多FBO两种,Camera360 就是单一FBO渲染的,美颜相机则是多FBO渲染的)。渲染完成后再放大显示到屏幕上的,因为美颜相机处理做贴纸,还做了实时美颜、磨皮、美白、瘦脸、瘦下巴、放大眼睛等操作,这些操作都是非常耗时的,哪怕是这样,美颜相机在红米Note2 上渲染出来的实时预览帧率也只面前到20帧,Nexus 5X 实时预览帧率大约23帧左右。大部分手机的预览帧率最大支持值在30fps左右,能够拿来做渲染的时间还是非常不足的。

那么有没有相关的开源项目呢?有的,比如比较出名的相机项目MagicCamera就是其中一个,github地址: wuhaoyu1990/MagicCamera 你可以参考下。贴纸跟滤镜的渲染过程是一样的,其中多了个人脸关键点检测,也就是说,在用opengles绘制贴纸之前,需要做相关的定位、贴纸的三维位置调整,比如人脸朝向,贴纸要跟着人脸朝向绘制,否则方向是不对的。人脸朝向的话,也有专门的算法,但是如果要做到实时渲染,那么在人脸检测之后再做人脸朝向的话,效率就太低了,这里面可以用检测的关键点简单结算得到朝向的,比如简单地用人的眼睛位置,通过Math.atan2(distX, distY),通过眼睛中心点的距离(distX, distY)算方位角,虽然准确率不够,而且考虑的因素也不全,但在实时渲染预览情况下也没有更好的办法,因为你首先得保证预览的帧率。得到人脸朝向的方位角后,我们就可以拿着这个方位角对贴纸的位置绕Y轴旋转,通过对投影矩阵旋转得到三维物体在二维平面上的坐标位置,再对贴纸进行渲染。这样就能够做到立体感的贴纸了。

基本上做完上面的一些处理,

================================
https://www.zhihu.com/question/52892092


推荐阅读
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 深入解析 Synchronized 锁的升级机制及其在并发编程中的应用
    深入解析 Synchronized 锁的升级机制及其在并发编程中的应用 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • Android中将独立SO库封装进JAR包并实现SO库的加载与调用
    在Android开发中,将独立的SO库封装进JAR包并实现其加载与调用是一个常见的需求。本文详细介绍了如何将SO库嵌入到JAR包中,并确保在外部应用调用该JAR包时能够正确加载和使用这些SO库。通过这种方式,开发者可以更方便地管理和分发包含原生代码的库文件,提高开发效率和代码复用性。文章还探讨了常见的问题及其解决方案,帮助开发者避免在实际应用中遇到的坑。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 本文介绍了Java中的com.sun.codemodel.JBlock._continue()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文总结了一些开发中常见的问题及其解决方案,包括特性过滤器的使用、NuGet程序集版本冲突、线程存储、溢出检查、ThreadPool的最大线程数设置、Redis使用中的问题以及Task.Result和Task.GetAwaiter().GetResult()的区别。 ... [详细]
author-avatar
王老虎在江湖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有