base function (face detetion + face recognition)

This commit is contained in:
2026-09-24 16:13:50 +02:00
parent d17bfd91b8
commit e1702ea970
7 changed files with 91 additions and 0 deletions
View File
+20
View File
@@ -0,0 +1,20 @@
import cv2
class Detector():
detector = None
@classmethod
def get(self):
if self.detector is None:
self.detector = cv2.FaceDetectorYN.create(
"../models/face_detection_yunet_2026may.onnx",
"",
(320,320),
0.85,
0.3,
5000
)
return self.detector
+19
View File
@@ -0,0 +1,19 @@
import cv2
from detector import *
def detect_in_image(image_path:str, scale = 1):
img = cv2.imread(image_path)
imgW = img1.shape[1] * scale
imgH = img1.shape[0] * scale
img = cv2.resize(img, (imgH, imgW))
detector = Detector.get()
detector.setInputSize((imgH, imgW))
face = detector.detect(img)
return face
+28
View File
@@ -0,0 +1,28 @@
import cv2
from recognizer import Recognizer
def extract_faces(faces:list, img:list, filename:str):
for i in faces:
face = faces[i]
croped_img = recognizer.alignCrop(img, face[1][0])
cv2.imwrite(f"../data/extracted/{filename}_{i}.png")
def is_same_face(
face1_img:list,
face2_img:list,
cosine_similarity_threshold:float = 0.363,
l2_similarity_threshold:float = 1.128
) -> bool:
recognizer = Recognizer.get()
faces1_features = recognizer.feature(face1_img)
faces2_features = recognizer.feature(face2_img)
cosine_score = recognizer.match(faces1_features, faces2_features, cv2.FaceRecognizerSF_FR_COSINE)
l2_score = recognizer.match(faces1_features, faces2_features, cv2.FaceRecognizerSF_FR_NORM_L2)
return cosine_score >= cosine_similarity_threshold and l2_score <= l2_similarity_threshold
+5
View File
@@ -0,0 +1,5 @@
import cv2
from face_detection import *
from face_recognition import *
+16
View File
@@ -0,0 +1,16 @@
import cv2
class Recognizer():
recognizer = None
@classmethod
def get(self):
if self.recognizer is None:
recognizer = cv2.FaceRecognizerSF.create(
"../models/face_recognition_sface_2021dec_int8.onnx",
""
)
return self.recognizer
+3
View File
@@ -0,0 +1,3 @@
def load_image