用Python鬼畜特朗普照片,了解下?

共 1931字,需浏览 4分钟

 ·

2020-03-23 23:24

咪哥杂谈


3f4c3d37555c4983664a3630780807f0.webp

本篇阅读时间约为 7 分钟。


1

前言


看到标题,别慌,慢慢往下看,好玩的在中间部分!下面正文开始。


这周给大家介绍一个好玩的库 - face_recognition


先来看下官方简介:


face_recognition是一个强大、简单、易上手的人脸识别开源项目,基于业内领先的C++开源库 dlib中的深度学习模型,用Labeled Faces in the Wild人脸数据集进行测试,有高达99.38%的准确率。但对小孩和亚洲人脸的识别准确率尚待提升。github


图像学领域的东西,我一直保持敬畏之心。未来,图像学计算肯定是人类科技的重要突破口。


很庆幸的是,现在即使我们不用懂背后的具体算法实现,也可以使用别人封装好的功能来完成自己的需求,俗称 "调库小王子" 。


那么,今天就由"本调库小王子"来给大家演示下这个库的好玩之处。

cfa23590722d8b583f910a6d9cf1298c.webp



2

环境准备


开始之前,先介绍下实验环境以及准备工作。


1. 环境


  • 系统 mac os

  • Python版本:3.7

  • 开发工具:Pycharm


2. 安装库命令


pip install cmakepip install dlibpip install face_recognition


这里需要注意的是,安装的先后顺序,要按照这个来。同时,需要注意的是,有可能操作系统不同,带来的安装报错也会不同,如果遇到错误,自行查找解决即可。


3

开玩!


1. 定位图片中人脸的位置


首先,先找一张带有正常人脸的图片,比如下面这张,刘亦菲姐姐的照片:


80c816aa18bf156b7d54658160d69368.webp


然后只需要:


419091e64574a3f558f0c10852199ebb.webp


核心代码2行:


# 加载图片image = face_recognition.load_image_file("1.png")  # 识别人脸位置face_locations = face_recognition.face_locations(image)


具体代码的功能,详见注释,你会得到这样一张新生成的脸部图片。

1058106bbe00a618cabb36e22b4dc0e6.webp

同时,控制台打印出人脸所在原图像的像素位置:


d67723b80309240330c70ca7a52f812d.webp


2. 提取人脸特征值


特征值是什么?这个词可能第一眼看上去很陌生对吧,那我们换种方式来问,你说判断一个人的特征有哪些?


我们可以通过一个人的眼睛,鼻子,嘴,下巴等器官,来分辨你是谁。


而这里的特征值,就是把我们分辨一个人的特征数据化了,变成了可以看到的数字。


这里有张 特朗普 的图(我是不会告诉你们,我是特意作秀的~):


dee4ea06e46f533d8596e3268d4354f1.webp


那来看下代码,如何将面部的特征值用代码提取到:


7deb7aae011d71a89a4b989ceaf6bc81.webp


核心代码:

image = face_recognition.load_image_file("2.png")# 识别图片中人脸的面部特征face_landmarks_list = face_recognition.face_landmarks(image)for face_landmarks in face_landmarks_list:    ......

执行之后,你会看到这样的结果:

6bd23bd877df3e5ba46615e65deea7ec.webp

发现没有,通过白色线条,将人物的脸部特征描绘了出来。同时看下控制台输出:


1aaa42e2122815650d1bf7eddad5fbe6.webp


点开仔细看,它其实是由 key-value 组成的键值对,key作为特征名称,而value则是具体数值。

比如 key 中的 chin 代表下巴, left_eyebrow 代表做眉毛,nose_tip 代表鼻尖,等等等等,具体你可以对照上图画出来的白线条来区分含义。




正因为有提取特征值这个功能,那这个库玩的方式可就多了!比如官方提供的例子,给总统安排上!来自动补个妆!
官方代码:

976ce349d5d4cff112cef1629b0e12d0.webp


补妆之后:

fe26b3693734bc30e11b857c9283a3b7.webp

就问你一句话,漂亮不漂亮??!!觉得漂亮的老铁评论区留个言再走~转发,好看一条龙我也不介意~4c038da1e60d44d5fbaf8697357af324.webp

3. 此库还有个功能,判断不同照片是否是同一人。


这里用婚前的周董(周杰伦),和婚后的周董来做个实验。


婚前,头文字D版周董 (jay-young.png):


3f4c3d37555c4983664a3630780807f0.webp


婚礼上的周董 (jay-marry.png) :


266b75162a78e97e1d284a1add37aa37.webp


不得不说,此时我是一边写代码,一边写文章的,我原本以为这个库识别不出来是同一个人,因为年龄间隔确实有些大。
周董拍头文字D时间:2005年。周董举办婚礼的时间:2015年。间隔时间:10 年。
但当我执行完代码时,不得不佩服。。真是太强了。。来看下代码和结果。

751c951d903ddb1ff1c8f8283c8583d6.webp


b85309c8618ce84d39e05509206849e5.webp


这段代码,重复执行了 3 遍,确实能识别出来。。

4

结语


好啦,本期文章到此结束。


关于这个库的用法,相信有创意,有想法的人,一定可以玩出花样,即使你不了解背后的算法实现。


如果你想学习本篇文章的源码,图片和源码已经上传到 github 了。后台回复关键词 "图像识别" ,即可获得源码地址。


如果觉得特朗普好看的话,别忘了留言区留个"漂亮"哟,哇哈哈哈!





▼往期精彩回顾▼模拟恐怖片里的"跳字特效"被一只狗改变命运的女孩....
如果Java在全世界突然被禁用会怎样?




浏览 99
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报