飞道的博客

如何使用Python给照片自动带上口罩,我是从入门放弃到爱不释手的

360人阅读  评论(0)

这是学习笔记的第 2205 篇文章

读完需要

9

分钟

速读仅需7分钟

昨天无意中看到一条比较有意思的文章,是可以通过Python程序给照片里的人戴上口罩,看到之后,还是挺惊喜的,也想拿过来试试。

项目是face-mask,说法是可以直接pip install face-mask安装即可。

但是自己尝试的时候,刚开始就翻船,在Windows本机测试就失败了,换了台云主机,也失败了,试了一台本机的Linux虚机和Ubuntu环境,都相继失败了,这时候内心有些凌乱,想要不算了,只是好奇而已。

在下午的时候,脑海里又闪现出这件事情,好像这些年这样放弃的事情有很多,花费了时间,但是最后没有任何结果,完全又回到了原地。

于是开始认真梳理,查找了很多资料,发现绝大多数的问题在于dlib的安装,网上一找问题一大片。dlib是什么东东,原来是一个C++工具箱,其中包含用于在C++中创建复杂软件,是可以解决实际问题的机器学习算法和工具,所以重中之重就是它了。

怎么安装部署呢,这是我的攻略。

首先安装Python软件,我是在本机Windows环境测试的。其中Python版本不能过高,也不能过低,我最开始的版本是3.8最后发现找不到相应的wheel包,比较尴尬,最后退回到3.6版本。

接下来是安装cmake和boost, 如果通过官网下载的话,因为网络原因会比较慢,可以使用豆瓣的源。

pip install cmake -i https://pypi.doubanio.com/simple/

pip install boost -i https://pypi.doubanio.com/simple/

这个安装基本没有什么可说的,相对来说是比较顺利的。 

接下来重点是dlib,Windows安装是肯定会失败的,有一个间接的实现是下载wheel文件安装,可以通过这个路径下载。

https://pypi.doubanio.com/simple/dlib

我下载的wheel文件是:

dlib-19.8.1-cp36-cp36m-win_amd64

接着使用pip install 即可。

对于辅助的软件,可以安装opencv和numpy

pip  install  opencv-python -i https://pypi.doubanio.com/simple/

pip  install  numpy -i https://pypi.doubanio.com/simple/

此外还有Pillow,为了和项目face-mask的版本兼容,可以安装7.0.0版本。

pip install Pillow==7.0.0

接着是关键的环节,决定成败的一个软件,face_recongnition,豆瓣源暂且找不到,我们通过默认方式下载

pip  install  face_recongnition==1.2.3 

完成之后就完成了90%的工作,哪怕没有face-mask也可以写程序玩了。

对于face-mask使用pip下载比较慢,我们可以使用源码安装。

可以使用项目地址:https://github.com/Prodesire/face-mask

然后使用python setup.py install来安装即可。 

有了前面的铺垫,整个过程就顺利得多了。 

我先后给自己的身份证带上了口罩,给我家孩子的百天照带上口罩,给幼儿园的小朋友们带上口罩,甚至包括技术大会的嘉宾。

这是一个样例,个人比较喜欢《武林外传》,原图是:

给他们戴上口罩,使用如下的命令:

face-mask c:\jeanron\group6.jpg --red --show

其中face_recognition是关键,我们可以通过这个库来对比两张图片,看看是否是同一个人,做了些测试,感觉至少有60%的概率吧。


   
  1. import face_recognition
  2. known_image = face_recognition.load_image_file("test.jpg")
  3. unknown_image = face_recognition.load_image_file("test2.jpg")
  4. biden_encoding = face_recognition.face_encodings(known_image)[0]
  5. unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
  6. results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
  7. print(results)

如果程序输出True即为匹配,在此就不额外秀图了。

QQ群号763628645

QQ群二维码如下, 添加请注明:姓名+地区+职位,否则不予通过

订阅我的微信公众号“杨建荣的学习笔记”,第一时间免费收到文章更新。别忘了加星标,以免错过新推送提示。

1

   

近期热文

你可能也会对以下话题感兴趣。点击链接就可以查看。

2

   

转载热文

你可能也会对以下话题感兴趣,文章来源于转载,点击链接就可以查看。


转载:https://blog.csdn.net/yangjianrong1985/article/details/104744521
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场