Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

DEAL WITH IT是这样一个效果,眼镜从屏幕外飞进来,带在用户的脸上。这种效果的最佳实例是以一种独特的方式完成的。

今天,我们将编写一个生成器,该生成器使用任何有面部的静态图像作为输入。如果你想构建一个该效果的API,或者想以视频为输入来制作该效果,那么本文的代码是一个很好的开端。

我从Erik Taheri那里获得本文的灵感,而他写的是适用于浏览器的这个效果的Javscript版本。

在本文的结尾处,我还加入了一个使用OpenCV从摄像头实时获得效果的版本。

人脸识别和创建Gif的工具

我们将使用Dlib的get_frontal_face_detector,和Snapchat的镜头效果一文中用到的68点形状预测模型。

程序将接受命令行参数来获取输入图像。然后,使用Dlib中的人脸识别算法来查看输入的图像中是否有人脸。如果有的话,将为每个人脸创建一个最终位置,该位置是眼镜应该落到的位置。

然后,我们调整和旋转眼镜来适应每个人的脸。我们将使用从Dlib的68点模型返回的点集来找到眼睛的质心,以及它们之间的空间旋转角度。

我们找到眼镜的最终位置和旋转角度后,可以制作眼镜从屏幕顶端进入的gif。我们将使用MoviePy的make_frame函数绘制gif。

自动生成Gif的架构

该应用程序的结构非常简单。我们首先获取图像,然后将其转换为灰度NumPy数组。得到NumPy数组后,我们可以将要检测的图像传递给面部定位预测模型。

返回人脸方向后,我们可以选出眼睛,以及缩放和旋转眼镜架以适应人脸。

我们可以积累一组面孔和它们的最终位置,并将它们添加到列表中。

最后,通过这个列表,我们可以用MoviePy创建一个绘制路线,然后生成动态gif。

编码

规划好代码结构后,我们下一步需要逐步构建代码。

首先导入所有的工具,并且从命令行得到一张图像:

有了这个,我们可以调整图像以适应更小的宽度,因此我们的gif不会很大,而且要导入面部识别和形状预测。

我们也可以打开要贴在图像上的眼镜和文本。

此时,我们还应该检测图像中是否有任何人脸。如果没有,我们应该立即退出。

好极了!现在,我们可以遍历每个检测到的人脸,并建立一个缩放和旋转眼镜列表,列表也包括眼镜的最终位置。

有了最终位置以及缩放和旋转的眼镜,我们可以把影片放在一起。我们会为整个gif设置一个持续时间,以及阻止眼镜掉下来的时间,以便我们可以把“deal with it”文本显示在屏幕上。

你会注意到,我使用了一个文本叠加的图像,而不是Pillow内置的文本绘制功能。我这样做是因为Pillow没有内置文本的勾画功能。不勾画,文字在更加明亮的图像上难以辨认。

最后,我需要在MoviePy中创建一个VideoClip对象,并传入动态生成的帧和FPS。

有了这个,我们完成了!

实时动态表情包

现在,我们已经有了一套生成gif的基础代码,改写代码实时地与摄像头协同工作并不困难。

我们可以使用OpenCV作为源图像,并用计数器追踪动画,而不是从命令行加载源图像。这样做的新代码非常简单,核心代码:

这创建了一个计数器,并且通过运行了多少帧来追踪时间。使用这个,我们可以让眼镜到最终位置。用户如果按下d键,我们开始动画。

