程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

【Python應用探索筆記一】百度人臉檢測與人臉比對

編輯:Python

百度在線SDK

百度的AI開放平台提供了很多的功能。其中包括了人臉檢測、人臉比對、人臉搜索等。可以說得上功能比較強大了。

下面打算用python搞一下,實現人臉的檢測與比對。
首先我們需要注冊一個賬號,然後建立一個應用並下載Python的SDK。
下載了SDK之後,使用命令行窗口到解壓後的SDK目錄下,用python setup.py install安裝。
之後就可以使用相關的服務了。

人臉檢測

第一步,導入相關的第三方庫

# 這個就是百度SDK提供的關於人臉識別的庫
from aip import AipFace
import os
import numpy as np
import matplotlib.pyplot as plt
# 下面這個庫是用來轉換圖片的
import base64

接下來就相當於是初始化一下。

APP_ID = '【這裡要使用你創建的應用提供的APP ID】'
API_KEY = '【同上】'
SK = '【同上】'
client = AipFace(APP_ID,API_KEY,SK)
# 先利用os轉換到工程所在的目錄
os.chdir(r'E:\baidu_face')
# 下面定義一個函數,用來獲取你的圖片,並且轉換為base64格式
def get_img(path):
with open(path,'rb') as fp:
return base64.b64encode(fp.read()).decode()
# 接下來獲取圖片並檢測
img = get_img('photo/lena.png')
#調用人臉檢測
imgType = "BASE64"
result = client.detect(img,imgType)

這是返回的結果。

當然,現在還沒有使用圖像工具,所以下面的圖還看不了。不過上面的信息還是要看一下,這裡返回的並非是json,而是python的字典。
所以接下來就針對這個篩選信息,從中提出人臉的范圍。

# 提取人臉信息
face_list = result['result']['face_list'][0]['location']
x = face_list['left']
y = face_list['top']
w = face_list['width']
h = face_list['height']
#畫個矩形框
#先導入另一個模塊
import matplotlib.patches as mpt
ax = plt.gca()
imgx = plt.imread('photo/lena.png')
plt.imshow(imgx)
rect = mpt.Rectangle((x,y),w,h,linewidth=2,edgecolor='r',facecolor='none')
ax.add_patch(rect)
plt.axis('off')
plt.show()

人臉比對

這裡是直接用兩張圖片進行比對,然後返回結果。
首先初始化的步驟上面已經有了,所以接下來直接搞。

img1 = get_img('photo/2.jpg')
img2 = get_img('photo/10.jpg')
face_result = client.match([
{

'image': img1,
'image_type': 'BASE64',
},
{

'image': img2,
'image_type': 'BASE64',
}
])


返回的依然是字典,所以我們要從中提取相似度的參數:score

score = face_result['result']['score']
# 打印結果
print('相似度:{}'.format(score))
#下面來看看這兩張圖
plt.subplot(121)
plt.imshow(plt.imread('photo/2.jpg'))
plt.axis('off')
plt.subplot(122)
plt.imshow(plt.imread('photo/10.jpg'))
plt.axis('off')
plt.show()

不過這樣還不能體現什麼,所以我們拿另一個人的圖像再對比試一下:

img1 = get_img('photo/2.jpg')
img2 = get_img('photo/1.jpg')
face_result = client.match([
{

'image': img1,
'image_type': 'BASE64',
},
{

'image': img2,
'image_type': 'BASE64',
}
])
score = face_result['result']['score']
# 打印結果
print('相似度:{}'.format(score))
#下面來看看這兩張圖
plt.subplot(121)
plt.imshow(plt.imread('photo/2.jpg'))
plt.axis('off')
plt.subplot(122)
plt.imshow(plt.imread('photo/1.jpg'))
plt.axis('off')
plt.show()

這裡基本是復制粘貼的代碼,所以如果真的要用可以封裝一下。得到的結果就是:


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved