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 模块 ...
随机推荐
- 关于这段时间学习 EntityFramework的 一点感悟
Ado.Net,用了N多年,Entity Framework也关注了很多年. 每当项目转型的时候,就花费大巴的时间,学习一番,潮流的东西. 这个Orm很多,这个EF很火,这么多年了,我还是不敢用,虽然 ...
- Linux虚拟机的安装(使用Centos6.3)
1.什么是虚拟机? 虚拟机指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统 2.安装Linux虚拟机前要做的准备 2.1:一台windows环境的pc 2.2:下载VM ...
- Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法
本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...
- .net Elasticsearch 学习入门笔记
一. es安装相关1.elasticsearch安装 运行http://localhost:9200/2.head插件3.bigdesk插件安装(安装细节百度:windows elasticsear ...
- Node.js:进程、子进程与cluster多核处理模块
1.process对象 process对象就是处理与进程相关信息的全局对象,不需要require引用,且是EventEmitter的实例. 获取进程信息 process对象提供了很多的API来获取当前 ...
- Spark踩坑记——数据库(Hbase+Mysql)
[TOC] 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库,去统计或者改变一些值.最近一个实时消费者处理任务,在使用spark streami ...
- ASP.NET Core 中文文档 第四章 MVC(4.5)测试控制器逻辑
原文: Testing Controller Logic 作者: Steve Smith 翻译: 姚阿勇(Dr.Yao) 校对: 高嵩(Jack) ASP.NET MVC 应用程序的控制器应当小巧并专 ...
- 使用JavaScript为一张图片设置备选路径
在做网页开发的时候,有时候希望给图片设置一个备选路径,即,当src属性对应的主路径加载失败的时候,图片可以马上切换到备选路径.这样,即使主路径失效了,显示备用路径也不会影响网页的正常体验. 注意到网页 ...
- BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 1280 MBSubmit: 3127 Solved: 795[Submit][Status][Discu ...
- 如何让spring mvc web应用启动时就执行特定处理
Asp.Net的应用中通过根目录下的Global.asax,在Application_Start方法中做一些初始化操作,比如:预先加载缓存项对网站热点数据进行预热,获取一些远程的配置信息等等. Spr ...