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 模块 ...
随机推荐
- git-简单流程(学习笔记)
这是阅读廖雪峰的官方网站的笔记,用于自己以后回看 1.进入项目文件夹 初始化一个Git仓库,使用git init命令. 添加文件到Git仓库,分两步: 第一步,使用命令git add <file ...
- Android Studio 多个编译环境配置 多渠道打包 APK输出配置
看完这篇你学到什么: 熟悉gradle的构建配置 熟悉代码构建环境的目录结构,你知道的不仅仅是只有src/main 开发.生成环境等等环境可以任意切换打包 多渠道打包 APK输出文件配置 需求 一般我 ...
- .NET 串口通信
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...
- Javascript生成二维码(QR)
网络上已经有非常多的二维码编码和解码工具和代码,很多都是服务器端的,也就是说需要一台服务器才能提供二维码的生成.本着对服务器性能的考虑,这种小事情都让服务器去做,感觉对不住服务器,尤其是对于大流量的网 ...
- Intellij idea添加单元测试工具
1.idea 版本是14.0.0 ,默认带有Junit,但是不能自动生成单元测试,需要下载JunitGererator2.0插件 2.Settings -Plugins,下载 JunitGenerat ...
- PowerShell实现批量重命名文件
[string]$FileName="E:\test11" #-------------------------------------- Clear-Host foreach($ ...
- openresty 前端开发入门四之Redis篇
这章主要演示怎么通过lua连接redis,并根据用户输入的key从redis获取value,并返回给用户 操作redis主要用到了lua-resty-redis库,代码可以在github上找得到 而且 ...
- cesium自定义气泡窗口infoWindow
一.自定义气泡窗口与cesium默认窗口效果对比: 1.cesium点击弹出气泡窗口显示的位置固定在地图的右上角,默认效果: 2.对于习惯arcgis或者openlayer气泡窗口样式的giser来说 ...
- 【干货分享】流程DEMO-人员调动流程
流程名: 调动 流程相关文件: 流程包.xml 流程说明: 直接导入流程包文件,即可使用本流程 表单: 流程: 图片:3.png DEMO包下载: http://files.cnblogs.com ...
- Android中的多线程断点下载
首先来看一下多线程下载的原理.多线程下载就是将同一个网络上的原始文件根据线程个数分成均等份,然后每个单独的线程下载对应的一部分,然后再将下载好的文件按照原始文件的顺序"拼接"起来就 ...