Python颜值打分小工具,给你的自拍美照打个分吧

共 3436字,需浏览 7分钟

 ·

2021-04-19 15:52


大家好,欢迎来到 Crossin的编程教室 !

现在很多拍照软件都有颜值打分及年龄识别功能。其实我们自己用 Python 也能实现这样的功能。今天就分享一个用 PyQt 做可视化,然后调用百度人脸识别 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'))

效果如下:


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

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

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


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


第三步:绑定“浏览”、“开始分析”信号槽

首先是绑定“浏览”信号,先实例化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)

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


然后是绑定“开始分析”信号。其功能就是发送网络请求百度云接口,获取识别信息。

第四步:请求百度云 API

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

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

没有账号的话需要先注册一下。

2. 创建人脸识别应用

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

4. 获取调用接口所需的 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 格式

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. 将返回结果放入上述文本显示框内

效果展示

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

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

你要不要也来试试,用 Python 测测你和女神的颜值差距(仅供娱乐,请勿联想

获取源码请在公众号后台回复关键字 颜值

如果文章对你有帮助,欢迎转发/点赞/收藏~

作者:pk 哥

来源:Python知识圈


_往期文章推荐_

用Python写个简单但强大的人脸识别系统




如需了解付费精品课程教学答疑服务

请在Crossin的编程教室内回复: 666

浏览 11
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报