七夕节教你怎么选男朋友/女朋友~基于PaddleHub的身材打分系统

一、项目背景

各位小哥哥小姐姐们是不是很烦恼该怎么选女朋友/男朋友呢?

在这里插入图片描述

为了帮助各位解决长久以来的烦恼!

本文特地基于 PaddleHub 研制了一个身材打分系统,为您的选择提供充分的依据!!!

AI studio 项目地址:
https://aistudio.baidu.com/aistudio/projectdetail/755096

PaddleHub 介绍

现在 AI 的各种算法日新月异,一般人只知道这东西很厉害,但是能做什么,怎么做基本都是一头雾水。即使对于很多从事该领域研究的人来说,不同类别的算法之间的差别也是犹如隔山,所以一个人想要精通所有算法基本是不可能的,学习速度可赶不上新算法出来的速度。

那我们有没有什么捷径去尝试这些新时代的产物,或者有没有办法把这些前沿的算法直接拿来用做应用和创意呢?

传统的做法下,即使原来的作者来源了算法的代码,你会复现你还是需要非常强的技术功底才有机会去做应用:

  • 首先你要会 Python 吧
  • 然后你需要在本地搭建算法学习环境吧
  • 当然还有个前提是你有一台能跑得起来模型训练的电脑
  • 然后你还需要能理解模型的各个层面,从数据读取处理,到算法框架,到结果展示,因为每个环境都可能由于本地环境的不同而出问题
  • 所以即使有开源,普通人也用不了最前沿的这些东西

然而现在我们有了 PaddleHub,飞桨平台为了方便用户使用各种机器学习的前沿模型,于是把这些模型进行了打包封装,真正做到了可以拿来直接用的程度,比如本文中所涉及的模型 human_pose_estimation_resnet50_mpii,仅仅需要 2 行代码即可调用执行!!!

PaddleHub 可以让开发者便捷地获取 PaddlePaddle 生态下的预训练模型,完成模型的管理和一键预测。配合使用Fine-tune API,可以基于大规模预训练模型快速完成迁移学习,让预训练模型能更好地服务于用户特定场景的应用。

目前 PaddleHub 中有 3 个大类模型,包含:文本,图像,和视频。

图像类别下有:图像分类,关键点检测,文字识别,目标检测,图像生成,人脸检测,图像分割。包含了几十个常用的前沿模型,而且还在不断增加中~,大家跟兴趣的可以上官网去看看:

https://www.paddlepaddle.org.cn/hub

二、效果展示

得分一目了然,一键解决你的选择恐惧症! !

在这里插入图片描述

三、实现思路

说到人的身材比例,其实会看几个方面,比如:几头身,头肩比,腰臀比等,而要很好的测量这种类型的比例数据,人体关键点检测就是最好的工具!

所以本次使用了 PaddleHub 的 human_pose_estimation_resnet50_mpiiv 来进行实验。

根据检测出来的不同点位,测算人体整体的比例特征,然后进行打分和对比!

四、具体步骤

1. 安装 PaddleHub 到最新版本

pip install paddlehub --upgrade -i https://mirror.baidu.com/pypi/simple

2. 新建目录

  • img 为待评价的图片
  • results 内存放关键点检测的结果图片
  • 确保程序运行前 results 文件夹内为空
  • 图片需要 .jpg 格式,如果不是的话,需要在下面的程序做对应修改

3. 完成关键点检测

import cv2
import paddlehub as hub
from glob import glob
import os

pose_estimation = hub.Module(name="human_pose_estimation_resnet50_mpii")
img_list = glob(os.path.join('img','*.jpg'))
img_list.sort()
print(img_list)
result = pose_estimation.keypoint_detection(paths=img_list,output_dir='results',visualization=True)

4. 比例测算及打分

def body(head,neck,l_ankle,r_ankle):
    head_size = (head[0]-neck[0])**2 + (head[1]-neck[1])**2 
    body_size_1 = (neck[0]-l_ankle[0])**2 + (neck[1]-l_ankle[1])**2
    body_size_2 = (neck[0]-r_ankle[0])**2 + (neck[1]-r_ankle[1])**2
    if body_size_1 > body_size_2:
        body_size = body_size_1
    else:
        body_size = body_size_2
    baseline = 6
    score = (body_size/head_size)**0.5/baseline*100
    return score
 
scores = []
for i in range(len(result)):
    score = body(
        result[i]['data']['head_top'],
        result[i]['data']['upper_neck'],
        result[i]['data']['left_ankle'],
        result[i]['data']['right_ankle'])
    scores.append(score)
print(scores)

5. 结果展示

# 显示图片
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
%matplotlib inline

def show_image_grid(results_dir, scores):
    plt.figure(num='排行榜',figsize=(10.0,10.0),dpi=100,frameon=False)
    img_list = glob(os.path.join(results_dir,'*.jpg'))
    img_list.sort()
    num = len(img_list)
    for i, image in enumerate(img_list):
        #print(num)
        if scores[i]==max(scores):
            plt.subplot(1,num,i+1).set(title='Winner',xlabel=('Score:%d'%scores[i]))
        else:
            plt.subplot(1,num,i+1).set(xlabel=('Score:%d'%scores[i]))
        
        plt.imshow(mpimg.imread(image))    
    plt.show()

show_image_grid(results_dir='results', scores=scores)

五、总结与展望

本文纯属娱乐,请勿当真,旨在让读者感受 PaddleHub 的无限可能性!

后续版本会考虑加入更多维度的测试指标,让测试更完整,选择更坚定!!!

来AI Studio互粉吧: https://aistudio.baidu.com/aistudio/personalcenter/thirdview/204753

欢迎大家fork喜欢评论三连,感兴趣的朋友也可互相关注一下啊~

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值