话说此次美国大选可谓赚足了眼球,在美国史上,恐怕没有哪一年的总统大选会像今年同样诡谲和热闹。 美国开国领袖们若是看到美国民众只能在希拉里和川普中选择,估计要集体气活过来。
做为一个闲得蛋疼的吃瓜群众,今天就拿这对冤家作例子,看如何利用OpenCV来实现将希拉里的脸安在川普脸上。固然,你还能够触类旁通,把吴彦祖的脸安到本身脸上试试效果......python
项目简介:经过 OpenCV 库来实现人脸面部特征交换,其实就是将第二张人脸的眼睛、鼻子和嘴巴经过程序自动裁剪适配并覆盖到第一张人脸上,而且为了使得修改后的照片看着更加天然,咱们还须要调整皮肤颜色。
本教程由one_magician发布在实验楼,完整教程及在线练习地址:川普撞脸希拉里(基于 OpenCV 的面部特征交换)git
经过 OpenCV 库来实现人脸面部特征交换。github
人脸特征交换程序设计思路算法
OpenCV 库的使用编程
dlib 库的使用bash
docopt 库的使用机器学习
这是原图。函数
转换以后的结果是这样的。学习
前方高能ui
前方高能
前方高能
前方高能
所谓“工欲善其事,必先利其器”,开始编写代码以前咱们须要先把用到的库安装好。
依赖的库有:
dlib
opencv
docopt
dlib 是一个基于 C++ 编写的扩展库,包含有许多经常使用的机器学习算法以及图像处理函数。而且还支持大量的数值计算,如矩阵、大整数随机运算等。可是在编译安装 dlib 以前咱们还须要先给系统装上各类依赖环境,步骤以下。
安装 Python 的开发库 python3-dev
和 python3-setuptools
。
$ sudo apt-get update $ sudo apt-get install python3-dev python3-setuptools
另外还要安装 Boost Python 开发文件,它为 Python 编程提供了简单易用的 C++ 函数库接口。
$ sudo apt-get install libboost-python-dev
dlib 原本能够直接经过 pip3
指令进行编译安装,可是因为虚拟机的内存资源不足没法完成编译,所以我这里提供一份编译好的 dlib 动态库。能够经过 wget
命令进行下载,并将 dlib.so
复制到 /usr/local/lib/python3.4/dist-packages/
目录之下,这样就能够全局使用该模块了。
$ wget http://labfile.oss.aliyuncs.com/courses/686/dlib.so $ sudo cp dlib.so /usr/local/lib/python3.4/dist-packages/
OpenCV 是一款功能强大的跨平台计算机视觉开源库,能够用于解决人机交互、物体检测、人脸识别等领域的问题。库自己是采用 C++ 编写的,可是同时也对 Python, Java, C# 等语言提供接口支持。
本门课程考虑到 OpenCV 的安装过程相对较繁琐且耗时较长,所以实验环境已经配置好 OpenCV 3.1 的环境。
docopt 是 Python 的一个第三方参数解析库,能够根据使用者提供的文档描述自动生成解析器。所以使用者能够用它来定义交互参数与解析参数。
安装 docopt 库的过程就很是简单了。
$ sudo pip3 install docopt
咱们先来考虑一下这个程序须要完成的两大个功能。
支持从命令行获取指定图像路径
读取指定图像并进行处理保存
事实上,第一点要求经过借助 docopt 库能够很是快速便捷地构建命令行解析器,具体用法在后续将会详细介绍。
而第二点才是咱们真正须要关注的问题。想象一下在现实生活中,给你两张人像照片,如今要求你将他们的脸部特征交换一下(本次实验中的脸部特征主要指眉毛、眼睛、鼻子和嘴巴组合而成的部位),那么最简单的方法就是将第二我的脸部特征部分剪下拼接到第一我的的照片上。因此事实上,咱们的程序实现也是在模仿这一个过程。可是程序并不知道哪些部分是眉毛、眼睛、鼻子或者嘴巴,在电脑看来这些图片仅仅是一连串二进制数,因此咱们还须要利用 dlib 库中的机器学习算法来帮助咱们检测并标记这些特征部位。
因此咱们的处理方法主要分为如下几个步骤。
借助 dlib 库检测出图像中的脸部特征
计算将第二张图像脸部特征对齐到一张图像脸部特征的变换矩阵
综合考虑两张照片的面部特征得到合适的面部特征掩码
根据第一张图像人脸的肤色修正第二张图像
经过面部特征掩码拼接这两张图像
保存图像
好吧,也许步骤看起来有些多,暂时看不懂也不要紧,跟着教程把项目作一遍,你将会对这些概念慢慢熟悉起来。
本项目教程的详细步骤和所有代码,能够在实验楼查看并在线完成:川普撞脸希拉里(基于 OpenCV 的面部特征交换)
项目来源于 https://github.com/matthewearl/faceswap ,该项目基于 MIT 许可证。
系统化的Python学习路径:Python研发工程师
更多经典练手项目:所有项目