基於python3,百度AI實現人臉檢測,人臉識別
阿新 • • 發佈:2018-12-03
我感覺百度是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]
使用本文章或程式碼還請宣告。