七個步驟快速實現人臉識別(超級簡單 代碼全!!!)

一、項目結構如下

七個步驟快速實現人臉識別(超級簡單 代碼全!!!)

二、程序主流程

主流程代碼,通過sqlite3保存人臉數據和信息,然後通過遍歷數據庫與之對比找出識別者信息,若識別不到,則會提示添加人臉信息至數據庫。

<code> 

import

sqlite3

from

testCamera

import

getFaceID,imgToBase64,reconized,getModelFace,saveFaceData

import

time

def

checkAll

()

:

conn = sqlite3.connect(

"face.db"

) cursor = conn.cursor() sql =

"select * from person_info"

cursor.execute(sql) values = cursor.fetchall() getModelFace.getModel() flag=

False

for

i

in

values:

if

(reconized.face_check(reconized.get_token(),i[

2

])): print(

"您是"

+i[

1

]) flag=

True

break

return

flag cursor.close() conn.commit() conn.close()

if

__name__ ==

'__main__'

: time1=time.time();

if

(checkAll()): time2 = time.time(); useTime = time2 - time1; print(

"識別耗時"

+ str(useTime) +

"秒"

)

else

: print(

"人臉庫無您的信息,請錄入"

) saveFaceData.save()/<code>

三、通過筆記本相機獲取人臉圖片存為Face_id.jpg

getModelFace.py主要是用於對比時獲取人臉與庫中Face_ID對比

<code>

import

cv2

import

numpy

as

np

def

getModel

()

:

face_cascade = cv2.CascadeClassifier(

"D:\Python\haarcascade_frontalface_default.xml"

) cap = cv2.VideoCapture(

0

)

while

True

: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray,

1.1

,

5

)

if

len(faces) >

0

: cv2.imwrite(

"model.jpg"

,img)

break

/<code>

人臉特徵識別配置文件
haarcascade_frontalface_default.xml可通過我的雲盤分享獲取。
雲盤分享
提取碼:w5ql

四、通過筆記本相機獲取人臉圖片存為Face_id.jpg

getFaceID.py主要是保存庫內無Face_ID的人臉信息

<code>

import

cv2

import

numpy

as

np

def

getFaceImg

()

:

face_cascade = cv2.CascadeClassifier(

"D:\Python\haarcascade_frontalface_default.xml"

) eye_cascade = cv2.CascadeClassifier(

"D:\Python\haarcascade_eye.xml"

) cap = cv2.VideoCapture(

0

)

while

True

: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray,

1.1

,

5

)

if

len(faces) >

0

: cv2.imwrite(

"face_id.jpg"

,img)

break

return

True

;/<code>

五、將獲取的圖片轉成Base64碼

imgToBase64.py通過python的base64庫將圖片轉成base64碼存入sqlite3數據庫

<code>

import

base64

def

ImgToBase64

(imgPath)

:

with

open(imgPath,

'rb'

)

as

f: base64_data = base64.b64encode(f.read()) s = base64_data.decode()

return

s/<code>

六、將獲取的人臉信息存入數據庫

saveFaceData.py將人臉圖片轉化的base64碼作為Face_id存入數據庫,並錄入人名,可按需增加其他信息。

<code> 

import

sqlite3

from

testCamera

import

getFaceID,imgToBase64

import

time

def

save

()

:

conn = sqlite3.connect(

"face.db"

) cursor = conn.cursor() print(

"請看著攝像頭!!!"

) time.sleep(

5

)

if

(getFaceID.getFaceImg()): face_id = imgToBase64.ImgToBase64(

'face_id.jpg'

) print(

"請輸入您的姓名:"

) name = input() sql =

"insert into person_info(name, face_id) values(\'"

+name+

"\',\'"

+face_id+

"\')"

print(sql) cursor.execute(sql) print(

"信息錄入成功"

) cursor.execute(

"delete from person_info where name = '郭志強'"

) print(

"delete successful"

) cursor.close() conn.commit() conn.close()

if

__name__ ==

'__main__'

: save();/<code>

七、通過百度人臉對比API實現識別功能

reconized.py分兩個方法,先通過註冊百度平臺賬號建立應用獲取百度官網獲取的AK(client_id)以及百度官網獲取的SK(client_secret)來獲取請求的token,再調用百度的人臉識別API請求人臉對比後的返回json數據。

<code> 

import

urllib.request

import

json

import

base64

import

ast

import

urllib

import

re,time

from

testCamera

import

getModelFace

def

face_check

(access_token,face_id)

:

''' 調用百度人臉對比API '''

request_url =

"https://aip.baidubce.com/rest/2.0/face/v3/match"

filename1 =

'model.jpg'

f = open(filename1,

'rb'

) img_test1 = base64.b64encode(f.read()) params = json.dumps( [{

"image"

:

''

+ str(img_test1,

'utf-8'

) +

''

,

"image_type"

:

"BASE64"

,

"face_type"

:

"LIVE"

,

"quality_control"

:

"LOW"

}, {

"image"

:

''

+ face_id +

''

,

"image_type"

:

"BASE64"

,

"face_type"

:

"IDCARD"

,

"quality_control"

:

"LOW"

}]) 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() content = content.decode(

"utf-8"

) content = ast.literal_eval(content)

if

(content[

'result'

][

'score'

]>=

80

):

return

True

else

:

return

False

def

get_token

()

:

''' 獲取百度token '''

host =

'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=***********&client_secret=************'

request = urllib.request.Request(host) request.add_header(

'Content-Type'

,

'application/json; charset=UTF-8'

) response = urllib.request.urlopen(request) content = response.read()

if

(content): p1 = re.compile(

r'"access_token":"(.*?)","scope":"'

, re.S) result = re.findall(p1, str(content)).__str__()

return

result[

2

:

-2

]

if

__name__ ==

'__main__'

: getModelFace.getModel() token = get_token() face_check(token)/<code>

運行效果

七個步驟快速實現人臉識別(超級簡單 代碼全!!!)

七個步驟快速實現人臉識別(超級簡單 代碼全!!!)

最後多說一句,小編是一名python開發工程師,這裡有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注小編,並在後臺私信小編:“01”即可領取


分享到:


相關文章: