0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

让我们一起来看看AI换脸背后的原理

8g3K_AI_Thinker 来源:lp 2019-04-02 15:23 次阅读

前几天,AI 换脸这条新闻你关注了吗?

说的是一位博主将 1994 年版《射雕英雄传》里朱茵的脸换成了杨幂的脸。因为该视频涉及到版权问题已被下架,但大家可以看看图片对比来感受一下“移花接木”效果:

是不是足够可以以假乱真了!这样的视频用一款实时视频仿真软件Face2Face 就可以达到,在软件中输入一个说话的人脸录像,通过算法生成对应的人脸模型,套用这个模型就可以创造 DeepFakes。最恐怖的是,这个逼真的效果看起来毫无违和感。

让我们一起来看看 AI 换脸背后的原理:

人脸检测 → 多人脸区域分别做面部关键点检测→面部区域分割→图像线性融合

顺着这个思路,我们可以看到 AI 换脸里最重要的一环就是人脸检测,要进行人脸识别,得经过这么几个过程:

人脸检测→人脸对齐→提取特征编码→编码比对

人脸检测:就是定位一张图片中人脸的位置。

人脸对齐:就是根据人脸中五个特征点位置(两个眼睛、两个嘴角、鼻子)将人脸缩放到一定的尺寸。

提取特征编码:通过训练一个人脸识别模型来提取人脸特征编码。

编码比对:将某个人脸的编码与编码库中的编码进行对比,得出距离或相似度。

01

实现 AI 换脸的第一步

以下关于人脸检测、人脸对齐均使用基于 Tensorflow 的 MTCNN 模型,生成特征编码使用基于 Mxnet 的 Insightface 模型。

图为人脸搜索整体架构设计:

首先,我们会下载 Insightface 源码及其训练好的模型文件,在这个源码的基础上,我们开发一个 API 程序,程序调用模型进行人脸检测、人脸对齐、生成特征编码,然后完成人脸入库、人脸搜索功能。

该程序主要使用 Flask 来进行 API 开发,使用 Annoy 来进行人脸特征向量搜索。在部署上,使用 Docker 容器部署 Python 环境,让 API 程序运行在 Docker 容器中,使用 Gunicorn 来启动 Flask 程序。

另外,使用 Nginx 部署一个图片服务器,用于前端的图片展示,也是运行在 Docker 容器中。最后,我们再提供一个简单 Web 页面,该页面允许用户进行入库、搜索操作(调用后端的人脸入库、搜索 API )。

最终的 Web 页面展示如下:

02

人脸搜索实现

首先你得有一个 Linux 环境,可以通过 VMware 构建一个 Ubuntu 16.04 的环境, iso 文件为 ubuntu-16.04.5-desktop-amd64.iso 。

考虑到方便大家照着做,而且大家可能没有 GPU 环境,所以以下构建环境我均使用 CPU

1. 克隆项目并修改相关源码

将 /opt/insightface/src/api/face_model 第 61 行

改为

将第 34 行

改为:

下载作者训练好的模型文件。

将模型文件解压至 /opt/insightface/models ,目录结构如下:

2. 编写人脸入库、搜索 API 程序

这里我们利用训练好的模型文件,使用 Flask 编写一个人脸特征编码入库、搜索 API 。我们将入库的特征编码存于程序中的一个数组里面。

首先,我们先创建用于图片入库及图片搜索的目录。

然后编码 API 程序,在

/opt/insightface/src/api 创建 app_flask.py 。

代码详见 Github。

3. 安装 Docker

安装软件,我一般从官网去获取安装操作说明,让自己在安装过程中少走些弯路。

4. 构建 Docker Nginx 图片服务器镜像

我们要做人脸搜索系统,在前端页面就是要上传一张图片,然后点击“搜索”按钮,在页面上显示人脸库中与该图片相似度最高的 top6 图片,所以我们要用到图片服务器,使用 url 进行图片展示。

我们首先要创建一个图片根目录。

然后使用 Docker 拉取一个 Nginx 镜像。

然后我们就可以启动容器了:

通过浏览器访问 http://192.168.247.128:8082/

5. 构建 Docker Insightface 镜像

我们从一个基础镜像 python:3.5 来构建我们的 Insightface 镜像

然后我们使用 Dockerfile 来构建 Insightface 镜像,主要是进行 Python 库环境的安装,比如 Tensorflow、Mxnet 。

最后,让我们连续入库 5 张梁静茹和 1 张陈慧娴的照片,然后用第 6 张梁静茹的照片来搜索,效果图如下:

