社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

Crossin的编程教室 • 5 年前 • 584 次点击  


大家好,欢迎来到 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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/111750