-
Notifications
You must be signed in to change notification settings - Fork 0
/
face.py
63 lines (52 loc) · 2.2 KB
/
face.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import face_recognition
from os import path
class Face:
def __init__(self,app):
self.storage = app.config["store"]
self.db = app.db
self.faces = []
self.known_encoding_faces = []
self.face_users_keys = {}
self.loadAll()
def load_file_user_by_index_key(self,index_key=0):
key_str = str(index_key)
if key_str in self.face_users_keys:
return self.face_users_keys[key_str]
return None
def load_train_file_by_name(self,name):
trained_storage = path.join(self.storage,'trained')
return path.join(trained_storage,name)
def load_unknown_file_by_name(self,name):
unknown_storage = path.join(self.storage, 'unknown')
return path.join(unknown_storage, name)
def loadAll(self):
results = self.db.select('SELECT faces.id,faces.user_id,faces.filename,faces.created FROM faces')
for row in results:
print(row)
user_id = row[1]
filename = row[2]
face = {
"id":row[0],
"user_id":user_id,
"filename":filename,
"created":row[3]
}
self.faces.append(face)
face_image = face_recognition.load_image_file(self.load_train_file_by_name(filename))
face_image_encoding = face_recognition.face_encodings(face_image)[0]
index_key = len(self.known_encoding_faces)
self.known_encoding_faces.append(face_image_encoding)
index_key_string = str(index_key)
self.face_users_keys['{0}'.format(index_key_string)] = user_id
def recognize(self,unknown_filename):
unknown_image = face_recognition.load_image_file(self.load_unknown_file_by_name(unknown_filename))
unknown_encoding_image = face_recognition.face_encodings(unknown_image)[0]
results = face_recognition.compare_faces(self.known_encoding_faces,unknown_encoding_image)
print("results",results)
index_key = 0
for matched in results:
if matched:
user_id = self.load_file_user_by_index_key(index_key)
return user_id
index_key = index_key+1
return None