最后,以上并非完整全文,提示大家如果有 Gpu 环境的话,可以使用 Gpu 来进行模型推理,以上操作我均使用 root 用户。本文所提到的代码都上传到我的 Github 上了。

Chat:手把手教你做人脸搜索系统

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • gpu
    gpu
    +关注

    关注

    27

    文章

    4402

    浏览量

    126562
  • 服务器
    +关注

    关注

    12

    文章

    8086

    浏览量

    82427
  • AI
    AI
    +关注

    关注

    87

    文章

    26352

    浏览量

    263945

原文标题:这个技术让我毛骨悚然后背发凉!

文章出处:【微信号:AI_Thinker,微信公众号:人工智能头条】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    主流显卡GTX 1060长啥样,一起来看看拆解图!

    GTX 1060外部采用了和GTX 1080/1070风格类似的散热器,很长很威猛,但其实PCB很短小。如果你想知道GTX 1060内部长什么样子,一起来看拆解图。
    的头像 发表于 07-08 11:33 2.1w次阅读

    VS1053 Hifi Player 资料共享 让我们一起打造完美听觉感受

    本帖最后由 eehome 于 2013-1-5 09:46 编辑 VS1053 Hifi Player 资料共享 让我们一起打造完美听觉感受
    发表于 12-27 10:55

    让我们一起来写makefile

    大家一起来学哈
    发表于 03-14 00:04

    防丢器USB设置软件

    hello,欢迎大家来看看我们的软件……让我们一起来讨论
    发表于 05-08 09:49

    C语言可以实现微妙级的延时,大家一起来看看这段代码

    在使用C语言编程时延时程序是非常常见的,但是实现个精确的延时是不太容易的,在给个朋友的公司产品做维护时,发现段代码,可以实现微妙级的延时。看起来代码非常简单。但是我以前没有想到过
    发表于 09-09 11:11

    电子发烧友论坛版主征集令,让我们一起为电子发热

    `为了电子发烧友论坛能够让更多的工程师在论坛有更多的收获,在此希望2017年能有更多热心的小伙伴能加入我们版主团队哦。我们来看看版主界都出过哪些大人物?李明远:在担任北京大学塌糊涂B
    发表于 02-24 14:25

    一起来讨论吧

    一起来讨论吧
    发表于 10-24 10:35

    一起来学习吗

    一起来学习吗
    发表于 11-10 15:02

    Facebook后台背后的技术

    今天我们一起来了解Facebook背后的软件,看看作为当今世界上访问量最大的网站之,Facebook是如何保证5亿用户的系统
    发表于 07-17 06:18

    Molex莫仕就“未来汽车”发布全球汽车调研结果,一起来看看都有什么内容吧!!

    。调研结果对促成电气化与互联化的数据、软件及网络所发挥的关键作用给予了充分的肯定 – 已经将这两方面认定为最重要的创新领域。一起来看看是哪些方面吧!!
    发表于 01-07 16:11

    【0510活动】让我们进军鸿蒙!

    这些成年程序猿,攻城狮来说,学习好,掌握好鸿蒙并不是件很困难的事。期待国产系统光芒万丈,让我们一起参与进来吧!
    发表于 05-10 15:11

    中兴V5手机配置如何?我们一起来看看吧!

    在3月18日的时候中兴正式发布中兴红牛品牌,而这个品牌的首款智能手机产品中兴红牛V5将在今天(4月9日)下午正式发布,中兴这次的新机推出速度着实迅速,那么配置怎么样额?我们一起来看看吧!
    发表于 03-24 08:50 2421次阅读

    让我们一起实现氮化镓的可靠运行

    让我们一起实现氮化镓的可靠运行
    发表于 11-02 08:16 1次下载
    <b class='flag-5'>让我们</b><b class='flag-5'>一起</b>实现氮化镓的可靠运行

    一起来看看ODF配线架光纤怎么进线-科兰

    ODF光纤配线架是专为光纤通信机房设计的光纤配线设备,具有光缆固定和保护功能光缆终接功能、调线功能,是信息机房中不可或缺的部分。今天,我们一起来看看ODF配线架光纤怎么进线? ODF配线架光纤
    发表于 11-29 09:17 2595次阅读
    <b class='flag-5'>一起来看看</b>ODF配线架光纤怎么进线-科兰

    智能手表怎么选?看完这篇文章让你秒懂,让我们一起来看看吧!

    自推出以来,智能手表不断发展,使其变得更加有用。无论是跟随我们的体育活动,还是充当日常助理,智能手表现已全面融入我们的现代生活,然而,在现在的市场中,由于智能手表太多,因此可能难以驾驭。这就
    的头像 发表于 03-09 17:26 939次阅读