简介
项目代码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 模块 ...
随机推荐
-
[原创]python之socket-ftp
今天来讲讲ftp文件下载,感觉挺有趣的,知道吧,就那种看到新文件生成,而自己写的代码也不多,那种成就感! 一.需求: 客户端发送指令给服务端,服务端根据指令找到相应文件,发送给客户端 分析: PS:e ...
-
Java多线程--wait和join
首先从公司一道笔试题开始 package test; public class Test implements Runnable { public int i = 0; @Override publi ...
-
ios获取摄像头与相册图片
iOS的一些设备上都安装了摄像头.现在绝大多数都有了. 在编程中,我们是用相应的东西来进行照相,录像等功能. 一.UIImagePickerController类 UIImagePickerCon ...
-
VS2010/MFC对话框:向导对话框的创建及显示
向导对话框的创建及显示 本节将为大家演示如何创建向导对话框. 仍然以前面的“加法计算器”的例子为基础,在其中加入向导对话框,我们可以用它来说明加法计算器的使用方法,一步一步引导用户操作,这也是比较常见 ...
-
【XML】xStream浅录
XStream可以用来转换对象-XML,或者XML-对象. 官网地址:http://x-stream.github.io 小案例: 实体类 FileVo.java package cn.pinnsvi ...
-
C++ Primer 有感(标准库pair)
与关联容器相关的模板类型,包含两个数据成员,在utility头文件中定义. pair类型提供的操作: pair<T1,T2> p1; pair<T1,T2> p1(v1,v2) ...
-
MVCAPi Httpclient
APi配制文件 删除修改api 显示和命名空间 新增
-
javascript模板引擎template.js使用
到GitHub上下载template.js库.引入到页面 以type="text/html" 这样指定javascript类型的是一种javascript模板渲染方法,在实际项目中 ...
-
java抽象类详解
前言 在没讲抽象类之前 我们先来看看 final关键字 final 修饰符 可以修饰 类.属性.方法 修饰类时 表示该类不能被继承 其他特征 跟普通的类一样 修饰 属性时 表示 改属性不能改变 ...
-
(转载)linux 常用命令
出处:http://www.cnblogs.com/vamei $ 命令行提示符 粗体表示命令 斜体表示参数 filename, file1, file2 都是文件名.有时文件名有后缀,比如file. ...