@本文来源于公众号:csdn2299,喜欢可以关注公众号 程序员学府
这篇文章主要为大家详细介绍了face++与python实现人脸识别签到(考勤)功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
项目实现利用face++开发一个课堂签到的软件,实现面向摄像头即可完成记录学号、姓名和时间的签到工作。
项目架构
项目使用场景
代码:
流程代码,主文件
#!usr/bin/
# -*- coding: utf-8 -*-
import
requests
from json
import
JSONDecoder
import
csv
import
cv2
import
time
import
tkinter as tk
search_url
=
"https://api-cn.faceplusplus.com/facepp/v3/search"
getdetail_url
=
"https://api-cn.faceplusplus.com/facepp/v3/faceset/getdetail"
key
=
"***************"
secret
=
"*********************"
filename
=
time.time
(
)
filepath
=
"photo/"
+ str
(
filename
)
+
".jpg"
cap
=
cv2.VideoCapture
(
0
)
while
(
1
)
:
# get a frame
ret, frame
=
cap.read
(
)
# show a frame
cv2.imshow
(
"capture"
, frame
)
if
cv2.waitKey
(
1
)
&
0xFF
==
ord
(
'1'
)
:
cv2.imwrite
(
filepath, frame
)
break
cap.release
(
)
cv2.destroyAllWindows
(
)
(
"waiting..."
)
csvfile
=
open
(
'face_token.csv'
,
'r'
)
freader
=
csv.reader
(
csvfile
)
dic
=
dict
(
freader
)
csvfile.close
(
)
faceID_dict
=
{
v:k
for
k,v
in
dic.items
(
)
}
(
"..."
)
data
=
{
"api_key"
:
key,
"api_secret"
:
secret,
"outer_id"
:
'zbpm'
}
files
=
{
"image_file"
:
open
(
filepath,
"rb"
)
}
response
=
requests.post
(
search_url, data
=
data, files
=
files
)
req_con
=
response.content.decode
(
'utf-8'
)
req_dict
=
JSONDecoder
(
)
.decode
(
req_con
)
pre_face_token
=
req_dict
[
"results"
]
[
0
]
[
"face_token"
]
pre_confidence
=
req_dict
[
"results"
]
[
0
]
[
"confidence"
]
pre_thresholds
=
req_dict
[
"thresholds"
]
[
"1e-5"
]
(
"..."
)
data
=
{
"api_key"
:
key,
"api_secret"
:
secret,
"outer_id"
:
'zbpm'
}
response
=
requests.post
(
getdetail_url, data
=
data
)
req_con
=
response.content.decode
(
'utf-8'
)
req_dict
=
JSONDecoder
(
)
.decode
(
req_con
)
faces_token
=
req_dict
[
"face_tokens"
]
(
"..."
)
if
pre_face_token
in
faces_token and pre_confidence
>=
pre_thresholds:
labaltext
=
faceID_dict
[
pre_face_token
]
+
"\n\n\n"
+str
(
time.asctime
(
time.localtime
(
))
)
window
=
tk.Tk
(
)
window.title
=
(
'FaceID'
)
window.geometry
=
(
'200x200'
)
var
=
tk.StringVar
(
)
l
=
tk.Label
(
window,bg
=
'yellow'
,text
=
labaltext,font
=
(
"黑体"
,20 ,
"bold"
)
,width
=
30,height
=
20
)
l.pack
(
)
l.config
(
text
=
labaltext+var.get
(
))
#tk.messagebox.askokcancel('faceId', faceID_dict[pre_face_token] + "\n" +str(time.asctime(time.localtime())))
(
faceID_dict
[
pre_face_token
]
)
else:
tkinter.messagebox.askokcancel
(
'提示'
,
'未找到'
)
(
"未找到"
)
建立云脸数据集的模块:
#!usr/bin/
# -*- coding: utf-8 -*-
import
requests
import
time
from json
import
JSONDecoder
import
csv
http_url
=
'https://api-cn.faceplusplus.com/facepp/v3/faceset/addface'
key
=
"z_qkMMqK1efq8ikgAPOEn89A7And-lAa"
secret
=
"***********************"
faceset_token
=
'******************************'
face_tokens_str
=
''
csvfile
=
open
(
'face_token.csv'
,
'r'
)
freader
=
csv.reader
(
csvfile
)
facedata
=
[
]
i
=
0
for
item
in
freader:
i
=
i + 1
face_tokens_str
=
face_tokens_str + item
[
1
]
+
','
if
i%5
==
0:
face_tokens_str
=
face_tokens_str
[
:-1
]
facedata.append
(
face_tokens_str
)
face_tokens_str
=
''
face_tokens_str
=
face_tokens_str
[
:-1
]
facedata.append
(
face_tokens_str
)
csvfile.close
(
)
for
item
in
facedata:
(
item
)
data
=
{
"api_key"
:key,
"api_secret"
:secret,
"faceset_token"
:faceset_token,
"face_tokens"
:item
}
response
=
requests.post
(
http_url, data
=
data
)
(
response
)
(
response.text
)
初始建立云联数据集的模块:
#!/usr/bin/env/ python
# _*_ coding:utf-8 _*_
import
requests
from json
import
JSONDecoder
http_url
=
"https://api-cn.faceplusplus.com/facepp/v3/faceset/create"
get_url
=
"https://api-cn.faceplusplus.com/facepp/v3/faceset/getfacesets"
getdetails_url
=
"https://api-cn.faceplusplus.com/facepp/v3/faceset/getdetail"
key
=
"**********************"
secret
=
"*********************"
data
=
{
"api_key"
:key,
"api_secret"
:secret,
"display_name"
:
'SEUers'
,
"outer_id"
:
'zbpm'
}
repn
=
requests.post
(
http_url,data
=
data
)
(
repn
)
(
repn.text
)
data
=
{
"api_key"
:key,
"api_secret"
:secret
}
repn
=
requests.post
(
get_url,data
=
data
)
(
repn
)
(
repn.text
)
data
=
{
"api_key"
:key,
"api_secret"
:secret,
"outer_id"
:
'zbpm'
}
repn
=
requests.post
(
getdetails_url,data
=
data
)
(
repn
)
(
repn.text
)
生成存储facetoken:
这里从171860学号开始生成我的facetoken
#!usr/bin/
# -*- coding: utf-8 -*-
import
requests
from json
import
JSONDecoder
import
csv
id
=
171860
http_url
=
'https://api-cn.faceplusplus.com/facepp/v3/detect'
key
=
"*******************"
secret
=
"*******************"
faceID_List
=
[
]
face_token_List
=
[
]
for
i
in
range
(
0,10
)
:
faceID
=
str
(
id + i
)
file
=
"picture/"
+ faceID +
".jpg"
data
=
{
"api_key"
:key,
"api_secret"
:secret,
"return_landmark"
:1,
}
file
=
{
"image_file"
:open
(
file,
'rb'
)
}
response
=
requests.post
(
http_url,data
=
data,files
=
file
)
req_con
=
response.content.decode
(
'utf-8'
)
req_dict
=
JSONDecoder
(
)
.decode
(
req_con
)
face_token
=
req_dict
[
"faces"
]
[
0
]
[
"face_token"
]
faceID_List.append
(
faceID
)
face_token_List.append
(
face_token
)
(
faceID_List
)
(
face_token_List
)
csvfile
=
open
(
'face_token.csv'
,
'a'
,newline
=
''
)
fwriter
=
csv.writer
(
csvfile
)
for
i
in
range
(
len
(
faceID_List
))
:
fwriter.writerow
(
[
faceID_List
[
i
]
,face_token_List
[
i
]
]
)
csvfile.close
(
)
非常感谢你的阅读
大学的时候选择了自学python,工作了发现吃了计算机基础不好的亏,学历不行这是
没办法的事,只能后天弥补,于是在编码之外开启了自己的逆袭之路,不断的学习python核心知识,深入的研习计算机基础知识,整理好了,如果你也不甘平庸,那就与我一起在编码之外,不断成长吧!
其实这里不仅有技术,更有那些技术之外的东西,比如,如何做一个精致的程序员,而不是“屌丝”,程序员本身就是高贵的一种存在啊,难道不是吗? [点击加入] 想做你自己想成为高尚人,加油!