Python計(jì)算出小姐姐的顏值數(shù),看看你的女神顏值多少

閱讀文本大概需要 3 分鐘。
現(xiàn)在很多拍照軟件都有顏值測(cè)試及年齡識(shí)別功能,經(jīng)過(guò)研究,發(fā)現(xiàn) Python 也能實(shí)現(xiàn),今天主要用 PyQt4 做個(gè)可視化工具,然后調(diào)用百度人臉識(shí)別api,識(shí)別出人臉的性別、年齡及顏值,下面一起來(lái)看看怎么實(shí)現(xiàn)的吧!
第一步:創(chuàng)建工具主窗口
PyQt5創(chuàng)建主窗口有其固定的套路,首先要?jiǎng)?chuàng)建應(yīng)用程序?qū)ο螅篴pp=QApplication(sys.argv),參數(shù)sys.argv是命令行參數(shù),這使得可以在電腦系統(tǒng)終端執(zhí)行程序時(shí),傳入命令參數(shù),來(lái)執(zhí)行不同的邏輯代碼。執(zhí)行應(yīng)用程序?qū)ο螅M(jìn)入消息循環(huán)等待退出: sys.exit(app.exec_()),代碼如下。
app?=?QApplication(sys.argv)
show?=?Window()??#?主窗口的類
show.setFixedSize(500,?200)
show.show()
sys.exit(app.exec_())
其中, Window()是識(shí)別工具的類,窗口大小為 500X200
再為該窗口添加標(biāo)題和圖標(biāo)
self.setWindowTitle("顏值識(shí)別工具")
self.setWindowIcon(QIcon('圖標(biāo).jpg'))
效果如下:

第二步:以網(wǎng)格布局方式放控件
PyQt5有5種布局方式,分別是絕對(duì)布局、水平布局、垂直布局、網(wǎng)格布局和表單布局,本程序只采用網(wǎng)格布局,其余布局方式各有特點(diǎn),感興趣的朋友可以研究一下。
用QTextBrowser創(chuàng)建選擇圖片、瀏覽標(biāo)簽,分別為110x25和60x40大小,用QpushButton創(chuàng)建瀏覽、開始分析按鈕,并綁定setBrowerPath和start函數(shù)(后續(xù)會(huì)提到),網(wǎng)格布局需要用到addWidget函數(shù),它的4個(gè)參數(shù)分別代表放置的內(nèi)容、放置行數(shù)、放置的列數(shù)、放的位置。


2.放置性別、年齡、顏值標(biāo)簽,分別放置在第 4、5、6 行的1和2列位置。


3.綁定“瀏覽”、“開始分析”信號(hào)槽
首先是綁定“瀏覽”信號(hào),先實(shí)例化QfileDialog,然后設(shè)置可以打開任何文件,接著設(shè)置文件過(guò)濾,選擇接受選中文件的路徑,默認(rèn)為列表,再取出文件路徑。
def?setBrowerPath(self):
????dig=QFileDialog()
????dig.setFileMode(QFileDialog.AnyFile)??#?設(shè)置可以打開任何文件
????dig.setFilter(QDir.Files)?#?文件過(guò)濾
????if?dig.exec_():
????????#?接受選中文件的路徑,默認(rèn)為列表
????????filenames?=?dig.selectedFiles()
????????self.picfile=filenames[0]????????????????????????
????????self.pathText.setText(self.picfile)
????????#?列表中的第一個(gè)元素即是文件路徑,以只讀的方式打開文件

然后是綁定“開始分析”信號(hào)
1.進(jìn)入百度云人臉識(shí)別控制臺(tái)
https://console.bce.baidu.com/ai/?_=1528192333418&fromai=1#/ai/face/overview/index
沒(méi)有賬號(hào)的要注冊(cè)的話
2.創(chuàng)建人臉識(shí)別應(yīng)用

3.創(chuàng)建成功后獲得API key和Secret Key

獲取調(diào)用接口所需的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用于人臉調(diào)用接口進(jìn)行人臉識(shí)別。
5.打開圖片路徑,并轉(zhuǎn)成BASE64格式

6.構(gòu)造識(shí)圖請(qǐng)求參數(shù),獲得返回結(jié)果
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是返回的識(shí)別信息,包括年齡、顏值、性別等信息,我們只取顏值、性別、年齡3類信息。
7.將返回結(jié)果放入上述文本顯示框內(nèi)

第三步:效果展示
用我自己的照片和女神迪麗熱巴的照片比較一下
女神果然是女神,雖然我平時(shí)也以帥哥自稱,但是在真正的實(shí)例派面前還是有差距的??!
趕緊行動(dòng)起來(lái),用 Python 測(cè)測(cè)你和女神的顏值差距。
本文全部代碼在公眾號(hào)「程序IT圈」輸入框輸入?顏值 獲取。


●教你用Python玩轉(zhuǎn)histogram直方圖
