人工智能与面相分析

古代的人认为相由心生,人的一生祸福荣辱都和面相息息相关,因此发展出了麻衣神相等各种面相预测术,现在也有人牵根据人的面相好坏来研究成功学,发现长的好看的确实比长得丑的人容易获得帮助和成功,这就有些牵强附会了。

大自然神秘莫测,玄妙无比,既然一切事物都有从诞生发展到消亡的过程,一切生命也都有生老病死的固定的无法改变的自然规律,也许可能存在一条生命的规律,可以指导芸芸众生奔向成功。掌握了各种规律,就掌握了事物的发展过程,天机术士和预言家们费尽心机,穷经皓首,试图通过已有规律破解生命的终极奥秘,从而演化出每个生命的可能轨迹。但命运不可捉摸,有些人命运不好,有些人一直受到上帝的眷顾,在希腊神话中,有位命运之神,专门负责每个人的命运,我们民间也充满了各种星宿下凡的神话,当然这都是唯心的。算命之术信则有,不信则无,无疑也是唯心的。

机器学习横空出世,使得人们可以利用大数据和概率统计从而在科学上给预测术新的发展,一且都变得可以量化的,一切都变得那么清晰,一切都可以足够精确,连发生的概率都可以精确到小数点后N位,脸的大小,五官的颜色亮度形状大小,各宫位的相对位置距离颜色,一切都奕得可以测量可以量化,可以不同角度取值平均化,科学而精确。这里我们试着使用机器学习标定面相并做简单的分析,也可以验证一些古老的预测术成功率有多高。

通过人脸识别技术,

1.可以在人脸上找到影响巨大的部位宫位

2.可以获取宫位的坐标,从而计算各宫位的相对位置大小和比例

3.可以获取五官的位置和大小,根据其占人脸之比例分析

4.可以获取各宫位的颜色明暗,通过技术处理去掉相处之中的反光,然后使用直方图分析各部位和人脸的明暗关系,印堂发暗是可以比人眼更准确的分析得到

如下图:

 

 

图

 

 

 

 

代码获取五官之大小,形状,分暗等图像空间

 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);
                                }

 

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Python面向对象编程是一种编程范式,它将程序组织成对象的集合,每个对象都有自己的属性和方法。在Python中,一切皆对象,包括数字、字符串、列表等基本数据类型。\[1\]为了定义一个类,可以使用class关键字,如果没有父类,建议统一继承自object类。例如:class 类名(object): pass。\[2\]面向对象编程的三大特性之一是多态,它允许不同的对象对同一个方法做出不同的响应。\[2\]在Python中,可以通过给对象直接添加属性来动态地给对象添加属性。例如,使用对象.属性名 = 属性值的方式给对象添加一个属性。但是不建议使用这种方式给对象添加属性。\[3\]在面向对象编程中,self表示调用这个方法的对象本身。通过self.属性名可以访问对象的属性,通过self.方法名()可以调用对象的方法。\[3\]通过创建类的实例,即对象,可以调用对象的方法并开辟新的内存空间。 #### 引用[.reference_title] - *1* *3* [python 中的面向对象](https://blog.csdn.net/liuxin_hello/article/details/127560700)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [【轻松学】Python面向对象编程——类的设计、基础语法、继承、多态、类属性和类方法、单例设计](https://blog.csdn.net/qq_43721542/article/details/102988665)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值