手把手的技術(shù)干貨教程,記錄從0到1的開發(fā)過程。
一、前言
1.1 內(nèi)容簡介
這篇文章的內(nèi)容主要介紹:華為云人臉識別服務(FRS)接口的使用過程。 利用華為云提供的人臉識別服務(FRS),完成:人臉檢測
、人臉庫創(chuàng)建
,向人臉庫添加人臉
,在人臉庫里搜索匹配的人臉完成人臉對比
等幾個主要的功能。 只要完成了這幾個功能,就可以開發(fā)成品軟件,完成很多需要人臉服務的 場景,行業(yè)的項目落地。 比如:人臉識別考勤
、人臉識別簽到
、人臉門禁開鎖
等等場景。
人臉識別服務基于人的臉部特征信息,利用計算機對人臉圖像進行處理、分析和理解,用戶通過實時訪問和調(diào)用API獲取人臉處理結(jié)果,幫助用戶自動進行人臉的識別、比對以及相似度查詢等。 人臉識別服務提供了開放API接口,提供人臉識別能力,用戶可以直接調(diào)用API接口訪問華為云人臉識別服務,完成人臉識別后返回的結(jié)果為JSON格式,用戶通過API接口與人臉識別服務交互,就可以完成項目開發(fā)。
當前開發(fā)案例時,編譯語言采用Python
(畢竟環(huán)境安裝簡單,符合大部分人的需求),開發(fā)環(huán)境使用華為云新推出的開發(fā)者空間的云主機
,也就是在開發(fā)者空間的云主機
里完成上面所說的項目開發(fā)體驗。
這里使用的華為云開發(fā)者空間云主機,是華為云為全球開發(fā)者打造的一個云端開發(fā)環(huán)境,簡化開發(fā)流程、提高開發(fā)效率,并促進技術(shù)創(chuàng)新。這個平臺提供了一個無需成本即可探索和使用華為云服務的機會,每位注冊的開發(fā)者在年度內(nèi)都能享有數(shù)百小時的云主機使用權(quán)。云主機預裝了CodeArts IDE(華為云的集成開發(fā)環(huán)境)、代碼倉庫以及JDK、Python等關(guān)鍵運行時插件,從而避免了本地環(huán)境配置的復雜性,讓開發(fā)者能夠快速上手并立即開始工作。
除了云主機外,華為云還提供了5GB的云存儲容量及定制化的場景模擬沙箱,這些資源幫助開發(fā)者在安全隔離的環(huán)境中進行實驗和測試。華為云開發(fā)者空間提供了豐富的技術(shù)培訓課程和專業(yè)認證資料,助力開發(fā)者提升技能,并通過認證來證明自己的能力。該空間特別注重于應用全周期管理,涵蓋從應用構(gòu)建到運維的全過程,確保開發(fā)者可以高效地完成云端應用搭建。
華為云開發(fā)者空間云主機圍繞CodeArts IDE打造了一個全面的開發(fā)工具生態(tài)系統(tǒng),整合了鯤鵬、昇騰、鴻蒙等核心生態(tài)的開發(fā)資源,提供廣泛的開源軟件庫和實用開發(fā)插件,支持從代碼托管到應用運維的各個階段。這不僅提升了開發(fā)效率,也方便了開發(fā)者與華為先進技術(shù)和全球開發(fā)者社區(qū)互動,共同推動技術(shù)進步和應用創(chuàng)新。
華為云開發(fā)者空間云主機的操作系統(tǒng)版本為Ubuntu 22.04.4 LTS,并且內(nèi)置了一些常用的應用程序如Gitcode等,為開發(fā)者提供了一個穩(wěn)定而高效的開發(fā)環(huán)境。
下面是運行效果:
1.2 開發(fā)環(huán)境
在使用華為云人臉識別服務(FRS)進行開發(fā)時,開發(fā)環(huán)境是華為云新推出的開發(fā)者空間云主機。這個開發(fā)環(huán)境為開發(fā)者提供了便捷且功能豐富的云端工作空間,特別適合進行各種云原生應用的開發(fā)和測試。
當前項目使用的相關(guān)軟件工具已經(jīng)上傳到網(wǎng)盤:[https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink]
(1)開發(fā)者空間云主機
云主機中預裝了華為云CodeArts IDE
開發(fā)工具,這是一款集成了多種開發(fā)插件的一站式開發(fā)環(huán)境,支持代碼編寫、調(diào)試、版本控制等功能。
(2)開發(fā)環(huán)境的具體配置
- 操作系統(tǒng) :云主機的操作系統(tǒng)版本為Ubuntu 22.04.4 LTS,這是一個廣泛使用的Linux發(fā)行版,擁有良好的社區(qū)支持和豐富的軟件包。
- 存儲容量 :每位注冊的開發(fā)者都能獲得5GB的云存儲空間,用于存放項目文件和個人數(shù)據(jù)。
- 開發(fā)語言 :選擇了Python為例。
(3)開發(fā)流程
- 初始化設(shè)置 :登錄華為云賬號后進入開發(fā)者空間,領(lǐng)取并配置云主機,包括選擇默認配置以及等待初始化過程完成。
- 環(huán)境準備 :在云主機上安裝必要的開發(fā)工具和依賴庫,比如Python及其相關(guān)庫requests等,以便調(diào)用華為云API。
- 獲取API憑證 :在華為云平臺上創(chuàng)建并獲取Access Key ID和Secret Access Key,用于身份驗證。
- 開發(fā)與測試 :利用Python腳本調(diào)用人臉識別服務的各種API接口,實現(xiàn)人臉檢測、人臉庫管理及人臉比對等功能,并進行充分的測試以保證功能正確性。
- 部署與優(yōu)化 :根據(jù)實際應用場景將開發(fā)完成的人臉識別解決方案部署到生產(chǎn)環(huán)境中,并持續(xù)優(yōu)化性能和用戶體驗。
1.3 功能說明
華為云人臉識別服務(FRS)提供了一系列功能,通過這些功能可以實現(xiàn)多種應用場景中的人臉識別需求。
當前使用華為云FRS接口完成的主要功能:
(1) 人臉檢測 :這一功能用于從圖像或視頻流中識別人臉的位置和大小。它能夠返回人臉的邊界框、關(guān)鍵點以及姿態(tài)信息等,是進行后續(xù)處理的基礎(chǔ)步驟。
(2) 人臉庫創(chuàng)建 :在實際應用中,通常需要將特定的人臉數(shù)據(jù)存儲起來以便后續(xù)查詢對比。此功能允許用戶創(chuàng)建一個或多個人臉庫,每個人臉庫可以包含多個不同的人臉記錄。
(3) 向人臉庫添加人臉 :當創(chuàng)建了人臉庫后,可以通過上傳圖片的方式將人臉添加到已有的人臉庫中。每張圖片代表一個人臉樣本,并且可以與該人臉相關(guān)的額外信息一同保存,如姓名、ID號等。
(4) 人臉比對/搜索 :這項功能支持在指定的人臉庫中查找與給定人臉相似度最高的匹配項。通過比較兩張人臉圖片或者直接使用人臉特征值來進行比對,從而判斷是否為同一人。這一步驟對于實現(xiàn)諸如考勤系統(tǒng)、訪問控制等場景非常關(guān)鍵。
基于上述功能,開發(fā)者可以開發(fā)出多種實用的應用程序,例如:
- 人臉識別考勤 :自動記錄員工的上下班時間。
- 人臉識別簽到 :會議、活動中的快速簽到解決方案。
- 人臉門禁開鎖 :通過識別訪客身份來控制物理訪問權(quán)限。
1.4 實現(xiàn)過程
- 環(huán)境準備 :在華為云開發(fā)者空間的云主機上設(shè)置好Python開發(fā)環(huán)境,包括安裝必要的庫如requests等,以便調(diào)用華為云提供的API接口。
- 獲取API憑證 :在開始調(diào)用API之前,需要在華為云平臺上注冊并獲取相應的認證密鑰(Access Key ID 和 Secret Access Key),這些信息會在每次請求時用來驗證身份。
- 調(diào)用人臉檢測API :使用Python腳本發(fā)送HTTP POST請求至華為云FRS的人臉檢測端點,傳入待分析的圖片文件,接收JSON格式的結(jié)果。
- 創(chuàng)建人臉庫 :同樣地,通過發(fā)送合適的HTTP請求來創(chuàng)建新的人臉庫,并獲取其唯一標識符。
- 添加人臉至庫 :將欲存儲的人臉圖片上傳至剛剛創(chuàng)建好的人臉庫中,同時關(guān)聯(lián)相關(guān)信息。
- 執(zhí)行人臉比對 :最后,利用人臉比對API,將現(xiàn)場捕捉到的人臉與數(shù)據(jù)庫內(nèi)已有的記錄進行對比,根據(jù)返回的相似度分數(shù)做出決策。
二、華為云開發(fā)者空間
2.1 進入開發(fā)者空間
鏈接地址:[https://developer.huaweicloud.com/space/devportal/desktop]
登錄華為云賬號,進去之后看到的頁面如下:
2.2 配置云主機
在左上角可以看到云主機的配置提醒,目前默認是基礎(chǔ)版。
點擊配置云主機
,會彈出對話框,讓你選擇云主機的配置,進行安裝系統(tǒng)。我這里選擇ubuntu 22.04
.
2.3 安裝系統(tǒng)
點擊安裝
后,會進行安裝系統(tǒng)。需要等等一段時間。
2.4 啟動云主機
安裝完畢之后,直接可以在瀏覽器里啟動云主機。
啟動需要一段時間初始環(huán)境。
進去之后會有引導界面,提示云主機的使用技巧。
進入桌面后的默認效果如下。
2.5 全屏切換
在桌面頁面上有個按鈕可以全屏切換,切換全屏后,可視化空間更大,開發(fā)更加方便。
2.6 共享桌面
云主機還有共享桌面功能,如果需要遠程演示項目,共享開發(fā)過程,對方還可以遠程操作,這個功能非常的方便。 直接雙擊666
。
2.5 測試Python開發(fā)環(huán)境
點擊左下角的所有應用程序
,可以看到開發(fā)
菜單里,有安裝好的Python環(huán)境,可以直接使用。
啟動之后的效果如下。
進去之后,點擊左上角,新建一個文件。
然后保存文件,名字叫:test.py
然后編寫一段簡單的python
代碼,測試當前的開發(fā)環(huán)境是否正常。
代碼如下:
import socket
def get_local_ip():
"""
獲取本地 IP 地址
"""
try:
# 創(chuàng)建一個 socket 對象,并連接到一個公共地址
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
local_ip = s.getsockname()[0]
s.close()
return local_ip
except Exception as e:
return f"無法獲取本地 IP 地址: {e}"
if __name__ == '__main__':
print("本地 IP 地址是:", get_local_ip())
點擊左上角運行。
結(jié)果如下:
2.6 安裝requests庫
接下來需要使用Python代碼的requests庫,發(fā)起HTTP請求。先提前安裝環(huán)境。
2.7 安裝Pillow庫
Pillow
是 PIL
(Python Imaging Library)的一個分支,提供了圖片處理功能。
pip3 install Pillow
到此,云主機的開發(fā)環(huán)境已經(jīng)測試OK。
三、人臉識別服務使用
3.1 開通人臉識別服務
鏈接地址: https://console.huaweicloud.com/frs/?region=cn-north-4&locale=zh-cn#/frs/manage/index
開通之后的效果。
3.2 接口文檔
在控制臺頁面中,可以看到每個功能都有一個接口文檔
按鈕,點擊可以一鍵翻到對應的幫助文檔頁面??焖倭私獯斯δ艿氖褂棉k法。
這里以人臉檢測V2
接口文檔介紹為例。 點擊進去訪問的頁面如下。
向下翻,可以看到此接口如何調(diào)用,需要傳入什么參數(shù)。
在下面可以看到一個請求參數(shù)
的說明。第一個參數(shù)是:X-Auth-Token
,這個很重要,調(diào)用華為云的API接口都需要填這個參數(shù)。 關(guān)于如何獲取這個X-Auth-Token
參數(shù)。 下面章節(jié)里會詳細介紹。
3.3 項目憑證
接下來調(diào)用人臉服務的API接口,都需要token進行鑒權(quán),需要使用項目憑證
這個參數(shù)。
【1】獲取項目憑證 點擊左上角用戶名,選擇下拉菜單里的我的憑證
。 記住這個項目ID
,后面會用到。
3.4 創(chuàng)建IAM賬戶
創(chuàng)建一個IAM賬戶,因為接下來使用人臉服務的API接口,這些接口都需要token進行鑒權(quán)。簡單來說,就是身份的認證。 調(diào)用接口獲取Token時,就需要填寫IAM賬號信息。所以,接下來演示一下過程。
地址: https://console.huaweicloud.com/iam/?region=cn-north-4#/iam/users
鼠標放在左上角頭像上,在下拉菜單里選擇統(tǒng)一身份認證
。
點擊右上角創(chuàng)建用戶
。
填寫用戶名和密碼信息:
繼續(xù)點擊下一步:
然后點擊創(chuàng)建用戶
。
創(chuàng)建成功:
創(chuàng)建完成
用戶信息如下:
主用戶名 xiao_ping_ping
IAM用戶 ds_abc
密碼 DS12345678
然后回到人臉服務去的控制臺頁面 要點擊開通管理,給新創(chuàng)建的IAM用戶賦予權(quán)限。 一定要開,不然后面訪問API是沒有權(quán)限的。
就像這樣,點擊開通服務
即可。
3.5 獲取token鑒權(quán)
【1】Token介紹
為了方便接下來調(diào)用華為云的API接口,這里先完成token
參數(shù)的獲取。
幫助文檔:https://support.huaweicloud.com/api-iam/iam_30_0001.html
獲取的Token有效性說明:
Token的有效期為 24小時 。建議進行緩存,避免頻繁調(diào)用。使用Token前請確保Token離過期有足夠的時間,防止調(diào)用API的過程中Token過期導致調(diào)用API失敗。重新獲取Token,不影響已有Token有效性。
【2】接口使用說明
在文檔頁面,向下翻,可以看到對于此接口的詳細說明。還支持使用在線調(diào)試。
【3】編寫代碼獲取token
import requests
import json
# 主賬號用戶名
MAIN_USER = "[填你自己的]"
# IAM 子賬戶用戶名
IAM_USER = "[填你自己的]"
# IAM 子賬戶密碼
IAM_PASSWORD = "[填你自己的]"
# 項目 ID
PROJECT_ID = "[填你自己的]"
# 服務器區(qū)域代號
SERVER_ID = "cn-north-4"
# 保存 TOKEN 的文件路徑
TOKEN_FILE_PATH = "token.txt"
def get_token():
"""
功能: 獲取 TOKEN 并保存到本地文件
"""
# 請求地址
request_url = f"https://iam.{SERVER_ID}.myhuaweicloud.com/v3/auth/tokens"
# 構(gòu)造請求頭
headers = {
"Content-Type": "application/json;charset=UTF-8"
}
# 構(gòu)造請求體
payload = {
"auth": {
"identity": {
"methods": ["password"],
"password": {
"user": {
"domain": {
"name": MAIN_USER
},
"name": IAM_USER,
"password": IAM_PASSWORD
}
}
},
"scope": {
"project": {
"name": SERVER_ID
}
}
}
}
# 發(fā)出 POST 請求
try:
response = requests.post(request_url, headers=headers, data=json.dumps(payload))
# 打印狀態(tài)碼
print(f"狀態(tài)碼: {response.status_code}")
if response.status_code == 201:
# 讀取 X-Subject-Token 響應頭
token = response.headers.get("X-Subject-Token")
# 打印返回的數(shù)據(jù)和 Token
print(f"反饋的數(shù)據(jù): {response.json()}")
print(f"Token: {token}")
# 保存 TOKEN 到本地文件
if token:
save_token_to_file(token)
print(f"TOKEN 已保存到 {TOKEN_FILE_PATH}")
else:
print("未能獲取到 TOKEN")
else:
print(f"獲取 TOKEN 失敗: {response.text}")
except Exception as e:
print(f"請求發(fā)生錯誤: {e}")
def save_token_to_file(token):
"""
保存 TOKEN 到本地文件
"""
try:
with open(TOKEN_FILE_PATH, "w") as file:
file.write(token)
except Exception as e:
print(f"保存 TOKEN 時發(fā)生錯誤: {e}")
def main():
# 獲取 TOKEN
get_token()
if __name__ == "__main__":
main()
代碼說明:
(1) 依賴庫 :使用requests庫發(fā)起 HTTP 請求。 如果沒有安裝,在運行代碼前安裝依賴庫:
pip install requests
(2) 主要邏輯 :構(gòu)造請求頭和請求體。發(fā)起 POST
請求,獲取響應。從響應頭中提取 X-Subject-Token
并保存到本地文件。
(3) TOKEN 保存 : TOKEN 被保存到 token.txt
文件中,方便后續(xù)直接讀取使用。
(4) 運行方式 : 將代碼保存為get_token.py,可以通過命令運行:
python get_token.py
也可以直接在終端運行,更加方便。 代碼編寫完畢,點擊右上角的綠色三角形
按鈕,運行。 得到了Token
然后保存到本地文件里。
3.6 人臉檢測功能
【1】接口地址
幫助文檔地址: https://support.huaweicloud.com/api-face/face_02_0084.html
人臉檢測功能的API接口地址:https://face.cn-north-4.myhuaweicloud.com/v2/{project_id}/face-detect
【2】請求參數(shù)
參數(shù) | 參數(shù)類型 | 描述 |
---|---|---|
X-Auth-Token | String | 用戶Token。 |
Content-Type | String | 參數(shù)值為application/json |
參數(shù)名 | 參數(shù)類型 | 說明 |
---|---|---|
image_base64 | String | 圖像數(shù)據(jù),Base64編碼,要求:Base64編碼后大小不超過8MB,建議小于1MB。圖片為JPG/JPEG/BMP/PNG格式。 |
attributes | String | 是否返回人臉屬性,希望獲取的屬性列表,多個屬性間使用逗號(,)隔開。目前支持的屬性有:2:年齡4:裝束(帽子、眼鏡)6:口罩7:發(fā)型8:胡須11:圖片類型12:質(zhì)量13:表情21:人臉圖片旋轉(zhuǎn)角(順時針偏轉(zhuǎn)角度),支持0°、90°、180°和270°圖片旋轉(zhuǎn)。 |
【3】響應參數(shù)
如果狀態(tài)返回400,表示肯定是調(diào)用出錯了,如果返回狀態(tài)碼是 200,那么返回的值就是以下的幾種情況。
參數(shù) | 描述 |
---|---|
faces | 檢測到的人臉。 調(diào)用失敗時無此字段。 |
參數(shù) | 描述 |
---|---|
bounding_box | 人臉在圖像中的位置。 |
attributes | 人臉關(guān)鍵屬性,比如頭部姿態(tài)。 |
參數(shù) | 描述 |
---|---|
width | 人臉圖像所在矩形框的寬度。 |
top_left_y | 矩形框左上角縱坐標。 |
top_left_x | 矩形框左上角橫坐標。 |
height | 人臉圖像所在矩形框的高度。 |
參數(shù) | 描述 |
---|---|
dress | 包含glass和hat兩個屬性結(jié)果。 |
glass | 是否戴眼鏡:yes:戴眼鏡dark:戴墨鏡none:未戴眼鏡unknown:未知 |
hat | 是否戴帽子:yes:戴帽子none:未戴帽子unknown:未知 |
age | 年齡。 |
mask | 是否戴口罩:yes:戴口罩none:未戴口罩unknown:未知 |
beard | 胡須:yes:有胡須none:無胡須unknown:未知 |
phototype | 圖片類型:idcard:證件照monitor:攝像頭監(jiān)控internet photo:網(wǎng)絡圖片 |
quality | 圖片中人臉的遮擋度、模糊度、光照強度、姿態(tài)角度。 |
hair | 發(fā)型:long:長發(fā)short:短發(fā)unknown:未知 |
expression | 人臉表情,包括中性、高興、害怕、驚訝、傷心、生氣、厭惡。 |
face_angle | 人臉圖片旋轉(zhuǎn)角(順時針偏轉(zhuǎn)角度),支持0°、90°、180°和270°圖片旋轉(zhuǎn)。 |
參數(shù) | 參數(shù)類型 | 描述 |
---|---|---|
glass | String | 是否戴眼鏡:yes:戴眼鏡dark:戴墨鏡none:未戴眼鏡unknown:未知 |
hat | String | 是否戴帽子:yes:戴帽子none:未戴帽子unknown:未知 |
參數(shù) | 參數(shù)類型 | 描述 | 推薦值 |
---|---|---|---|
total_score | Double | 人臉質(zhì)量總分,取值范圍[0-1],分值越大質(zhì)量越高。 | 大于0.45 |
blur | Double | 模糊度,取值范圍[0-1],分值越大模糊問題越嚴重。 | 小于0.3 |
pose | Double | 姿態(tài),取值范圍[0-1],分值越大姿態(tài)問題越嚴重。 | 小于0.3 |
occlusion | Double | 遮擋,取值范圍[0-1],分值越大遮擋問題越嚴重。 | 小于0.3 |
illumination | Double | 光照,取值范圍[0-1],分值越大光照問題越嚴重。 | 小于0.3 |
參數(shù) | 參數(shù)類型 | 描述 |
---|---|---|
type | String | 人臉表情類型:neutral:中性happy:高興fear:害怕surprise:驚訝sad:傷心angry:生氣disgust:厭惡unknown:圖片質(zhì)量問題導致未識別 |
probability | Double | 表情置信度,取值范圍[0-1]。 |
【4】準備測試的圖片
打開文件管理器,在/home/developer
目錄下創(chuàng)建一個image
文件夾。
然后打開瀏覽器,下載幾張測試的圖片。
準備好兩張測試的照片。
【5】編寫代碼
重新新建一個face_detect.py
文件。用于編寫測試人臉檢測代碼。
編寫代碼如下:
import requests
import base64
import json
# 項目 ID 和服務器區(qū)域代號
PROJECT_ID = "填你自己的"
SERVER_ID = "cn-north-4"
# TOKEN 文件路徑
TOKEN_FILE_PATH = "token.txt"
def read_token_from_file():
"""
從文件中讀取 TOKEN
"""
try:
with open(TOKEN_FILE_PATH, "r") as file:
token = file.read().strip()
return token
except Exception as e:
print(f"讀取 TOKEN 文件時發(fā)生錯誤: {e}")
return None
def image_to_base64(image_path):
"""
將圖片轉(zhuǎn)換為 Base64 編碼
"""
try:
with open(image_path, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
return encoded_string
except Exception as e:
print(f"圖片編碼為 Base64 時發(fā)生錯誤: {e}")
return None
def face_detect(image_path):
"""
人臉檢測功能
"""
# 獲取 TOKEN
token = read_token_from_file()
if not token:
print("TOKEN 無法加載,檢測失敗")
return
# 請求地址
request_url = f"https://face.{SERVER_ID}.myhuaweicloud.com/v2/{PROJECT_ID}/face-detect"
# 將圖片轉(zhuǎn)換為 Base64 編碼
img_data = image_to_base64(image_path)
if not img_data:
print("圖片無法轉(zhuǎn)換為 Base64,檢測失敗")
return
# 構(gòu)造請求頭
headers = {
"Content-Type": "application/json",
"X-Auth-Token": token
}
# 構(gòu)造請求體
payload = {
"image_base64": img_data,
"attributes": "1,2,4,6,7,8" # 自定義返回字段
}
# 發(fā)送 POST 請求
try:
response = requests.post(request_url, headers=headers, data=json.dumps(payload))
# 打印狀態(tài)碼
print(f"狀態(tài)碼: {response.status_code}")
# 解析和打印返回結(jié)果
if response.status_code == 200:
print("人臉檢測成功,結(jié)果如下:")
print(json.dumps(response.json(), indent=4, ensure_ascii=False))
else:
print(f"人臉檢測失敗: {response.text}")
except Exception as e:
print(f"請求發(fā)生錯誤: {e}")
def main():
# 圖片路徑,替換為你要檢測的圖片路徑
image_path = "/home/developer/image/1.jpeg"
# 執(zhí)行人臉檢測
face_detect(image_path)
if __name__ == "__main__":
main()
以下是用 Python 實現(xiàn)的人臉檢測功能代碼,使用 requests
庫來發(fā)出 HTTP 請求,并從本地的 token.txt
文件中讀取 TOKEN。代碼也包含將圖片轉(zhuǎn)換為 Base64 編碼的邏輯:
import requests
import base64
import json
# 項目 ID 和服務器區(qū)域代號
PROJECT_ID = "填你自己的"
SERVER_ID = "cn-north-4"
# TOKEN 文件路徑
TOKEN_FILE_PATH = "token.txt"
def read_token_from_file():
"""
從文件中讀取 TOKEN
"""
try:
with open(TOKEN_FILE_PATH, "r") as file:
token = file.read().strip()
return token
except Exception as e:
print(f"讀取 TOKEN 文件時發(fā)生錯誤: {e}")
return None
def image_to_base64(image_path):
"""
將圖片轉(zhuǎn)換為 Base64 編碼
"""
try:
with open(image_path, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
return encoded_string
except Exception as e:
print(f"圖片編碼為 Base64 時發(fā)生錯誤: {e}")
return None
def face_detect(image_path):
"""
人臉檢測功能
"""
# 獲取 TOKEN
token = read_token_from_file()
if not token:
print("TOKEN 無法加載,檢測失敗")
return
# 請求地址
request_url = f"https://face.{SERVER_ID}.myhuaweicloud.com/v2/{PROJECT_ID}/face-detect"
# 將圖片轉(zhuǎn)換為 Base64 編碼
img_data = image_to_base64(image_path)
if not img_data:
print("圖片無法轉(zhuǎn)換為 Base64,檢測失敗")
return
# 構(gòu)造請求頭
headers = {
"Content-Type": "application/json",
"X-Auth-Token": token
}
# 構(gòu)造請求體
payload = {
"image_base64": img_data,
"attributes": "1,2,4,6,7,8" # 自定義返回字段
}
# 發(fā)送 POST 請求
try:
response = requests.post(request_url, headers=headers, data=json.dumps(payload))
# 打印狀態(tài)碼
print(f"狀態(tài)碼: {response.status_code}")
# 解析和打印返回結(jié)果
if response.status_code == 200:
print("人臉檢測成功,結(jié)果如下:")
print(json.dumps(response.json(), indent=4, ensure_ascii=False))
else:
print(f"人臉檢測失敗: {response.text}")
except Exception as e:
print(f"請求發(fā)生錯誤: {e}")
def main():
# 圖片路徑,替換為你要檢測的圖片路徑
image_path = "/home/developer/image/1.jpeg"
# 執(zhí)行人臉檢測
face_detect(image_path)
if __name__ == "__main__":
main()
代碼說明:
(1) 依賴庫 :
- 使用
requests
進行 HTTP 請求。 - 使用
base64
將圖片轉(zhuǎn)換為 Base64 編碼。 - 確保安裝了依賴庫:pip install requests
(2) 主要邏輯 :
- 讀取 TOKEN :從
token.txt
文件中讀取 TOKEN。 - 圖片編碼 :將輸入圖片文件轉(zhuǎn)為 Base64 格式。
- 構(gòu)造請求 :設(shè)置請求頭和請求體,指定自定義返回字段。
- 發(fā)送請求 :調(diào)用 API 完成人臉檢測,打印響應結(jié)果。
(3) 錯誤處理 :捕獲文件讀取、圖片編碼以及 HTTP 請求的異常,方便排查問題。
(4) 運行方式 :
- 將代碼保存為
face_detect.py
。 - 替換
image_path
為本地圖片的實際路徑。 - 運行代碼:
python face_detect.py
(5) 輸出 :
- 成功時,打印 API 返回的 JSON 數(shù)據(jù)。
- 失敗時,打印錯誤狀態(tài)碼及返回信息。
【6】終端運行測試
也可以直接在終端運行,更加方便。 代碼編寫完畢,點擊右上角的綠色三角形
按鈕,運行。
當前調(diào)用測試的圖片是:
接口返回的結(jié)果:
{
"faces": [
{
"bounding_box": {
"width": 150,
"top_left_y": 431,
"top_left_x": 192,
"height": 182
},
"attributes": {
"gender": "female",
"age": 25,
"dress": {
"glass": "none",
"hat": "none"
},
"mask": "none",
"hair": "long",
"beard": "none"
}
},
{
"bounding_box": {
"width": 148,
"top_left_y": 428,
"top_left_x": 358,
"height": 188
},
"attributes": {
"gender": "female",
"age": 26,
"dress": {
"glass": "none",
"hat": "none"
},
"mask": "none",
"hair": "long",
"beard": "none"
}
}
]
}
JSON數(shù)據(jù)表示的含義如下:
- 檢測到了兩張人臉。
- 第一張人臉 :
- 位置:左上角坐標(192, 431),寬度150像素,高度182像素。
- 屬性:女性,年齡25歲,未戴眼鏡和帽子,長發(fā),無胡須,未戴口罩。
- 第二張人臉 :
- 位置:左上角坐標(358, 428),寬度148像素,高度188像素。
- 屬性:女性,年齡26歲,未戴眼鏡和帽子,長發(fā),無胡須,未戴口罩。
這些信息提供了每張人臉的位置以及一些基本屬性如性別、年齡、是否佩戴眼鏡或帽子等。
到此,接口就已經(jīng)調(diào)用成功了。從返回的
3.7 創(chuàng)建人臉庫
【1】人臉庫的作用
如果我們要做考勤系統(tǒng),簽到系統(tǒng),那么設(shè)計之前需要創(chuàng)建人臉庫,錄入每個人員的人臉信息,才可以設(shè)計后面的考勤,簽到的人臉對比識別功能。
【2】接口地址
創(chuàng)建人臉庫的幫助文檔地址: https://support.huaweicloud.com/api-face/face_02_0088.html
繼續(xù)向下翻,可以看到接口地址
和請求參數(shù)
的說明。
接口地址: https://face.cn-north-4.myhuaweicloud.com/v2/{project_id}/face-sets
【3】請求參數(shù)
參數(shù) | 描述 |
---|---|
X-Auth-Token | 用戶Token。 |
Content-Type | 參數(shù)值為application/json |
參數(shù) | 描述 |
---|---|
external_fields | 用戶自定義數(shù)據(jù),自定義字段不能以vector、bounding_box、external_image_id、face_id、create_time、_id、_all、_source等字段命名,這些字段為內(nèi)置字段,自定義字段避免使用。自定義字段的key值長度范圍為[1,36],string類型的value長度范圍為[1,256]。如果在后續(xù)操作中,使用該自定義字段向人臉庫中添加人臉,需要在創(chuàng)建人臉庫時定義該字段。 |
face_set_name | 人臉庫的名稱,字符串長度1-64。建議人臉庫的名稱不要以下劃線(_)開頭,否則云監(jiān)控服務會無法采集人臉數(shù)量。 |
face_set_capacity | 人臉庫最大的容量,填寫1萬整數(shù)倍的數(shù)字,例如:30000。默認為100000,最大值為100000,可通過創(chuàng)建新的人臉庫進行擴容,每個用戶可使用10個人臉庫,每個人臉庫容量為10萬個人臉特征。如需擴容單個人臉庫規(guī)模,請聯(lián)系華為云客服確認擴容規(guī)模與價格。 |
參數(shù) | 描述 |
---|---|
type | 數(shù)據(jù)類型支持string、integer、double、long等。 |
【4】響應參數(shù)
正常情況下,返回的狀態(tài)碼:200
參數(shù) | 描述 |
---|---|
face_number | 人臉庫中已有的人臉特征的數(shù)量。 |
external_fields | 用戶的自定義字段。 |
face_set_id | 人臉庫ID,隨機生成的包含八個字符的字符串。 |
face_set_name | 人臉庫名稱。 |
create_date | 創(chuàng)建時間。 |
face_set_capacity | 人臉庫最大的容量。創(chuàng)建人臉庫時,請求參數(shù)如果不設(shè)置face_set_capacity參數(shù),默認每個人臉庫最大容量為10萬個人臉特征。 |
【5】編寫代碼
創(chuàng)建一個新文件名字為:face-sets.py
編寫代碼:
import requests
# 項目ID和服務器區(qū)域代號
PROJECT_ID = "填你自己的"
SERVER_ID = "cn-north-4"
# 從當前目錄下的token.txt文件讀取Token
with open('token.txt', 'r') as file:
Token = file.read().strip()
def create_face_database(face_lib_name):
# 設(shè)置請求地址
url = f"https://face.{SERVER_ID}.myhuaweicloud.com/v2/{PROJECT_ID}/face-sets"
# 構(gòu)造請求頭
headers = {
"Content-Type": "application/json",
"X-Auth-Token": Token
}
# 構(gòu)造請求體
payload = {
"external_fields": {
"face_name": {"type": "string"},
"face_phone": {"type": "string"},
"face_class": {"type": "string"}
},
"face_set_name": face_lib_name
}
# 發(fā)送POST請求
response = requests.post(url, json=payload, headers=headers)
# 輸出響應狀態(tài)碼及內(nèi)容
print(f"Status Code: {response.status_code}")
print(f"Response: {response.json()}")
# 調(diào)用函數(shù)創(chuàng)建人臉庫
create_face_database("face_1")
運行代碼的時候,要修改最前面的項目ID參數(shù),和最后創(chuàng)建的人臉庫名稱。 代碼從本地文件token.txt
中讀取認證Token。記得在運行此腳本之前檢查token.txt
文件是否存在且包含有效的Token值(最前面已經(jīng)說了怎么得到這個Token值)。
【6】終端運行代碼測試
返回的結(jié)果如下:
Response: {'face_set_info': {'face_number': 0, 'face_set_id': 'tKzQuUW4', 'face_set_name': 'face_1', 'create_date': '2024-11-28 08:41:49', 'face_set_capacity': 100000, 'external_fields': {'face_name': {'type': 'string'}, 'face_phone': {'type': 'string'}, 'face_class': {'type': 'string'}}}}
根據(jù)返回的JSON響應數(shù)據(jù)以及華為云人臉識別服務FRS的文檔說明,下面是JSON數(shù)據(jù)信息的總結(jié):
face_set_info :包含了創(chuàng)建的人臉庫的具體信息。
- face_number :人臉庫中已有的人臉特征數(shù)量。當前值為0,表示剛剛創(chuàng)建的人臉庫還沒有添加任何人臉特征。
- face_set_id :人臉庫的唯一標識符,隨機生成的字符串。這里的ID是
tKzQuUW4
。 - face_set_name :用戶指定的人臉庫名稱。這里命名為
face_1
。 - create_date :人臉庫的創(chuàng)建時間。這里是
2024-11-28 08:41:49
(UTC+08:00)。 - face_set_capacity :人臉庫的最大容量。默認情況下為100,000個人臉特征,這里顯示的也是100,000。
- external_fields :用戶自定義字段的信息。
- face_name :類型為
string
,用于存儲人臉名稱。 - face_phone :類型為
string
,用于存儲電話號碼。 - face_class :類型為
string
,用于存儲人臉分類信息。
- face_name :類型為
JSON響應表明成功創(chuàng)建了一個名為face_1
的人臉庫,該庫的ID是tKzQuUW4
,創(chuàng)建于2024年11月28日08:41:49,并且設(shè)置了三個自定義字段(face_name
、face_phone
和face_class
),每個字段的類型都是string
。目前該人臉庫尚未添加任何人臉特征。
3.8 向人臉庫添加人臉
【1】接口地址
幫助文檔:https://support.huaweicloud.com/api-face/face_02_0093.html
接口地址: https://face.cn-north-4.myhuaweicloud.com/v2/{project_id}/face-sets/{face_set_name}/faces
參數(shù) | 參數(shù)類型 | 描述 |
---|---|---|
project_id | String | 項目ID |
face_set_name | String | 人臉庫名稱,字符串長度1-64。 |
【2】請求參數(shù)
參數(shù) | 是否必選 | 參數(shù)類型 | 描述 |
---|---|---|---|
X-Auth-Token | 是 | String | 用戶Token。 |
Content-Type | 是 | String | 發(fā)送的實體的MIME類型,參數(shù)值為“application/json”。 |
參數(shù)名 | 參數(shù)類型 | 說明 |
---|---|---|
image_base64 | String | 圖像數(shù)據(jù),Base64編碼,要求:Base64編碼后大小不超過8MB,建議小于1MB。圖片為JPG/JPEG/BMP/PNG格式。 |
external_image_id | String | 用戶指定的圖片外部ID,與當前圖像綁定。用戶沒提供,系統(tǒng)會生成一個。該ID長度范圍為1~36位,可以包含字母、數(shù)字、中劃線或者下劃線,不包含其他的特殊字符。 |
external_fields | Object | 根據(jù)用戶自定義數(shù)據(jù)類型,填入相應的數(shù)值。需在創(chuàng)建人臉庫時定義external_fields字段,才可以在添加人臉時使用該字段。 |
single | boolean | 是否將圖片中的最大人臉添加至人臉庫??蛇x值包括:true:傳入的單張圖片中如果包含多張人臉,則只將最大人臉添加到人臉庫中。false:默認為false。傳入的單張圖片中如果包含多張人臉,則將所有人臉添加至人臉庫中。 |
【3】響應參數(shù)
狀態(tài)碼:200
參數(shù) | 描述 |
---|---|
face_set_id | 人臉庫ID。 調(diào)用失敗時無此字段。 |
face_set_name | 人臉庫名稱。 調(diào)用失敗時無此字段。 |
faces | 調(diào)用失敗時無此字段。 |
【4】編寫代碼
創(chuàng)建新文件:face-sets_lib.py
編寫代碼如下:
import requests
import base64
import io
# 項目ID和服務器區(qū)域代號
PROJECT_ID = "填你自己的"
SERVER_ID = "cn-north-4"
# 從當前目錄下的token.txt文件讀取Token
with open('token.txt', 'r') as file:
Token = file.read().strip()
def to_base64(image_path):
"""將圖片轉(zhuǎn)換為Base64編碼的字符串"""
with open(image_path, 'rb') as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
def register_face(image_path, face_lib, name):
# 讀取圖片并進行Base64編碼
img_data = to_base64(image_path)
# 設(shè)置請求地址
url = f"https://face.{SERVER_ID}.myhuaweicloud.com/v2/{PROJECT_ID}/face-sets/{face_lib}/faces"
# 構(gòu)造請求頭
headers = {
"Content-Type": "application/json",
"X-Auth-Token": Token
}
# 構(gòu)造請求體
payload = {
"image_base64": img_data,
"external_fields": {"face_name": name},
"single": True
}
# 發(fā)送POST請求
response = requests.post(url, json=payload, headers=headers)
# 輸出響應狀態(tài)碼及內(nèi)容
print(f"Status Code: {response.status_code}")
print(f"Response: {response.json()}")
# 調(diào)用函數(shù)注冊人臉
register_face("/home/developer/image/1.jpeg", "face_1", "xiaolong")
運行代碼時,替換"face_1"
和"xiaolong"
為你實際的人臉庫名稱和自定義字段值。代碼從本地文件token.txt
中讀取認證Token,并從指定路徑讀取圖片進行Base64編碼。
【5】終端運行測試
返回的結(jié)果如下:
Response: {'face_set_id': 'tKzQuUW4', 'face_set_name': 'face_1', 'faces': [{'face_id': '1cOqkdyg', 'external_image_id': 'JAHIqXTA', 'bounding_box': {'width': 148, 'top_left_x': 358, 'top_left_y': 428, 'height': 188}, 'external_fields': {'face_name': 'xiaolong'}}]}
Response: {'face_set_id': 'tKzQuUW4', 'face_set_name': 'face_1', 'faces': [{'face_id': '1cOqkdyg', 'external_image_id': 'JAHIqXTA', 'bounding_box': {'width': 148, 'top_left_x': 358, 'top_left_y': 428, 'height': 188}, 'external_fields': {'face_name': 'xiaolong'}}]}
Response: {'face_set_id': 'tKzQuUW4', 'face_set_name': 'face_1', 'faces': [{'face_id': '1cOqkdyg', 'external_image_id': 'JAHIqXTA', 'bounding_box': {'width': 148, 'top_left_x': 358, 'top_left_y': 428, 'height': 188}, 'external_fields': {'face_name': 'xiaolong'}}]}
Response: {'face_set_id': 'tKzQuUW4', 'face_set_name': 'face_1', 'faces': [{'face_id': '1cOqkdyg', 'external_image_id': 'JAHIqXTA', 'bounding_box': {'width': 148, 'top_left_x': 358, 'top_left_y': 428, 'height': 188}, 'external_fields': {'face_name': 'xiaolong'}}]}
根據(jù)返回的JSON響應數(shù)據(jù)以及華為云人臉識別服務FRS的文檔,以下是JSON數(shù)據(jù)信息的總結(jié):
- face_set_id :人臉庫的唯一標識符。這里的ID是
tKzQuUW4
。 - face_set_name :人臉庫的名稱。這里是
face_1
。 - faces :一個數(shù)組,包含了成功添加到人臉庫中的人臉信息。
- face_id :系統(tǒng)生成的唯一標識符,用于標識該人臉。這里的ID是
1cOqkdyg
。 - external_image_id :用戶指定的圖片外部ID,與當前圖像綁定。這里的ID是
JAHIqXTA
。 - bounding_box :描述了人臉在圖像中的位置。
- width :矩形框的寬度。這里是148像素。
- top_left_x :矩形框左上角的橫坐標。這里是358像素。
- top_left_y :矩形框左上角的縱坐標。這里是428像素。
- height :矩形框的高度。這里是188像素。
- external_fields :用戶自定義字段的信息。
- face_name :自定義字段
face_name
的值,這里是xiaolong
。
- face_name :自定義字段
- face_id :系統(tǒng)生成的唯一標識符,用于標識該人臉。這里的ID是
這個JSON響應表明成功將一張包含人臉的圖片添加到了名為face_1
的人臉庫中。人臉庫的ID是tKzQuUW4
。添加的人臉具有以下特征:
- 人臉I(yè)D為
1cOqkdyg
。 - 圖片外部ID為
JAHIqXTA
。 - 人臉在圖片中的位置由矩形框表示,寬度為148像素,高度為188像素,左上角坐標為(358, 428)。
- 自定義字段
face_name
的值為xiaolong
。
3.9 從人臉庫匹配人臉
【1】功能說明
人臉搜索是指在已有的人臉庫中,查詢與目標人臉相似的一張或者多張人臉,并返回相應的置信度。如果圖片中包含多個人臉,選取圖片中檢測到的最大尺寸人臉作為檢索的輸入。 支持傳入圖片或者faceID進行人臉搜索。
【2】幫助文檔
地址:https://support.huaweicloud.com/api-face/face_02_0086.html
【3】接口地址
https://face.cn-north-4.myhuaweicloud.com/v2/{project_id}/face-sets/{face_set_name}/search
參數(shù) | 參數(shù)類型 | 描述 |
---|---|---|
project_id | String | 項目ID |
face_set_name | String | 人臉庫名稱,字符串長度1-64。 |
【4】請求參數(shù)
參數(shù) | 是否必選 | 參數(shù)類型 | 描述 |
---|---|---|---|
X-Auth-Token | 是 | String | 用戶Token。 |
Content-Type | 是 | String | 發(fā)送的實體的MIME類型,參數(shù)值為“application/json”。 |
參數(shù)名 | 說明 |
---|---|
image_base64 | 圖像數(shù)據(jù),Base64編碼,要求:Base64編碼后大小不超過8MB,建議小于1MB。圖片為JPG/JPEG/BMP/PNG格式。 |
face_id | 導入人臉時,系統(tǒng)返回的人臉編號,即人臉I(yè)D。 |
top_n | 返回查詢到的最相似的N張人臉,N默認為10,取值范圍[0,1000]。N張人臉按照置信度降序排序,置信度越大越靠前。 |
threshold | 人臉相似度閾值,低于這個閾值則不返回,取值范圍[0,1],一般情況下建議取值0.93,默認為0。 |
sort | 支持字段排序 |
filter | 過濾條件 |
return_fields | 指定返回的自定義字段。 |
【5】響應參數(shù)
狀態(tài)碼:200
參數(shù) | 參數(shù)類型 | 描述 |
---|---|---|
faces | Array of SearchFace objects | 查找的人臉集合。 調(diào)用失敗時無此字段。 |
參數(shù) | 參數(shù)類型 | 描述 |
---|---|---|
bounding_box | BoundingBox object | 人臉在圖像中的位置。 |
similarity | Double | 人臉搜索時用于被檢索的相似度。 |
external_fields | Object | 用戶添加的額外自定義字段。 |
external_image_id | String | 人臉所在的外部圖片ID。 |
face_id | String | 人臉I(yè)D,由系統(tǒng)內(nèi)部生成的唯一ID。 |
參數(shù) | 參數(shù)類型 | 描述 |
---|---|---|
width | Integer | 矩形框?qū)挾取?/td> |
top_left_y | Integer | 矩形框左上角縱坐標。 |
top_left_x | Integer | 矩形框左上角橫坐標。 |
height | Integer | 矩形框高度。 |
【6】編寫代碼
新建文件。face-sets_search.py
代碼編寫如下:
import base64
import requests
import io
# 項目ID
PROJECT_ID = "填你自己的"
# 服務器區(qū)域代號
SERVER_ID = "cn-north-4"
# 從當前目錄下的token.txt文件中讀取Token
with open('token.txt', 'r') as file:
TOKEN = file.read().strip()
def image_to_base64(image_path):
"""
將圖片轉(zhuǎn)換為 Base64 編碼
"""
try:
with open(image_path, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
return encoded_string
except Exception as e:
print(f"圖片編碼為 Base64 時發(fā)生錯誤: {e}")
return None
def to_base64(image):
"""將圖片轉(zhuǎn)換為Base64編碼"""
buffered = io.BytesIO()
image.save(buffered, format="JPEG")
img_str = base64.b64encode(buffered.getvalue()).decode('utf-8')
return img_str
def find_face(image_path, face_lib, threshold=0.93):
# 將圖片轉(zhuǎn)換為 Base64 編碼
img_data = image_to_base64(image_path)
if not img_data:
print("圖片無法轉(zhuǎn)換為 Base64,檢測失敗")
return
# 設(shè)置請求地址
request_url = f"https://face.{SERVER_ID}.myhuaweicloud.com/v2/{PROJECT_ID}/face-sets/{face_lib}/search"
# 設(shè)置數(shù)據(jù)提交格式及請求頭
headers = {
"Content-Type": "application/json",
"X-Auth-Token": TOKEN
}
# 構(gòu)造請求體
payload = {
"image_base64": img_data,
"return_fields": ["face_name"],
"threshold": threshold
}
# 發(fā)送POST請求
response = requests.post(request_url, json=payload, headers=headers)
# 檢查響應狀態(tài)碼
if response.status_code == 200:
print("人臉搜索成功:", response.json())
else:
print("人臉搜索失敗:", response.status_code, response.text)
# 調(diào)用函數(shù)
find_face("/home/developer/image/1.jpeg", "face_1")
替換'/home/developer/image/1.jpeg'
和'face_1'
為實際的圖片路徑和人臉庫名稱。確保在調(diào)用此腳本之前,已正確配置好token.txt
文件,并且該文件位于與腳本相同的目錄下 [前面說了這個token怎么來的]。
【7】終端運行代碼測試
返回的結(jié)果如下:
人臉搜索成功: {'faces': [{'face_id': '1cOqkdyg', 'external_image_id': 'JAHIqXTA', 'bounding_box': {'width': 148, 'top_left_x': 358, 'top_left_y': 428, 'height': 188}, 'external_fields': {'face_name': 'xiaolong'}, 'similarity': 1.0}]}
根據(jù)返回的JSON響應數(shù)據(jù)以及華為云人臉識別服務FRS的文檔,以下是JSON數(shù)據(jù)信息的總結(jié):
- faces :一個數(shù)組,包含了搜索到的人臉信息。
- face_id :系統(tǒng)生成的唯一標識符,用于標識該人臉。這里的ID是
1cOqkdyg
。 - external_image_id :用戶指定的圖片外部ID,與當前圖像綁定。這里的ID是
JAHIqXTA
。 - bounding_box :描述了人臉在圖像中的位置。
- width :矩形框的寬度。這里是148像素。
- top_left_x :矩形框左上角的橫坐標。這里是358像素。
- top_left_y :矩形框左上角的縱坐標。這里是428像素。
- height :矩形框的高度。這里是188像素。
- external_fields :用戶自定義字段的信息。
- face_name :自定義字段
face_name
的值,這里是xiaolong
。
- face_name :自定義字段
- similarity :人臉搜索時的相似度分數(shù)。這里的值為1.0,表示完全匹配。
- face_id :系統(tǒng)生成的唯一標識符,用于標識該人臉。這里的ID是
這個JSON響應表明成功搜索到了一張人臉,并且該人臉與人臉庫中的一張人臉完全匹配。
- 人臉I(yè)D為
1cOqkdyg
。 - 圖片外部ID為
JAHIqXTA
。 - 人臉在圖片中的位置由矩形框表示,寬度為148像素,高度為188像素,左上角坐標為(358, 428)。
- 自定義字段
face_name
的值為xiaolong
。 - 相似度分數(shù)為1.0,表示完全匹配。
四、圖形化項目開發(fā)
4.1 安裝Tkinter庫
為了方便能直觀的展示項目的整體功能,接下來安裝 Tkinter ,完成人臉識別系列功能的設(shè)計。
在Python中, Tkinter用于創(chuàng)建圖形用戶界面(GUI)。這是Python的標準GUI庫。
下面是安裝方法:
4.2 測試Tkinter環(huán)境
創(chuàng)建一個新的文件。
編寫代碼:
import tkinter as tk # 導入 Tkinter 模塊
# 創(chuàng)建主窗口
window = tk.Tk()
# 設(shè)置窗口標題
window.title("Hello Tkinter")
# 設(shè)置窗口大?。▽?x 高)
window.geometry("400x300")
# 顯示窗口并進入事件循環(huán)
window.mainloop()
運行效果如下:
代碼解析
(1)導入 Tkinter
import tkinter as tk
tkinter
是 Python 的標準庫模塊,用于創(chuàng)建和管理 GUI 界面。
(2)創(chuàng)建主窗口
window = tk.Tk()
Tk()
方法創(chuàng)建了一個主窗口對象,稱為“頂級窗口”。
(3)設(shè)置窗口標題
window.title("Hello Tkinter")
title()
方法用來設(shè)置窗口標題。
(4)設(shè)置窗口大小
window.geometry("400x300")
geometry()
方法用來設(shè)置窗口的尺寸,這里是寬400像素,高300像素。
(5)運行窗口
window.mainloop()
mainloop()
方法啟動窗口的事件循環(huán),程序會在這里等待用戶的操作(例如關(guān)閉窗口或點擊按鈕)。
4.3 設(shè)計界面
編寫代碼如下:
import tkinter as tk
from tkinter import filedialog, messagebox
# 全局變量,保存當前載入的圖片路徑
current_image_path = None
# 創(chuàng)建主窗口
window = tk.Tk()
window.title("人臉識別服務工具")
window.geometry("600x400") # 增大窗口尺寸以顯示圖片
# 圖片顯示標簽
image_label = tk.Label(window, text="圖片顯示區(qū)域", width=50, height=20, relief="solid")
image_label.pack(pady=10)
# 定義功能函數(shù)
def load_image():
global current_image_path
file_path = filedialog.askopenfilename(
title="選擇圖片文件",
filetypes=[("圖片文件", "*.jpg *.jpeg *.png *.bmp")]
)
if file_path:
current_image_path = file_path
display_image(file_path)
def display_image(file_path):
try:
img = Image.open(file_path)
img = img.resize((300, 300)) # 調(diào)整圖片尺寸
img_tk = ImageTk.PhotoImage(img)
image_label.config(image=img_tk, text="") # 顯示圖片,清除文本
image_label.image = img_tk # 防止垃圾回收
except Exception as e:
messagebox.showerror("錯誤", f"無法載入圖片:{e}")
def face_detection():
if not current_image_path:
messagebox.showwarning("提示", "請先載入圖片!")
return
messagebox.showinfo("功能提示", f"人臉檢測功能待實現(xiàn)!當前圖片路徑:{current_image_path}")
def create_face_library():
messagebox.showinfo("功能提示", "創(chuàng)建人臉庫功能待實現(xiàn)!")
def add_face_to_library():
if not current_image_path:
messagebox.showwarning("提示", "請先載入圖片!")
return
messagebox.showinfo("功能提示", f"向人臉庫添加人臉功能待實現(xiàn)!當前圖片路徑:{current_image_path}")
def search_face():
if not current_image_path:
messagebox.showwarning("提示", "請先載入圖片!")
return
messagebox.showinfo("功能提示", f"搜索匹配人臉功能待實現(xiàn)!當前圖片路徑:{current_image_path}")
# 創(chuàng)建按鈕
btn_load_image = tk.Button(window, text="載入圖片", command=load_image, width=20)
btn_face_detection = tk.Button(window, text="人臉檢測", command=face_detection, width=20)
btn_create_library = tk.Button(window, text="創(chuàng)建人臉庫", command=create_face_library, width=20)
btn_add_face = tk.Button(window, text="添加人臉到庫", command=add_face_to_library, width=20)
btn_search_face = tk.Button(window, text="搜索匹配人臉", command=search_face, width=20)
# 布局按鈕
btn_load_image.pack(pady=5)
btn_face_detection.pack(pady=5)
btn_create_library.pack(pady=5)
btn_add_face.pack(pady=5)
btn_search_face.pack(pady=5)
# 運行主事件循環(huán)
window.mainloop()
運行界面如下:
五、總結(jié)
華為云人臉識別服務(FRS)及其開發(fā)者空間云主機為開發(fā)者提供了一個功能強的開發(fā)平臺,使得人臉識別技術(shù)的應用和實現(xiàn)變得更加簡單和便捷。通過調(diào)用開放的API接口,開發(fā)者可以輕松實現(xiàn)人臉檢測、人臉庫管理、人臉對比等關(guān)鍵功能,為考勤、簽到、門禁等場景提供智能化解決方案。
開發(fā)者空間云主機為用戶提供了預配置的云端開發(fā)環(huán)境,避免了繁瑣的本地配置過程,快速上手成為可能。結(jié)合CodeArts IDE以及預裝的開發(fā)工具鏈,開發(fā)者能夠?qū)W⒂诤诵拈_發(fā)任務,提升效率。借助華為云豐富的資源,如云存儲、沙箱測試環(huán)境、技術(shù)培訓課程等,開發(fā)者不僅能快速驗證創(chuàng)意,還能通過學習和認證不斷提升技能。
此外,華為云開發(fā)者空間云主機深度整合了鯤鵬、昇騰和鴻蒙等生態(tài)資源,助力開發(fā)者在廣泛的技術(shù)領(lǐng)域展開創(chuàng)新,并與全球開發(fā)者社區(qū)互動交流,共同推動技術(shù)進步。這一平臺為云端開發(fā)提供了全面支持,涵蓋從開發(fā)到運維的全周期服務,是開發(fā)者實現(xiàn)技術(shù)突破和項目落地的重要助力。
審核編輯 黃宇
-
嵌入式
+關(guān)注
關(guān)注
5087文章
19145瀏覽量
306134 -
華為云
+關(guān)注
關(guān)注
3文章
2607瀏覽量
17478
發(fā)布評論請先 登錄
相關(guān)推薦
評論