Python计算出小姐姐的颜值数,看看你的女神颜值多少

共 2486字,需浏览 5分钟

 ·

2020-03-07 23:23



f9a1678255c7b485ac90127763ed831e.webp


阅读文本大概需要 3 分钟。

现在很多拍照软件都有颜值测试及年龄识别功能,经过研究,发现 Python 也能实现,今天主要用 PyQt4 做个可视化工具,然后调用百度人脸识别api,识别出人脸的性别、年龄及颜值,下面一起来看看怎么实现的吧!

第一步:创建工具主窗口

PyQt5创建主窗口有其固定的套路,首先要创建应用程序对象:app=QApplication(sys.argv),参数sys.argv是命令行参数,这使得可以在电脑系统终端执行程序时,传入命令参数,来执行不同的逻辑代码。执行应用程序对象,进入消息循环等待退出: sys.exit(app.exec_()),代码如下。

app = QApplication(sys.argv)
show = Window()  # 主窗口的类
show.setFixedSize(500, 200)
show.show()
sys.exit(app.exec_())

其中, Window()是识别工具的类,窗口大小为 500X200

再为该窗口添加标题和图标

self.setWindowTitle("颜值识别工具")
self.setWindowIcon(QIcon('图标.jpg'))

效果如下:

6cc849fabaca3fdc71dba9f85b8d79f3.webp

第二步:以网格布局方式放控件

PyQt5有5种布局方式,分别是绝对布局、水平布局、垂直布局、网格布局和表单布局,本程序只采用网格布局,其余布局方式各有特点,感兴趣的朋友可以研究一下。

  1. 用QTextBrowser创建选择图片、浏览标签,分别为110x25和60x40大小,用QpushButton创建浏览、开始分析按钮,并绑定setBrowerPath和start函数(后续会提到),网格布局需要用到addWidget函数,它的4个参数分别代表放置的内容、放置行数、放置的列数、放的位置。


86c87ae4e897a2791e2bdef52136510f.webp


009954fc406c637b5e1440564c8a957c.webp

2.放置性别、年龄、颜值标签,分别放置在第 4、5、6 行的1和2列位置。


caa2c49190127518a70ba3771e6d8b8b.webp


4eac6bdc2e8e23b9d55db3b614b810bf.webp

3.绑定“浏览”、“开始分析”信号槽

首先是绑定“浏览”信号,先实例化QfileDialog,然后设置可以打开任何文件,接着设置文件过滤,选择接受选中文件的路径,默认为列表,再取出文件路径。

def setBrowerPath(self):
    dig=QFileDialog()
    dig.setFileMode(QFileDialog.AnyFile)  # 设置可以打开任何文件
    dig.setFilter(QDir.Files) # 文件过滤
    if dig.exec_():
        # 接受选中文件的路径,默认为列表
        filenames = dig.selectedFiles()
        self.picfile=filenames[0]                        

        self.pathText.setText(self.picfile)

        # 列表中的第一个元素即是文件路径,以只读的方式打开文件



e937c5147f285f6043ec6e90e7422882.webp

然后是绑定“开始分析”信号

1.进入百度云人脸识别控制台

https://console.bce.baidu.com/ai/?_=1528192333418&fromai=1#/ai/face/overview/index

没有账号的要注册的话

2.创建人脸识别应用

262c2a996a93204f5c4c5fca72efbd02.webp

3.创建成功后获得API key和Secret Key

54b8d1940e88b421ea374e68c87e3a36.webp


  1. 获取调用接口所需的Access Token

client_id = '' #API Key
client_secret = '' #Secret Key
url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={0}&client_secret={1}'.format(client_id,client_secret)

data=requests.get(url, headers=header)

access_token=json.loads(data.text)['access_token']

其中client_id是API_key的值,client_secret是Secret_Key的值,返回的access_token用于人脸调用接口进行人脸识别。

5.打开图片路径,并转成BASE64格式

1e7a2930b0b92485acb127a8f97bb13d.webp

6.构造识图请求参数,获得返回结果

params = {'image': img,
            'image_type''BASE64',
            'face_field''age,beauty,gender,face_type,face_shape,expression,landmark'}

url = 'https://aip.baidubce.com/rest/2.0/face/v3/detect?access_token={0}'.format(get_access_token())
results = requests.post(url, data=params, headers=header)
results = json.loads(results.text)

Img是图片信息,image_type是图片格式,face_field是返回的识别信息,包括年龄、颜值、性别等信息,我们只取颜值、性别、年龄3类信息。
7.将返回结果放入上述文本显示框内

3d0e4d16479afc5cfba62bb1e4532ec2.webp

第三步:效果展示

用我自己的照片和女神迪丽热巴的照片比较一下

女神果然是女神,虽然我平时也以帅哥自称,但是在真正的实例派面前还是有差距的啊!

赶紧行动起来,用 Python 测测你和女神的颜值差距。

本文全部代码在公众号「程序IT圈」输入框输入 颜值 获取

82141867aebbdf12edc00e01dcf61b3a.webp

ec2c982ec13cf8d73f2d7af55ca3f600.webp

如何用Python画一只机器猫?


教你用Python玩转histogram直方图


聊聊 Python 自动化脚本打包成 APK


叨叨 Python 性能优化工具


浏览 17
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报