涂图李杨:在一切看脸的时代,如何高效的打造人脸识别服务

2024-04-27 15:08

本文主要是介绍涂图李杨:在一切看脸的时代,如何高效的打造人脸识别服务,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

由涂图和个推主办,桔子空间、创业五角场联合主办的TTGO行业论坛第三场在上海举行,与包括涂图、亚马逊、个推和又拍云在内的行业专家探讨和分享了云服务时代,企业进行高效开发的经验,同时此次活动由IT大咖说提供全程直播支持。本文来自TTGO上海场嘉宾演讲分享,文字内容有删节。

演讲|李杨

整理|涂图君

大家好,感谢在这么炎热的天气来参加我们的一个分享活动。我来自于今天主办方之一的涂图,目前在负责涂图服务端架构。今天给大家分享一下我们在人脸识别领域的开发经验,以及如何把它提供为一个线上的API服务,来供开发者和企业调用的。

我们说正题之前,我先大致介绍一下涂图。

涂图的CEO本身是从PPTV的创始团队出来,也是一直深耕图像领域的一个技术牛人。最早涉足的是移动端的图像SDK,提供包括滤镜、贴纸以及常规的图片处理在内的功能。这个过程主要是利用手机GPU芯片上的OpenGL(手机上的名字是OpenGLES)接口,来实现一些图像算法。

我们把移动端图像相关的功能封装出来,提供给一些做其他业务的开发者和企业,他们就可以直接用我们比较成熟的技术,更加专注于他们的核心业务。比如我做一个社交应用,或者是说做一个电商应用,我可能没有那么多时间去做一些图像方面的事情,其实都可以调用涂图的服务来做。

在移动端SDK成型之后,我们也继续的沿着图片往下走,目前涂图已经发展成为面向开发者以及企业、提供图片、视频、直播以及图像识别在内的图像技术服务商。在移动端,涂图的产品是TuSDK,而我们服务端云端的产品叫TUTUCLOUD。

再说回正题。

今天,大家之所以对人工智能、机器学习熟知,可能缘于Google的AlphaGo带来的引爆。其实人工智能早在美国几十年前已经诞生了这个技术,机器学习是其中实现人工智能的一个方法。

机器学习里面其实还分了有表示学习和深度学习。深度学习跟表示学习的关系,就

好比我们以前最早的时候,做一个规则系统或者类似专家系统,它的输入输出都是算法工程师或者科学家们预先制定好的规则。输入什么样的内容,可能会得到相关的结果。中间的一些输入的内容所经过的程序,是算法或者手工设计者这么一个路径。

机器学习这门技术出来之后,它是通过一个提取特征——也就是说,可能某一类的输入内容都可以得到相同或者相似的结果,那么就不再需要去制定一个庞大的规则体系。到往后发展,一直到深度学习,其实中间所涵盖的需要手工去调的一些东西越来越少,到深度学习基本上已经是端到端的过程。

比如说就拿人脸识别来举例。人脸识别里面最基础的一块是人脸检测,那么我的训练集可能就是一堆人脸的照片加上这些照片里面人脸的位置,直接把人脸位置交给神经网络,它可以自动得到一个训练好的模型。然后我们再利用这个模型,给它一张照片,它没有见过的照片,其实是可以得到一个同样的检测框。

说到人脸识别,有一些概念我想先给大家介绍一下。就是人脸识别其实是一个涵盖了很多内容的概念,刚才讲到的人脸检测是其中一环。人脸检测,输入是一张照片,输出是这个照片中人脸的一个矩形框或者多个矩形框的坐标位置。这是一个最基本的,我能够识别出一张照片中人脸的位置在哪。

接下来的人脸配准,是一张人脸里面五官以及脸的轮廓的位置、点位。输入同样还是一个人脸矩形框,输出的话就是五官的点位描绘。把这些点如果连成线的话,那么就是一张人脸的轮廓。

人脸属性,包括人的性别、年龄、表情或者说情绪,更多的这些属性。

特征提取,是用来标识一张人脸的唯一的识别码。大家可以理解,其实可以理解为一个唯一识别号,类似一个二维码对应到一个网页或者一个URL那样的。利用每个人脸的特征,其实可以做出后面的人脸比对、人脸验证,包括人脸识别。这里的识别特指的是,我们把一个人脸的照片放到一个系统里面去逐个的比对,那么得出到底他的身份是哪个。以及后面的人脸检索和聚类,都是基于一个特征去比较。

最后一个是活体检测,用于对安全性要求比较高、要求做一些身份验证的东西。我要保证正在使用这个界面的是一个真人,而不是拿来了其他人的照片来冒充。这里可能还涉及到一些生物体征的东西,这里就不多介绍了。

今天,我们人脸识别已经比较成型了。大家打开tutucloud.com,可以在我们网站上查看到demo以及调用演示,以及刚才提到的文档。这是我们提取特征,人脸对齐点位的示意。像这种点位,主要会用在哪里?比如我想做一个直播系统里面的人脸贴纸,我的脸在动的时候,这个贴纸是要跟着我的表情一直动的。

我们刚才讲到特征提取或者是检测,其实是一个计算量比较大的算法,这里需要的硬件就是GPU。我想大家都或多或少接触过,比如说我们用来观看视频或者电影都需要GPU解码。

在图像领域,GPU是其中应用比较广泛的。虽然每个GPU核心的计算能力比不上CPU,但是它是利用核心的倍数来超越CPU的计算能力。比如一个CPU,现在大家听得比较多的,8核、16核,GPU其实有几千个核。

这么多核我们是怎么来用的?比如我们在用CPU的时候,程序的执行过程是线性的。而GPU则不同,是几千个核用来同时计算。也就是说一张图片上有好多个像素点,比如现在几千乘几千的像素的照片,计算的时候是同时去计算这些像素点的,因此性能优势明显。

当然,我们实际手机客户端上在用人脸识别这个技术,其实是跟服务端有比较大的差别。差别主要在于,手机客户端限于设备体积,它的GPU计算能力其实是比不上服务器端能够用上那么高的计算速度的设备的。

这一块算法的选择上,其实就要有所取舍。比如我们在手机客户端上一般会采用一些非深度学习的算法,也就是说深度学习虽然准确率很高,但是它的性能在比较差的设备上比不上传统算法,所以机器学习这一块还是涉及到性能以及识别精度之间的权衡。

在我们涂图服务端所用到的一些技术中,我们重点接下来就讲一下Docker这一块。涂图最早做服务端的时候,我们都是直接用Git提交代码,在服务器上也是用Git分析代码。而Docker的出现,大大的提高了开发人员的效率。

比如其中我们用到GPU程序,英伟达就联合Docker推出了Docker插件,它是工作在物理机和Docker虚拟环境之间的一层。我们的API文档使用的是SWAGGER来描述,这个使用的语言是对程序员非常友好的。使用它描述完API之后可以直接生成文档,用户使用起来就非常方便了。

我今天大概的演讲内容就这些,谢谢。

这篇关于涂图李杨:在一切看脸的时代,如何高效的打造人脸识别服务的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940826

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

使用Python实现高效的端口扫描器

《使用Python实现高效的端口扫描器》在网络安全领域,端口扫描是一项基本而重要的技能,通过端口扫描,可以发现目标主机上开放的服务和端口,这对于安全评估、渗透测试等有着不可忽视的作用,本文将介绍如何使... 目录1. 端口扫描的基本原理2. 使用python实现端口扫描2.1 安装必要的库2.2 编写端口扫

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