你可以在Github上阅读其余的代码。(https://github.com/burningion/automatic-memes)

下一步

我们已经成功地构建了程序的第一部分,它可以作为一个API来自动生成效果。

把我们程序连接到Django之类的东西,我们可以显示一个网页,允许用户上传他们自己的图像,并得到完整的效果。

像youtube-dl这样的东西,我们可以让用户粘贴YouTube的网址视频来自动生成效果。

很酷吧,要不要自己试一试?

英文原文:https://dev.to/burningion/deal-with-it-in-python-with-face-detection-chi

译者:张新英

python带界面的人脸识别_基于Python的人脸识别实现带墨镜效果相关推荐

  1. python人脸口罩识别_基于Python+OpenCV的人脸口罩识别检测

    以下编程在Jupyter notbook平台上进行 一.OpenCV下载安装 二.人脸口罩数据集下载处理 (一)人脸口罩数据集下载 下载人脸口罩数据集的目的是利用OpenCV进行模型训练,这里采用口罩 ...

  2. python人脸深度识别_基于Python的深度学习人脸识别方法

    基于 Python 的深度学习人脸识别方法 薛同来 ; 赵冬晖 ; 张华方 ; 郭玉 ; 刘旭春 [期刊名称] <工业控制计算机> [年 ( 卷 ), 期] 2019(032)002 [摘 ...

  3. svm 用来人脸识别_基于SVM的人脸识别

    基于 SVM 的人脸识别 摘要 :主成分分析( PCA )是人脸识别中特征提取的主要方法,支持向量机 ( SVM )具有适合处理小样本.非线性和高维数问题,利用核函数且泛化能力强 等多方面的优点.文章 ...

  4. python名片识别_基于Python的名片识别接口调用代码实例

    基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...

  5. python怎样使用各个日期赤纬_基于Python的天文软件命令行界面设计与实现

    计算机软件技术的不断发展,推动了人机交互技术的长足进步.从传统的命令行(Command Line Interface,CLI),到图形用户界面(Graphical User Interface,GUI ...

  6. python的图书管理项目教程_基于python图书馆管理系统设计实例详解

    写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉! 这个项目不是我的作业, 只是无意中被拉进来了,然后就承担 ...

  7. python制作浏览器 脚本之家_基于Python打造账号共享浏览器功能

    本篇文章介绍的内容会涉及到以下知识: PyQt5的使用; Selenium的使用; 代理服务器的架设和使用: 一.账号限制之痛 在如今的互联网中,免费的信息和资源占据了很大一部分,各类互联网应用提供了 ...

  8. python中numpy数组的合并_基于Python中numpy数组的合并实例讲解

    基于Python中numpy数组的合并实例讲解 Python中numpy数组的合并有很多方法,如 - np.append() - np.concatenate() - np.stack() - np. ...

  9. python版植物大战僵尸源码_基于python的植物大战僵尸游戏设计与实现.docx

    湖南理工学院毕业设计(论文) PAGE PAGE 1 学 号 毕业设计(论文) 题目:基于python的植物大战僵尸游戏设计与实现 作 者 届 别 届 院 别 信息与通信工程学院 专 业 信息工程 指 ...

  10. python发送文件给微信好友_基于Python实现定时自动给微信好友发送天气预报

    效果图 from wxpyimport * import requests from datetimeimport datetime import time from apscheduler.sche ...

最新文章

  1. 设计模式之建造者模式(生成器模式、Builder)摘录
  2. getElementByName????????,????????,
  3. tcp三次握手和syn 洪水攻击
  4. select count(*) from返回的类型_数据分析面试题类型汇总
  5. Linux 目录栈及目录切换
  6. JDK9.0.4安装配置
  7. Unity中Json文件编写注意
  8. 【排错】exchange2013不能显示所有OU
  9. PHP开发中的中文编码问题
  10. @Resource真的只是按名称来进行依赖注入吗?@Autowired真的只是按照类型来依赖注入吗?
  11. 炫酷好玩好用的卫星全景地图
  12. AWS扩容硬盘(转)
  13. 带登录页面的猜数字小游戏
  14. 安卓接入微信php处理,PHP对接微信公众号实现简单自动回复
  15. android删除手机照片恢复软件,安卓手机上照片删除如何恢复?
  16. JavaFX8开发过程中的问题记录
  17. java计算机毕业设计高原特色农产品网站设计源码+mysql数据库+系统+lw文档+部署
  18. 顺丰打印电子运单报500问题解决
  19. 移动端input、textarea、div(contenteditable )输入框正则过滤(兼容ios)
  20. 数字游戏 【规律 + 思维】

热门文章

  1. AirServer最新mac版投屏安装许可证
  2. MR的案例:求每个部门的工资总额
  3. vim java maven_vim 配置 java complete
  4. 探索云原生技术之基石-Docker容器入门篇(2)
  5. 洛谷 P2717 寒假作业 1
  6. 2020复旦计算机专硕考研复试经验
  7. OnlyOffice验证(二)在Centos7上部署OnlyOffice编译结果
  8. java定时任务增删改查_实现Quartz的动态增删改查
  9. 关于SWF文件格式的一些说明
  10. SQL数据库对字段的操作(alter table)