Python調用百度AI實現(xiàn)顏值評分功能
一、調用百度接口進行人臉屬性識別
安裝好baidu-aip模塊,獲取了百度AI接口密鑰后,即可調用百度接口進行人臉屬性識別了。首先以楊紫的圖片為例進行年齡、性別、顏值的識別。
具體python代碼如下:?
import os import base64 from aip import AipFace os.chdir(r'F:\公眾號\28.人臉識別') #設置圖片存放的路徑 pictureName = '1_yz.jpg' def get_picture_content(pictureName): with open(pictureName, 'rb') as fp: content = base64.b64encode(fp.read()) return content.decode('utf-8') #定義讀取圖片的函數(shù) APP_ID = 'XXX' API_KEY = 'XXXXXXXX' SECRET_KEY = 'XXXXXXXXXXXX' #百度賬號和密鑰 options = {} imageType = 'BASE64' options["face_field"] = "age, gender, beauty" aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY) result = aipFace.detect(get_picture_content(pictureName), imageType, options) print(result)
注: 其中os.chdir中的內容應該替換成你存儲圖片的地址,APP_ID、API_KEY、SECRET_KEY應該替換成你獲取的百度密鑰。
得到結果如下:
其中,age對應的值為年齡,gender對應的值為性別,beauty對應的值為顏值分。為進一步規(guī)范輸出成標準格式,通過如下代碼進行規(guī)范化:
import pandas as pd face_character = pd.DataFrame({"age":[result['result']['face_list'][0]['age']], "gender":[result['result']['face_list'][0]['gender']['type']], "beauty":[result['result']['face_list'][0]['beauty']] })
得到結果如下:
可以發(fā)現(xiàn)楊紫的顏值得分還是很高的圖片,后續(xù)文章也會對其它一些明星進行測試。
二、根據(jù)年齡和性別對顏值進行評價
根據(jù)性別和顏值分,對識別結果進行評價,具體代碼如下:
if face_character['beauty'][0]>80: if face_character['gender'][0] == 'female': print("小姐姐顏值爆表") else: print("小哥哥顏值爆表") elif face_character['beauty'][0]>70: if face_character['gender'][0] == 'female': print("小姐姐天生美顏") else: print("小哥哥天生美顏") elif face_character['beauty'][0]>60: if face_character['gender'][0] == 'female': print("小姐姐顏值尚可") else: print("小哥哥顏值尚可") elif face_character['beauty'][0]>40: if face_character['gender'][0] == 'female': print("小姐姐先天不夠,后天來湊") else: print("小哥哥先天不夠,后天來湊") else: if face_character['gender'][0] == 'female': print("小姐姐洗洗睡吧") else: print("小哥哥洗洗睡吧")
得到結果:
三、批量識別人臉屬性
假設文件夾中有數(shù)張人臉圖片,想批量對這批圖片進行顏值打分,可執(zhí)行如下代碼:
import os import re import time import base64 from aip import AipFace os.chdir(r'F:\公眾號\28.人臉識別') #設置圖片存放的路徑 pictureName = '6_brzp.jpg' def get_picture_content(pictureName): with open(pictureName, 'rb') as fp: content = base64.b64encode(fp.read()) return content.decode() #定義讀取圖片的函數(shù) APP_ID = 'XXX' API_KEY = 'XXXXXXXX' SECRET_KEY = 'XXXXXXXXXXXX' #百度賬號和密鑰 options = {} imageType = 'BASE64' options["face_field"] = "beauty" options["max_face_num"] = 2 aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY) root_path = r'F:\公眾號\28.人臉識別' list = os.listdir(root_path) # 列出文件夾下所有的目錄與文件 for i in range(0, len(list)): time.sleep(1) path = os.path.join(root_path, list[i]) if os.path.isfile(path): result = aipFace.detect(get_picture_content(path), imageType, options) print(list[i] + ' 評分為:' + str(result['result']['face_list'][0]['beauty'])) #顯示出所有圖片的顏值得分
得到結果:
可以發(fā)現(xiàn)楊紫的那張照片顏值分很高,有八十幾分。為了更好的用戶體驗,我們設置一個窗口,顯示評價照片并語音播報顏值得分。?
四、自定義窗口語音播報顏值得分
為了更清晰地評價人的顏值,把圖片和結果用tkinter庫和語音播放庫包裝起來,效果會更好。具體代碼如下:
import os import re import time import base64 import pandas as pd import tkinter as tk from aip import AipFace from tkinter import filedialog root = tk.Tk() root.withdraw() Folderpath = filedialog.askdirectory(title = '請選擇圖片存放的文件夾') picturePath = filedialog.askopenfilename(title = '請選擇要進行顏值評價的圖片') root.destroy() os.chdir(Folderpath) #設置圖片存放的路徑 def get_picture_content(picturePath): with open(picturePath, 'rb') as fp: content = base64.b64encode(fp.read()) return content.decode() #定義讀取圖片的函數(shù) APP_ID = 'XXX' API_KEY = 'XXXXXXXX' SECRET_KEY = 'XXXXXXXXXXXX' #百度賬號和密鑰 options = {} options["max_face_num"] = 2 options["face_field"] = "gender" aipFace = AipFace(APP_ID, API_KEY, SECRET_KEY) imageType = 'BASE64' result = aipFace.detect(get_picture_content(picturePath), imageType, options) gender = result['result']['face_list'][0]['gender']['type'] options["face_field"] = "age" time.sleep(1) result = aipFace.detect(get_picture_content(picturePath), imageType, options) age = result['result']['face_list'][0]['age'] options["face_field"] = "beauty" time.sleep(2) result = aipFace.detect(get_picture_content(picturePath), imageType, options) beauty = result['result']['face_list'][0]['beauty'] #獲取年齡、性別、顏值信息 face_character = pd.DataFrame({"age":age, "gender":gender, "beauty":beauty},index = ['value']) if face_character['beauty'][0]>80: if face_character['gender'][0] == 'female': str_list = "小姐姐芳齡:"+ str(age) + ",顏值爆表"+ ',最終顏值得分為:'+str(beauty) else: str_list = "小哥哥貴庚:"+ str(age) + ",顏值爆表"+ ',最終顏值得分為:'+str(beauty) elif face_character['beauty'][0]>70: if face_character['gender'][0] == 'female': str_list = "小姐姐芳齡:"+ str(age) + ",天生美顏"+ ',最終顏值得分為:'+str(beauty) else: str_list = "小哥哥貴庚:"+ str(age) + ",天生美顏"+ ',最終顏值得分為:'+str(beauty) elif face_character['beauty'][0]>50: if face_character['gender'][0] == 'female': str_list = "小姐姐芳齡:"+ str(age) + ",顏值尚可"+ ',最終顏值得分為:'+str(beauty) else: str_list = "小哥哥貴庚:"+ str(age) + ",顏值尚可"+ ',最終顏值得分為:'+str(beauty) elif face_character['beauty'][0]>30: if face_character['gender'][0] == 'female': str_list = "小姐姐芳齡:"+ str(age) + ",先天不夠,后天來湊"+ ',最終顏值得分為:'+str(beauty) else: str_list = "小哥哥貴庚:"+ str(age) + ",先天不夠,后天來湊" + ',最終顏值得分為:'+str(beauty) else: if face_character['gender'][0] == 'female': str_list = "小姐姐芳齡:"+ str(age) + ",早點洗洗睡吧"+ ',最終顏值得分為:'+str(beauty) else: str_list = "小哥哥貴庚:"+ str(age) + ",早點洗洗睡吧"+ ',最終顏值得分為:'+str(beauty) #顏值定義 from tkinter import * from PIL import Image, ImageTk from win32com.client import Dispatch #導入包 speaker = Dispatch("SAPI.SpVoice") def roll_call(): speaker.Speak(str_list) #控制播放語音 os.chdir(Folderpath) #設置文件路徑 root = Tk() root.title("顏值測試小程序") root.iconbitmap("pikaqiu2.ico") #設置窗口 image = Image.open(picturePath) #加載圖片 root.geometry("400x300") #根據(jù)圖片大小設置窗口大小 img_pic = ImageTk.PhotoImage(image) label = Label(root, image=img_pic) label.pack() b2 = tk.Button(root, bg='lightyellow', text='顏值評價', font=("KaiTi", 8), width=8, height=2, command=roll_call) b2.place(x=0, y=0) root.mainloop()
五、明星顏值評價
最后我們來看下明星的顏值評分吧。
1 劉亦菲
顏值評價結果:
'小姐姐芳齡:21,顏值尚可,最終顏值得分為:64.19'
對于這個結果,我也比較吃驚,所以顏值得分大家當成娛樂就好圖片。
2 賈玲
顏值評價結果:
'小姐姐芳齡:37,先天不夠,后天來湊,最終顏值得分為:30.67'
顏值得分僅供參考,請勿當真。我的有些照片測出來也是三十多分,可能跟背景、光線、表情都有一定的關系,大家當成娛樂就好。
3 肖戰(zhàn)
顏值評價結果:
'小哥哥貴庚:23,顏值尚可,最終顏值得分為:63.9'
顏值得分僅供參考,請勿當真圖片,認為我的代碼有問題的可以自行下載圖片和代碼進行嘗試。
4 宋小寶
顏值評價結果:
'小哥哥貴庚:40,先天不夠,后天來湊,最終顏值得分為:45.18'
顏值得分僅供參考,請勿當真。從上面的顏值得分可以發(fā)現(xiàn),普遍顏值得分較低,八十多分的已經算高分了,也算是為楊紫的顏值正名了吧。至此,調用百度接口顏值識別已講解完畢,感興趣的朋友自己實現(xiàn)一遍吧。?
以上就是Python調用百度AI實現(xiàn)顏值評分功能的詳細內容,更多關于Python 顏值評分的資料請關注腳本之家其它相關文章!
相關文章
Python爬蟲入門案例之爬取去哪兒旅游景點攻略以及可視化分析
讀萬卷書不如行萬里路,學的扎不扎實要通過實戰(zhàn)才能看出來,本篇文章手把手帶你爬取去哪兒平臺的旅游景點攻略并進行可視化分析,大家可以在過程中查缺補漏,看看自己掌握程度怎么樣2021-10-10Python實現(xiàn)一個簡單的畢業(yè)生信息管理系統(tǒng)的示例代碼
這篇文章主要介紹了Python實現(xiàn)一個簡單的畢業(yè)生信息管理系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06tensorflow2.0與tensorflow1.0的性能區(qū)別介紹
今天小編就為大家分享一篇tensorflow2.0與tensorflow1.0的性能區(qū)別介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python錯誤提示:[Errno 24] Too many open files的分析與解決
這篇文章主要給大家介紹了Python中出現(xiàn)錯誤提示:[Errno 24] Too many open files的分析與解決,需要的朋友可以參考借鑒,下面來一起看看吧。2017-02-02pandas中遍歷dataframe的每一個元素的實現(xiàn)
這篇文章主要介紹了pandas中遍歷dataframe的每一個元素的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10