七个步骤快速实现人脸识别(超级简单 代码全!!!)

一、项目结构如下

七个步骤快速实现人脸识别(超级简单 代码全!!!)

二、程序主流程

主流程代码,通过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”即可领取


分享到:


相關文章: