本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog2,之前的微信号好友位已满,备注:返现
受密码保护的文章请关注“业余草”公众号,回复关键字“0”获得密码
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序

腾讯云】1核2G5M轻量应用服务器50元首年,高性价比,助您轻松上云
最近朋友圈里有很多人在转发一个非常火的人工智能面相小程序,我看了一下它非常火的原因可能是“人工智能”这个流行词。试着从码农的角度去还原它的实现原理,分析它的实现过程。
人们都说千人千面,世界上没有一张相同的面孔。那么面相小程序是如何做到的呢?人工智能在哪里呢?算命先生又是依据什么来算命的呢?
想到了这些,我就去谷歌,去寻找人们是如何算命的!
发现所谓的算命,其实就是人们根据面相十二宫,手相的一些特征来推测。
所谓的人工智能面相、看相、算命呢?就是根据上面这些宫位给你计算一个分数。分数高的面相就好!
每一个宫位都有解释,每一个宫位都代表一种命运。有的代表财运,有的代表婚姻,有的代表事业,有的代表疾病等。
一些面相老手,还能给你扯更复杂的宫位。
另外我在知识星球中听人说,淘宝上一些面相的店铺,一天收入可能在上万元。看来有钱人面相的还不在少数啊。
人工智能面相可能戳中了不少人的泪点,让它火了起来。
它虽然火了,但是面相的店铺生意可能就会一落千丈吧。所以也就有人喜欢有人忧愁。
那么说了这么多,用代码怎么来实现呢?
上面这个图片来源于网络,是面相算法中的一种。大致也就是根据宫位来算。
给每个位置标记上坐标。用代码获取五官之大小,形状,分暗等图像空间。这里面设计到一个人脸识别技术,大家可以网上看看相关的论文或技术实现。
其实我对人工智能还不算了解,相关的内容大家可以参考国内的、国外的一些技术论文,还有一些开源产品。
通过人脸识别技术,可以得到下面的这些宫位要素信息。
-
可以在人脸上找到影响巨大的部位宫位
-
可以获取宫位的坐标,从而计算各宫位的相对位置大小和比例
-
可以获取五官的位置和大小,根据其占人脸之比例分析
-
可以获取各宫位的颜色明暗,通过技术处理去掉相处之中的反光,然后使用直方图分析各部位和人脸的明暗关系,印堂发暗是可以比人眼更准确的分析得到
说白了,就是通过人工智能、机器学习给你画像。最后给你的画像打分。
贴一段简单的代码:
if (bPic) { Paint p = new Paint(); p.setColor(Color.RED); //p.setStyle(Paint.Style.FILL_AND_STROKE); p.setStyle(Paint.Style.STROKE); Path path = new Path(); path.moveTo((int) (landmarks.get(48).x * resizeRatio), (int) (landmarks.get(48).y * resizeRatio)); for (int i = 48 + 1; i < landmarks.size(); i++) { int pointX1 = (int) (landmarks.get(i).x * resizeRatio); int pointY1 = (int) (landmarks.get(i).y * resizeRatio); path.lineTo(pointX1, pointY1); } path.close(); canvas.drawPath(path, p); path.reset(); path.moveTo((int) (landmarks.get(17).x * resizeRatio), (int) (landmarks.get(17).y * resizeRatio)); for (int i = 17 + 1; i < 22; i++) { int pointX1 = (int) (landmarks.get(i).x * resizeRatio); int pointY1 = (int) (landmarks.get(i).y * resizeRatio); path.lineTo(pointX1, pointY1); } path.close(); canvas.drawPath(path, p); path.reset(); path.moveTo((int) (landmarks.get(22).x * resizeRatio), (int) (landmarks.get(22).y * resizeRatio)); for (int i = 22 + 1; i < 27; i++) { int pointX1 = (int) (landmarks.get(i).x * resizeRatio); int pointY1 = (int) (landmarks.get(i).y * resizeRatio); path.lineTo(pointX1, pointY1); } path.close(); canvas.drawPath(path, p); path.reset(); path.moveTo((int) (landmarks.get(36).x * resizeRatio), (int) (landmarks.get(36).y * resizeRatio)); for (int i = 36 + 1; i < 42; i++) { int pointX1 = (int) (landmarks.get(i).x * resizeRatio); int pointY1 = (int) (landmarks.get(i).y * resizeRatio); path.lineTo(pointX1, pointY1); } path.close(); canvas.drawPath(path, p); Path path3 = new Path(); path3.moveTo((int) (landmarks.get(42).x * resizeRatio), (int) (landmarks.get(42).y * resizeRatio)); for (int i = 42 + 1; i < 48; i++) { int pointX1 = (int) (landmarks.get(i).x * resizeRatio); int pointY1 = (int) (landmarks.get(i).y * resizeRatio); path3.lineTo(pointX1, pointY1); } path3.close(); canvas.drawPath(path3, p); path.reset(); path.moveTo((int) (landmarks.get(27).x * resizeRatio), (int) (landmarks.get(27).y * resizeRatio)); for (int i = 31; i < 36; i++) { int pointX1 = (int) (landmarks.get(i).x * resizeRatio); int pointY1 = (int) (landmarks.get(i).y * resizeRatio); path.lineTo(pointX1, pointY1); } path.close(); canvas.drawPath(path, p); path.reset(); path.moveTo((int) (landmarks.get(1).x * resizeRatio), (int) (landmarks.get(1).y * resizeRatio)); for (int i = 2; i < 17; i++) { int pointX1 = (int) (landmarks.get(i).x * resizeRatio); int pointY1 = (int) (landmarks.get(i).y * resizeRatio); path.lineTo(pointX1, pointY1); } for (int i = 26; i > 16; i--) { int pointX1 = (int) (landmarks.get(i).x * resizeRatio); int pointY1 = (int) (landmarks.get(i).y * resizeRatio); path.lineTo(pointX1, pointY1); } path.close(); canvas.drawPath(path, p); }
实际上的算法和用法,比着复杂多了,我这里只是一个 Canvas 画图,献丑了。
大自然神秘莫测,玄妙无比。一切看似没有规律,又胜似联系不断。掌握了各种规律,就掌握了事物的发展过程。
人工智能或者机器学习,就是通过不断的练习去寻找大自然的某种规律。
会人工智能,或者对人工智能感兴趣的朋友,可以通过下面的参考资料,自己去实现一个面相程序!
参考资料
最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号:xttblog2。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!
本文原文出处:业余草: » 揭秘人工智能面相(看相、算命)原理以及实现