0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

20行Python代码给微信头像戴帽子

电子工程师 来源:lq 2019-01-18 10:41 次阅读

朋友圈里@微信官方要求戴圣诞帽的活动曾经火爆一时,有些会玩的小伙伴都悄咪咪地用美图秀秀一类的 app 给自己头像 p 一顶,然后可高兴地表示“哎呀好神奇hhhh”,呆萌的小伙伴当然就一直等啊等... ...作为一名坚信“用技术解决需求”的萌新,在一个无聊的周末尝试用python来搞一波事情。

主要思路

准备两张图:一张头像,一张帽子。先用人脸识别定位头像中的人脸,给出人脸像素坐标;再根据这个坐标确定帽子放置的坐标;最后将两张图片拼接后输出。(需要注意的是,帽子是不规则图像,除了主体外背景应该是透明的,因此必须是四通道png格式)。gakki 酱亲自演示如下:

示意图

问题展开

1. 人脸识别怎么搞定?(重新造轮子?不存在的,这辈子都不可能造轮子的)。Github上一个开源的python人脸识别库face_recognition双手奉

https://github.com/ageitgey/face_recognition#face-recognition

据说识别率99.38%(顶瓜瓜啊!)。通过安装这个库就可以调用人脸检测器。

2. 确定了帽子的放置位置,怎么拼接图层?这个属于基本的图像操作,python提供了PIL(Python Image Lib)这么一个库来进行图像处理,具体操作请看后面的代码。

库的安装

我的环境是Ubuntu 16.04+Python2.7.12。使用Window,Mac OS和Python3的同学也可以参考,都是类似的。face_recognition这个库比较事儿,安装前需要依次安装boost(boost_python),cmake,dlib这几个依赖和库,中间出现任何问题都可以通过Google解决(懒得写 -.. -)。安装完所有的依赖后,使用命令:

1pipinstallface_recognition2pipinstallpillow#PIL库

完成后就可以在你的python脚本里import face_recognition和PIL了。

代码分析

Talk is cheap, show me the code。直接上代码:

1fromPILimportImage 2importface_recognition 3img_path=raw_input("imagepath:") 4image=face_recognition.load_image_file(img_path) 5face_locations=face_recognition.face_locations(image) 6print("Found{}face(s)inthisphotograph.".format(len(face_locations)))

第1、2行导入PIL库中的Image模块和face_recognition库。第3行,等待用户输入头像图片的路径。第4行,把路径所指的图像数据读入image中。第5行,调用face_locations处理image中的图像数据,对图片中的人脸进行识别定位,定位后的得到的像素坐标数据放在face_locations里。第6行在shell里输出图片里识别到的人脸的个数。

7human_img=Image.open(img_path) 8human_img=human_img.convert("RGBA") 9hat_img=Image.open("./hat.png")10hat_img=hat_img.convert("RGBA")

第7、8行,把路径所指的图像数据读入human_img中,并转换为四通道RGBA模式。9、10行读入帽子图像并做相同处理。

11forface_locationinface_locations:12top,right,bottom,left=face_location13top-=1014print("AfaceislocatedatpixellocationTop:{},Left:{},Bottom:{},Right:{}".format(top,left,bottom,right))15head_h=bottom-top#hightofhead16head_l=right-left#lengthofhead17hat_img=hat_img.resize((head_l,head_h))#convertsizeofhat18hat_region=hat_img19human_region=(left,top-head_h,right,top)20human_img.paste(hat_region,human_region,mask=hat_img)21human_img.show()

如果一张图里有多张人脸,face_recognition.face_locations(image)会返回每张人脸的位置信息,存放在一个list里。因此第11行是遍历face_locations里的每张人脸的数据。第12行解包一个人脸像素坐标数据,得到top,right,bottom,left分别为示意图中的y1,x2,y2,x1。第13行,为啥y1要减10个像素?

因为人脸识别得到的y1最多到你额头的位置,所以再把这个坐标往上提一提帽子才戴得更自然。第14行输出坐标数据方便调试。第15、16行计算人脸的高度和宽度。第17行使用resize()根据人脸的大小调整帽子的大小,因为图像中的人脸有大有小,调整后看起来更和谐。第18行,将帽子图像作为顶部图层图像。第19行,确定底部图层(头像图片)被覆盖的区域(就是帽子放置区域)。

第20行,把顶部图层与底部图层拼接(不太明白的看下图)。然后一个循环结束,亦即完成图片中一个人的戴帽操作,接着进行下个人的戴帽,直到所有人都戴上了帽子。最后21行,完成输出~

更新

更多人脸:

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人脸识别
    +关注

    关注

    76

    文章

    3953

    浏览量

    80549
  • python
    +关注

    关注

    51

    文章

    4669

    浏览量

    83456
  • GitHub
    +关注

    关注

    3

    文章

    457

    浏览量

    15913

原文标题:20行Python代码给微信头像戴帽子

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    labview中用python节点实现登录获取好友列表,登录怎么扫码?

    `python节点对于单次输入挺好用的,最近学习怎么实现python登录获取好友列表等信息,在pythonIDE测试通过,但labview的py
    发表于 06-19 12:00

    labview实现登录(不用Python节点,直接面向底层post协议)

    本帖最后由 a156789156782 于 2019-8-27 18:23 编辑 Python登录都很感兴趣,也很简单安装库,扫码登录。为什么我们只能用的份,基本的原理是什么?会了基本原理
    发表于 06-20 18:18

    如何在Python中使用Selenium

    ,然后再将控制权返回您的测试或脚本。  · 代码7:“ Asserts”关键字用于验证条件。在这一中,我们正在确认标题是否正确。为此,我们将标题与给出的字符串进行比较。  ·
    发表于 09-08 18:17

    如何用Python头像添加国旗?

    Python头像添加国旗的方法
    发表于 11-11 08:02

    代码分享

    代码
    发表于 12-30 06:01

    发光帽子代加工

    我司提供容量420mAh,电压3.7V柔性锂电池,尺寸:115X30X2mm,产品设计和其他材料由代加工厂家负责,欲加工1000顶发光帽子,寻找代加工厂家。有意向者请加联系,信号
    发表于 04-13 09:29

    怎样去使用Python头像戴圣诞帽?

    怎样去使用Python头像戴圣诞帽?都有哪些步骤流程需要去操作?
    发表于 06-17 06:41

    让你的 Python 代码优雅又地道

    Python社区文化的浇灌下,演化出了一种独特的代码风格,去指导如何正确地使用Python,这就是常说的pythonic。一般说地道(idiomatic)的python
    的头像 发表于 03-06 10:35 3404次阅读

    python代码示例之基于Python的日历api调用代码实例

    本文档的主要内容详细介绍的是python代码示例之基于Python的日历api调用代码实例。
    发表于 09-06 14:25 42次下载
    <b class='flag-5'>python</b><b class='flag-5'>代码</b>示例之基于<b class='flag-5'>Python</b>的日历api调用<b class='flag-5'>代码</b>实例

    10种聚类介绍和Python代码

    分享一篇关于聚类的文章,10种聚类介绍和Python代码
    的头像 发表于 07-30 10:25 1505次阅读

    智能可穿戴帽子开源分享

    电子发烧友网站提供《智能可穿戴帽子开源分享.zip》资料免费下载
    发表于 11-15 11:26 0次下载
    智能可穿<b class='flag-5'>戴帽子</b>开源分享

    20个解决日常问题的Python代码片段!

    在本文中,将分享20Python 代码片段,以帮助你应对日常编程挑战。你可能已经知道其中一些片段,但有些其他片段对你来说可能是新的。赶紧使用这些有用的 Python
    的头像 发表于 03-13 09:40 766次阅读

    20个非常有用的Python单行代码

    有用的 Python 单行代码片段,只需一行代码即可解决特定编码问题!
    的头像 发表于 03-14 17:45 611次阅读

    [源代码]Python算法详解

    [源代码]Python算法详解[源代码]Python算法详解
    发表于 06-06 17:50 0次下载

    python软件怎么运行代码

    Python是一种高级编程语言,它被广泛用于开发各种类型的应用程序,从简单的脚本到复杂的网络应用和机器学习模型。要运行Python代码,您需要一个Python解释器,它可以将您的
    的头像 发表于 11-28 16:02 532次阅读