百度AI圖像處理(V3版本)—人臉識別(人臉檢測)調用教程(基於Python3-附Demo)

首先來看一下識別的效果:這裏需要完整代碼以及SDK的請點擊此處下載:百度人臉識別-人臉檢測

首先需要註冊百度賬號並且創建對應的應用,這裏具體方法如圖:

訪問:http://ai.baidu.com/  點擊控制檯

登錄後創建應用:

  此處注意:圖像處理中的各項功能共用的是一個SDK包,只是不同功能實現的時候使用的函數以及返回參數不同,點擊完創建應用後就可以生成三個我們後期識別過程中必須使用的參數:AppID,API Key和secert key,這裏我們可以點擊查看應用詳情來獲取

 在這裏,我們首先需要通過API Key和Secret Key來獲取access_token,這裏具體的代碼爲:

import urllib, urllib2, sys
import ssl

# client_id 爲官網獲取的AK, client_secret 爲官網獲取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=【官網獲取的AK】&client_secret=【官網獲取的SK】'
request = urllib2.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib2.urlopen(request)
content = response.read()
if (content):
    print(content)

注意:這裏很多讀者會填寫錯AK(API Key)和SK(Secret Key),host填寫完成後應該是這樣的:

https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_secret=0rDSjzQ20XUj5itV6WRtznPQSzr5pVw2&

然後,我們運行程序就可以獲得返回值,返回值中的access_token就是我們需要獲取的值了,這個值在後面實際進行人臉檢測的時候需要用到:

 完成上述步驟之後,我們就可以進行實際的人臉操作過程了,首先貼上官方SDK給的代碼(這些代碼僅供參考,因爲很多不符合Python3的標準,通知沒有圖片base64編碼的過程),主要是讓大家看一看一些官方的參數:

# encoding:utf-8
import urllib
import urllib2

'''
人臉檢測與屬性分析
'''

request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"


params = "{\"image\":\"027d8308a2ec665acb1bdf63e513bcb9\",\"image_type\":\"FACE_TOKEN\",\"face_field\":\"faceshape,facetype\"}"

access_token = '[調用鑑權接口獲取的token]'
request_url = request_url + "?access_token=" + access_token
request = urllib2.Request(url=request_url, data=params)
request.add_header('Content-Type', 'application/json')
response = urllib2.urlopen(request)
content = response.read()
if content:
    print content

這裏,具體參數有:

參數 必選 類型 說明
image string 圖片信息(總數據大小應小於10M),圖片上傳方式根據image_type來判斷
image_type string 圖片類型
BASE64:圖片的base64值,base64編碼後的圖片數據,編碼後的圖片大小不超過2M;
URL:圖片的 URL地址( 可能由於網絡等原因導致下載圖片時間過長);
FACE_TOKEN: 人臉圖片的唯一標識,調用人臉檢測接口時,會爲每個人臉圖片賦予一個唯一的FACE_TOKEN,同一張圖片多次檢測得到的FACE_TOKEN是同一個。
face_field string 包括age,beauty,expression,face_shape,gender,glasses,landmark,race,quality,eye_status,emotion,face_type信息
逗號分隔. 默認只返回face_token、人臉框、概率和旋轉角度
max_face_num uint32 最多處理人臉的數目,默認值爲1,僅檢測圖片中面積最大的那個人臉;最大值10,檢測圖片中面積最大的幾張人臉。
face_type string 人臉的類型
LIVE表示生活照:通常爲手機、相機拍攝的人像圖片、或從網絡獲取的人像圖片等
IDCARD表示身份證芯片照:二代身份證內置芯片中的人像照片
WATERMARK表示帶水印證件照:一般爲帶水印的小圖,如公安網小圖
CERT表示證件照片:如拍攝的身份證、工卡、護照、學生證等證件圖片
默認LIVE

 我們在實際使用上可以根據我們的需要來調整參數,這裏博主不再贅述,接下來附上博主的源碼,相對於官方源碼,主要進行了以下幾個方面的改進:

1、符合Python3標準,修正了一些語句,比如import urllib2

2、增加了圖片的base64編碼,可以直接讀取本地圖片並進行編碼

3、使用openCV框選人臉並對72個關鍵點進行描點,以方便直觀的查看

具體代碼如下:

# encoding:utf-8
import urllib.request
import cv2
import ast
import base64
import urllib.parse
from urllib.parse import urlencode

'''
人臉檢測與屬性分析
'''
#openCV導入圖片
filename = 'test.png'
img = cv2.imread(filename)
#對圖片進行base64編碼
f = open(filename,'rb')
img_test = base64.b64encode(f.read())
#請求地址
request_url = "https://aip.baidubce.com/rest/2.0/face/v3/detect"
#請求參數
params={'image':''+str(img_test,'utf-8')+'','image_type':'BASE64','face_field':'age,beauty,faceshape,gender,glasses,landmark'}
#對base64數據進行urlencode處理
params=urlencode(params)
#生成的access_token
access_token = '這裏需要你自己填'
request_url = request_url + "?access_token=" + access_token
request = urllib.request.Request(url=request_url,data=params.encode("utf-8"))
request.add_header('Content-Type', 'application/json')
response = urllib.request.urlopen(request)
content = response.read()
if content:
    print(content)
content = content.decode("utf-8")
content = ast.literal_eval(content)
#描繪72個特徵點部分
test_pic=content['result']['face_list'][0]['landmark72']
for x in test_pic:
    cv2.circle(img, (int(x['x']),int(x['y'])), 1, (255, 255, 0), 0,8)
#人臉框選部分
left_top = (int(content['result']['face_list'][0]['location']['left']), int(content['result']['face_list'][0]['location']['top']))
right_bottom = (int(left_top[0] + content['result']['face_list'][0]['location']['width']),int(left_top[1] + content['result']['face_list'][0]['location']['height']))
cv2.rectangle(img, left_top, right_bottom, (0, 0, 255), 2)
cv2.imshow('img', img)
cv2.waitKey(0)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章