我用PHP图像技术做了一个有趣的贴胡子程序,准确率达到98%
最近微软推出的年龄识别软件可谓是火爆了朋友圈,听说好像是通过识别脸上皱纹来判断年龄的,而我,通过抓取知乎100万用户也小小火了一把,于是我想继续发掘PHP的潜能,看看有没有更多的可能性,做一个有趣的东西出来。别人识别年龄、美颜、变老,我要不贴贴胡子试试?!于是,PHP的贴胡子程序就开始了……
要给脸上贴胡子,首先当然得把脸找出来,于是我找到了opencv,一个开源的人脸识别类库,还有PHP扩展,听说国内那些android上面的人脸识别,都是用这个搞的。。。
先来试试识别人脸,用的是 haarcascade_frontalface_alt.xml 配置文件
Array ( [0] => Array ( [x] => 115 [y] => 190 [w] => 278 [h] => 278 ) )
不错,人脸一下子就识别出来了,但是这样也太不雅观了,把这些数字变成线条试试:
接下来看看鼻子,用的是 haarcascade_mcs_nose.xml 配置文件
不得不说小猪的脸长得是够标致的,一下就识别出鼻子来了,不信我们来试试范爷的脸:
看范爷这张比较标致的脸,都能找出3个鼻子来,更别说我这种能找出5个鼻子的脸了~_~
再来看看嘴巴,用的是 haarcascade_mcs_mouth.xml 配置文件
好吧我承认 opencv 真的弱爆了,小猪居然有8个嘴巴,范爷有18个,他两是妖精么?!
不得不说,opencv 如果单单这么用,真的是完全没法用,所以接下来才是重点,我要把真正的鼻子和嘴巴找出来,然后在他们中间贴上胡子,为了完成这艰巨的任务,我采用了排除法。。。^_^
首先鼻子的中线应该离得脸的中线最近,于是我们要先算出脸和鼻子的中线来,这样看貌似又很难看得出数值,于是我把调试模式再次升级。。。
嘿嘿,是不是有种黑客帝国的感觉^_^
经过计算排除,我们最终得到了范爷准确的脸和鼻子
接下来是嘴巴,范爷有18个嘴巴而小猪有8个
这毛毛多得嘴巴啊,看着都吓人,好吧说说我的算法把,排除嘴巴的算法是这样的:
1、脸蛋上边、左上角、上边的嘴巴排除掉
2、超出脸蛋下边的嘴巴排除掉
3、超出脸蛋右边的嘴巴排除掉
4、最左边和最右边已经超过鼻子的中间竖线了的排除
5、最上边已经超过鼻子的中间横线了的排除掉
6、鼻子上边的嘴巴排除
7、下边线已经在脸以下了的排除掉
经过这几部算法以后,我们准确的得到了小猪和范爷的脸蛋、鼻子、嘴巴
哈哈是不是干净多了,接下来是重点了,贴胡子。。。
贴胡子的思路是这样的,找到鼻子和嘴巴的中间线,计算出胡子的中间线从而推导胡子的Y轴坐标,以鼻子的X轴坐标作为胡子的X轴坐标,当然如果你歪鼻子或者歪嘴巴的话,那还是不要贴了吧^_^,好吧下面是算法:
1、获得胡子的宽高
2、以嘴巴的1.8倍宽为胡子的宽度,为什么是1.8倍?因为我试了100个胡子,觉得1.8倍是最合适的呀^_^
3、缩放胡子图片大小
4、计算胡子坐标:
X轴坐标 = 鼻子的X轴坐标 – 胡子宽度 / 2;
鼻子到嘴巴的中间坐标 = 鼻子的中间坐标 + ( 嘴巴的中间坐标 – 鼻子的中间坐标 ) / 2
Y轴坐标 = 鼻子到嘴巴的中间坐标 – 缩放后的胡子高度 / 2;
5、贴上胡子,大功告成!!!
接下来我们把烦人的调试信息去掉。。。
是不是很酷哈,当然聪明的你可能早已发现,他两的胡子不一样?!对了,这才是重点,为了逗你们开心,我做了100套胡子,想不想看看这些胡子的表现如何?
不得不说,一个男人拥有了胡子,更加性感迷人有木有,如果可以每天和换衣服一样换胡子,岂不是美哉?
好吧如果你以为这就完了,那你就错了,再好的技术也少不了包装,于是,我给这个程序穿上了一件华丽的衣衫。。。
好吧,软件到这里就设计完了,有兴趣的朋友可以上去玩玩,看看能匹配出什么样的胡子来哈,忘了说现在胡子是随机的,后面我们改进算法,给不同脸型的人不同的胡子匹配,觉得好玩的帮忙转发微信朋友圈。。。^_^
本文文字及图片出自 伯乐在线
你也许感兴趣的:
- 【程序员搞笑图片】有时
- 【程序员搞笑图片】数据类型简明指导
- 【程序员搞笑图片】远程工作
- 【程序员搞笑图片】程序员的副业
- 【程序员搞笑图片】开发人员和测试人员
- 【程序员搞笑图片】AI 编程
- 【程序员搞笑图片】程序员新手和老手的区别
- 【程序员搞笑图片】最刺激的话
- 【程序员搞笑图片】新程序员
- 【程序员搞笑图片】1969年 NASA 用 4KB 的内存就将人类送上了月球
你对本文的反应是: