python程序生成平均脸
简介
项目代码https://github.com/LiuRoy/pokerface
原文链接http://www.cnblogs.com/lrysjtu/p/5492547.html
写这个项目的本来目的是通过构建一个神经网络来训练人脸图片,最后达到能根据图片自动判断美丑的效果。可能是因为数据集过小,或者自己参数一直没有调正确,无论我用人脸关键点训练还是卷积神经网络训练,最后都没有得到任何效果。为了不让自己前期写的代码变成无用代码,就参考网上的一些资料写了一份平均脸生成代码,感觉也还挺有意思的。
数据准备
数据来源是上海市毕业生图像采集网,2013年自己马上要毕业的时候网站公开了下载自己毕业照的链接,但是因为下载有漏洞,被很多无聊的人(包括我)跟风下了一波,有一个同学还用这些图片做了一个facemash,结果被教务处请去喝了茶(美国的扎克伯克比我们不知道高哪儿去了)。当时只是自己觉得有意思,把同届的人的照片下了一份,它们一直静静的躺在硬盘里,直到最近又把它们翻了出来。
因为是证件照,所有的照片尺寸都是640*480,背景是蓝布,正脸,素颜,非常适合用来训练模型或者做平均脸。之前也说了原本目的是训练模型用,所以也需要给照片里的每张脸打一个标签,此处没有采用当下十分流行的十分制,只是按照自己的审美观把照片分为丑、一般和漂亮三个等级(本人审美观十分普通,五官不协调或者脸型太差的直接认为丑,看着顺眼的认为一般,五官十分精致的认为是漂亮)。运行时如下:

此桌面程序(judge.py)还会把调用face++的API接口检测人脸关键点,这些关键点也是平均脸制作的关键所在,最后所有的标签和关键点数据都存放在face.sqlite中。大家可以注册face++账号尝试一下,关键点检测效果如下。

平均脸制作
一种比较简单的制作方式就是把所有的图片关键点对其之后做均值叠加,详细的可以看一下这个博客,这种方法的弊端也很明显,例如把所有的图片中眼睛对齐,最终合成的图片眼睛稍微清楚,但是其他地方就会模糊的一塌糊涂。这当然不是我们想要的结果,另外一种方法通Delaunay triangulation 把人脸关键点对齐,然后再做均值叠加,最终生成的照片会清晰很多,详细的过程和理论何以参考http://www.learnopencv.com/average-face-opencv-c-python-tutorial/
平均脸生成的代码是average.py,最后我把从4100照片里面挑选出来认为漂亮的49张照片做了一个平均脸,最后的生成结果如下:

效果还是挺不过的,我猜这就是我的梦中情人了吧,不过这也太像刘诗诗了!用face++的相似脸检查一下,果然就是刘诗诗。

