Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
2
2022-027
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
2022-027
2022-027
Commits
210f7c21
Commit
210f7c21
authored
Nov 14, 2022
by
Gunasena D K B
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Upload New File
parent
f6f50c02
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
95 additions
and
0 deletions
+95
-0
FaceIdentification/face_rec.py
FaceIdentification/face_rec.py
+95
-0
No files found.
FaceIdentification/face_rec.py
0 → 100644
View file @
210f7c21
import
face_recognition
as
fr
import
os
import
cv2
import
face_recognition
import
numpy
as
np
from
time
import
sleep
print
(
"Project Start"
)
def
get_encoded_faces
():
"""
looks through the faces folder and encodes all
the faces
:return: dict of (name, image encoded)
"""
encoded
=
{}
for
dirpath
,
dnames
,
fnames
in
os
.
walk
(
"./faces"
):
for
f
in
fnames
:
if
f
.
endswith
(
".jpg"
)
or
f
.
endswith
(
".png"
)
or
f
.
endswith
(
".jpeg"
):
face
=
fr
.
load_image_file
(
"faces/"
+
f
)
encoding
=
fr
.
face_encodings
(
face
)[
0
]
encoded
[
f
.
split
(
"."
)[
0
]]
=
encoding
return
encoded
def
unknown_image_encoded
(
img
):
"""
encode a face given the file name
"""
face
=
fr
.
load_image_file
(
"faces/"
+
img
)
encoding
=
fr
.
face_encodings
(
face
)[
0
]
return
encoding
def
classify_face
(
im
):
"""
will find all of the faces in a given image and label
them if it knows what they are
:param im: str of file path
:return: list of face names
"""
faces
=
get_encoded_faces
()
faces_encoded
=
list
(
faces
.
values
())
known_face_names
=
list
(
faces
.
keys
())
img
=
cv2
.
imread
(
im
,
1
)
#img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)
#img = img[:,:,::-1]
face_locations
=
face_recognition
.
face_locations
(
img
)
unknown_face_encodings
=
face_recognition
.
face_encodings
(
img
,
face_locations
)
face_names
=
[]
for
face_encoding
in
unknown_face_encodings
:
# See if the face is a match for the known face(s)
matches
=
face_recognition
.
compare_faces
(
faces_encoded
,
face_encoding
)
name
=
"Unknown"
# use the known face with the smallest distance to the new face
face_distances
=
face_recognition
.
face_distance
(
faces_encoded
,
face_encoding
)
best_match_index
=
np
.
argmin
(
face_distances
)
if
matches
[
best_match_index
]:
name
=
known_face_names
[
best_match_index
]
face_names
.
append
(
name
)
for
(
top
,
right
,
bottom
,
left
),
name
in
zip
(
face_locations
,
face_names
):
# Draw a box around the face
# cv2.rectangle(img, (left-20, top-20), (right+20, bottom+20), (255, 0, 0), 2)
cv2
.
rectangle
(
img
,
(
left
-
20
,
top
-
20
),
(
right
+
20
,
bottom
+
20
),
(
0
,
225
,
0
),
2
)
# Draw a label with a name below the face
# cv2.rectangle(img, (left-20, bottom -15), (right+20, bottom+20), (255, 0, 0), cv2.FILLED)
cv2
.
rectangle
(
img
,
(
left
-
20
,
bottom
-
20
),
(
right
+
20
,
bottom
+
20
),
(
0
,
225
,
0
),
cv2
.
FILLED
)
font
=
cv2
.
FONT_HERSHEY_DUPLEX
# cv2.putText(img, name, (left -20, bottom + 15), font, 1.0, (255, 255, 255), 2)
cv2
.
putText
(
img
,
name
,
(
left
-
20
,
bottom
+
8
),
font
,
0.8
,
(
255
,
255
,
255
),
2
)
# Display the resulting image
while
True
:
cv2
.
imshow
(
'Video'
,
img
)
if
cv2
.
waitKey
(
1
)
&
0xFF
==
ord
(
'q'
):
return
face_names
# print(classify_face("me.jpeg"))
print
(
classify_face
(
"./Images/test3.jpg"
))
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment