1. 程式人生 > >基於python3,百度AI實現人臉檢測,人臉識別

基於python3,百度AI實現人臉檢測,人臉識別

我感覺百度是BAT三家裡面AI能力最強的了,在影象和語音的處理上面是很強的,很全面。百度AI裡面功能齊全,提供的語言也是很多。唯一不太好的是目前對python3不是很支援,還是支援python2。但也不表示python3做不了。

一下是程式碼

import urllib3,base64
from urllib.parse import urlencode
import json
import cv2
import time
t1=time.time()
access_token='yous access_token'
http=urllib3.PoolManager()
url='https://aip.baidubce.com/rest/2.0/face/v2/detect?access_token='+access_token
#2張圖片
filepath='yiqi.jpg'
f1 = open(filepath,'rb')
frame=cv2.imread(filepath)
#引數images:影象base64編碼 分別base64編碼後的2張圖片資料,需urlencode,半形逗號分隔,單次請求最大不超過20M
img1 = base64.b64encode(f1.read())

#這一步和官方示例程式碼不一樣。具體為什麼就不知道了。裡面有json bytes str 型別關係
#這裡直接拼接提示byte相關。然後就直接轉str拼接了
params = {"images":str(img1,'utf-8'),"max_face_num":10}
#對base64資料進行urlencode處理
params=urlencode(params)
request=http.request('POST',
                      url,
                      body=params,
                      headers={'Content-Type':'application/x-www-form-urlencoded'})
#對返回的byte位元組進行處理。Python3輸出位串,而不是可讀的字串,需要進行轉換

print(json.loads(request.data))  # request.data 返回有關的資訊但是是json型別  然後使用json.loads 進行轉換轉成python支援的dict
result = json.loads(request.data)['result']  #分析返回的資料 找到有用的資訊拿出來 我們這裡是要拿出來人臉座標
print(result)
face_num=json.loads(request.data)['result_num']  #獲取到圖片中人臉的個數

for i in range(face_num):  #使用遍歷把所有的人臉都標出框

    location=result[i]['location']  #獲取到人臉的座標
    print(location)   #輸出人臉座標 left location是左上角座標  width 寬度height高度
    cv2.rectangle(frame, (location['left'], location['top']), (location['width']+location['left'], location['height']+location['top']), (0, 0, 255), 2) #opencv的標框函式

cv2.imshow('tuxiang',frame)
cv2.waitKey(1)  #重新整理介面 不然只會呈現灰色
print('執行時間是{}'.format(time.time()-t1))
time.sleep(5)  #暫停五秒  展示圖片

執行結果

執行時間  1.7899997234344482 (受網速影響)

 

裡面的access_token我沒有每次都申請,嫌麻煩,如果有需要可以再加上那個函式。我覺得是不怎麼需要。官方給的api文件和例項程式碼一直執行出錯,json和str 以及bytes三種格式 報錯。

跟python版本有關係,百度ai目前還不支援python3,給的例項程式碼也是python2的,但是python3是大勢所趨很多人都在用,所以還是使用python3來跑。

主要是傳送連結主體那格式 圖片的格式需要轉換下,其他地方看官方api文件就行。

把人臉檢測跑通,人臉識別就不遠了,改下url,看api文件上傳兩張照片再分析返回的資料就可以了。

人臉檢測和人臉識別的程式碼在github上 https://github.com/niehen6174/face_detection_and_recognition

如有問題,或有什麼建議可加群:894243022或發郵箱[email protected] 

使用本文章或程式碼還請宣告。