PS1:本来想做的没有做出来,白花了一天时间给四千多张图片打标签,想想还是挺郁闷的。
PS2:为什么不把所有的人做一个平均脸,因为对我来说没什么意义,我就是想单纯的想看一下我觉得漂亮的女生是什么样子。
python程序生成平均脸的更多相关文章
- Python爱好者社区历史文章列表(每周append更新一次)
2月22日更新: 0.Python从零开始系列连载: Python从零开始系列连载(1)——安装环境 Python从零开始系列连载(2)——jupyter的常用操作 Python从零开始系列连载( ...
- 手把手教你用python打造网易公开课视频下载软件5-python生成exe程序
python程序生成exe文件,使用的是py2exe扩展包,下面写下具体的步骤: 第一步:新建conver2exe.py,内容如下: #coding:utf-8 from distutils.core ...
- Python打包程序
到py2exe的官网下载程序,注意对应的python版本,比如所用的python版本为2.7,那么就下载适配2.7版本的py2exe软件 下载完成后安装(与普通软件安装方式相同) 2 将要转换的pyt ...
- Python是解释性语言吗? 直到看到有 python py、pyc、pyo、pyd 文件
py是源文件,pyc是源文件编译后的文件,pyo是源文件优化编译后的文件,pyd是其他语言写的python库 1. Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去, ...
- 运用Python制作你心目中的完美女神脸!
简介 写这个项目的本来目的是通过构建一个神经网络来训练人脸图片,最后达到能根据图片自动判断美丑的效果.可能是因为数据集过小,或者自己参数一直没有调正确,无论我用人脸关键点训练还是卷积神经网络训练,最后 ...
- Python各种扩展名(py, pyc, pyw, pyo, pyd)区别
扩展名 在写Python程序时我们常见的扩展名是py, pyc,其实还有其他几种扩展名.下面是几种扩展名的用法. py py就是最基本的源码扩展名 pyw pyw是另一种源码扩展名,跟py唯一的区别是 ...
- [python] 自动生成命令行工具 - fire 简介
转自 Alan Lee Python 中用于生成命令行接口(Command Line Interfaces, CLIs)的工具已经有一些了,例如已经成为 Python 标准库的 argparse 和第 ...
- 小白学Python(19): Pyinstaller 生成 exe 文件
python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块. 安装 PyInstaller 模块与安装其他 Python 模块一样,使用 pip 命令安装 ...
- Python PyInstaller安装和使用教程
安装 PyInstalle Python 默认并不包含 PyInstaller 模块,因此需要自行安装 PyInstaller 模块. 安装 PyInstaller 模块与安装其他 Python 模块 ...
随机推荐
- .net点选验证码实现思路分享
哈哈好久没冒泡了,最进看见点选验证码有点意思,所以想自己写一个. 先上效果图 如果你被这个效果吸引了就请继续看下去. 贴代码前先说点思路: 1.要有一个汉字库,并按字形分类.(我在数据库里是安部首分类 ...
- 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程
读完本文你会知道,如何在没有源码的情况下,直接修改一个 DLL 以去除 DLL 上的强命名限制,并在该程序集上直接添加你的“友元程序集(一种特殊的 Attribute,将它应用在程序集上,使得程序集内 ...
- Socket聊天程序——Common
写在前面: 上一篇记录了Socket聊天程序的客户端设计,为了记录的完整性,这里还是将Socket聊天的最后一个模块--Common模块记录一下.Common的设计如下: 功能说明: Common模块 ...
- spring注解源码分析--how does autowired works?
1. 背景 注解可以减少代码的开发量,spring提供了丰富的注解功能.我们可能会被问到,spring的注解到底是什么触发的呢?今天以spring最常使用的一个注解autowired来跟踪代码,进行d ...
- 【Java学习系列】第3课--Java 高级教程
本文地址 可以拜读: 从零开始学 Java 分享提纲: 1. Java数据结构 2. Java 集合框架 3. Java泛型 4. Java序列化 5. Java网络编程 6. Java发送Email ...
- 初识的Spring Mvc-----原理
一.Spring Mvc简介 Spring Mvc(Spring Web Mvc) 属于表现层的框架. 二.Spring结构图 Spring Mvc是Spring框架里面web模块的一部分,是在Spr ...
- 基于Vue2.0的单页面开发方案
2016的最后一天,多多少少都应该总结一下这一年的得失,哪里做的好,哪里需要改进,记一笔,或许将来会用到呢. 毕业差不多半年了,一直是一个人在负责公司项目的前端开发与维护,当时公司希望前后端分离,提高 ...
- 5.0 JS中引用类型介绍
其实,在前面的"js的六大数据类型"文章中稍微说了一下引用类型.前面我们说到js中有六大数据类型(五种基本数据类型 + 一种引用类型).下面的章节中,我们将详细讲解引用类型. 1. ...
- 免费公开课,讲解强大的文档集成组件Aspose,现在可报名
课程①:Aspose.Total公开课内容:讲解全能型文档管理工具Aspose.Total主要功能及应用领域时间:2016-11-24 14:30 (暂定)报名地址:http://training.e ...
- 最新的 cocoaPods 安装方法
经过努力终于发现了最新的 解决cocoaPods安装的办法: taobao Gems 源已停止维护,现由 ruby-china 提供镜像服务 第一步:安装rvm, 不管需不需要升级ruby,rvm可以 ...