From 58fa46a92d588a97d971fd85ee3b6ebc6f17f5f1 Mon Sep 17 00:00:00 2001 From: Askill Date: Fri, 8 May 2020 18:04:17 +0200 Subject: [PATCH] prepared for multiprocessing --- Neues Textdokument.txt | 1 - application/face_rec.py | 60 ++++++++++++++++------------------------- dlib | 1 + 3 files changed, 24 insertions(+), 38 deletions(-) delete mode 100644 Neues Textdokument.txt create mode 160000 dlib diff --git a/Neues Textdokument.txt b/Neues Textdokument.txt deleted file mode 100644 index 5fcdea3..0000000 --- a/Neues Textdokument.txt +++ /dev/null @@ -1 +0,0 @@ -java.exe -classpath ".;C:\Program Files\DigitalPersona\U.are.U SDK\Windows\Lib\Java\dpuareu.jar" -Djava.library.path="C:\Program Files\DigitalPersona\U.are.U SDK\Windows\Lib\win32" UareUSampleJava \ No newline at end of file diff --git a/application/face_rec.py b/application/face_rec.py index 9545b73..0c17e7a 100644 --- a/application/face_rec.py +++ b/application/face_rec.py @@ -1,23 +1,17 @@ +import dlib import face_recognition import os import cv2 from application.db import Session, Person import base64 import numpy as np -from base64 import decodestring -import base64 - from io import StringIO -from PIL import Image -KNOWN_FACES_DIR = 'known_faces' -UNKNOWN_FACES_DIR = 'unknown_faces' TOLERANCE = 0.6 FRAME_THICKNESS = 3 FONT_THICKNESS = 2 MODEL = "hog" # default: 'hog', other one can be 'cnn' - CUDA accelerated (if available) deep-learning pretrained model - def readb64(base64_string): sbuf = StringIO() sbuf.write(base64.b64decode(base64_string)) @@ -64,7 +58,6 @@ def identifyFace(image): return res def identifyFaceVideo(url): - print('Identifying Faces') video = cv2.VideoCapture(url) image = video.read()[1] ret, image = cv2.imencode(".png", image) @@ -75,39 +68,32 @@ def identifyFaceVideo(url): locations = face_recognition.face_locations(image, model=MODEL) encodings = face_recognition.face_encodings(image, locations) + face_locations = {} #face locations to be drawn + for face_encoding, face_location in zip(encodings, locations): + + face_locations.update(compareFace(face_encoding, face_location)) - # We use compare_faces (but might use face_distance as well) - # Returns array of True/False values in order of passed known_faces - results = face_recognition.compare_faces(known_faces, face_encoding, TOLERANCE) - - # Since order is being preserved, we check if any face was found then grab index - # then label (name) of first matching known face withing a tolerance - match = None - if True in results: # If at least one is true, get a name of first of found labels - match = "name" - print(f' - {match} from {results}') - - # Each location contains positions in order: top, right, bottom, left - top_left = (face_location[3], face_location[0]) - bottom_right = (face_location[1], face_location[2]) - color = [255, 0, 0] - # Paint frame - cv2.rectangle(image, top_left, bottom_right, color, FRAME_THICKNESS) - - # Now we need smaller, filled grame below for a name - # This time we use bottom in both corners - to start from bottom and move 50 pixels down - top_left = (face_location[3], face_location[2]) - bottom_right = (face_location[1], face_location[2] + 22) - - # Paint frame - cv2.rectangle(image, top_left, bottom_right, color, cv2.FILLED) - - # Wite a name - #cv2.putText(image, match, (face_location[3] + 10, face_location[2] + 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (200, 200, 200), FONT_THICKNESS) + for k, v in face_locations.items(): + # Paint frame + cv2.rectangle(image, v[0], v[1], [255, 0, 0], FRAME_THICKNESS) + # Wite a name + cv2.putText(image, k, v[0], cv2.FONT_HERSHEY_SIMPLEX, 1.5, [255, 0, 255], FONT_THICKNESS) # Show image image = cv2.imencode(".jpg", image)[1] return image -#identifyFace("") \ No newline at end of file + +def compareFace(face_encoding, face_location): + results = face_recognition.compare_faces(known_faces, face_encoding, TOLERANCE) + face_locations = {} + match = None + if True in results: # If at least one is true, get a name of first of found labels + match = "name" + print(f' - {match} from {results}') + top_left = (face_location[3], face_location[0]) + bottom_right = (face_location[1], face_location[2]) + + face_locations[match] = (top_left, bottom_right) + return face_locations \ No newline at end of file diff --git a/dlib b/dlib new file mode 160000 index 0000000..c7062aa --- /dev/null +++ b/dlib @@ -0,0 +1 @@ +Subproject commit c7062aa3631ba4912255a9bcc0563d404d3bdd5d