mirror of
https://github.com/opencv/opencv.git
synced 2025-06-07 17:44:04 +08:00
Merge pull request #20935 from crywang:dnn_face
Fix problems in tutorial and python sample of dnn_face. * Update dnn_face.markdown * Update face_match.py
This commit is contained in:
parent
60f949e36f
commit
244ba1a61a
@ -12,7 +12,7 @@
|
||||
|
||||
## Introduction
|
||||
|
||||
In this section, we introduce the DNN-based module for face detection and face recognition. Models can be obtained in [Models](#Models). The usage of `FaceDetectorYN` and `FaceRecognizer` are presented in [Usage](#Usage).
|
||||
In this section, we introduce the DNN-based module for face detection and face recognition. Models can be obtained in [Models](#Models). The usage of `FaceDetectorYN` and `FaceRecognizerSF` are presented in [Usage](#Usage).
|
||||
|
||||
## Models
|
||||
|
||||
@ -58,8 +58,8 @@ x1, y1, w, h, x_re, y_re, x_le, y_le, x_nt, y_nt, x_rcm, y_rcm, x_lcm, y_lcm
|
||||
Following Face Detection, run codes below to extract face feature from facial image.
|
||||
|
||||
```cpp
|
||||
// Initialize FaceRecognizer with model path (cv::String)
|
||||
Ptr<FaceRecognizer> faceRecognizer = FaceRecognizer::create(model_path, "");
|
||||
// Initialize FaceRecognizerSF with model path (cv::String)
|
||||
Ptr<FaceRecognizerSF> faceRecognizer = FaceRecognizerSF::create(model_path, "");
|
||||
|
||||
// Aligning and cropping facial image through the first face of faces detected by dnn_face::DNNFaceDetector
|
||||
Mat aligned_face;
|
||||
|
@ -38,20 +38,20 @@ face1_align = recognizer.alignCrop(img1, face1[1][0])
|
||||
face2_align = recognizer.alignCrop(img2, face2[1][0])
|
||||
|
||||
# Extract features
|
||||
face1_feature = recognizer.faceFeature(face1_align)
|
||||
face2_feature = recognizer.faceFeature(face2_align)
|
||||
face1_feature = recognizer.feature(face1_align)
|
||||
face2_feature = recognizer.feature(face2_align)
|
||||
|
||||
# Calculate distance (0: cosine, 1: L2)
|
||||
cosine_similarity_threshold = 0.363
|
||||
cosine_score = recognizer.faceMatch(face1_feature, face2_feature, 0)
|
||||
cosine_score = recognizer.match(face1_feature, face2_feature, 0)
|
||||
msg = 'different identities'
|
||||
if cosine_score >= cosine_similarity_threshold:
|
||||
msg = 'the same identity'
|
||||
print('They have {}. Cosine Similarity: {}, threshold: {} (higher value means higher similarity, max 1.0).'.format(msg, cosine_score, cosine_similarity_threshold))
|
||||
|
||||
l2_similarity_threshold = 1.128
|
||||
l2_score = recognizer.faceMatch(face1_feature, face2_feature, 1)
|
||||
l2_score = recognizer.match(face1_feature, face2_feature, 1)
|
||||
msg = 'different identities'
|
||||
if l2_score <= l2_similarity_threshold:
|
||||
msg = 'the same identity'
|
||||
print('They have {}. NormL2 Distance: {}, threshold: {} (lower value means higher similarity, min 0.0).'.format(msg, l2_score, l2_similarity_threshold))
|
||||
print('They have {}. NormL2 Distance: {}, threshold: {} (lower value means higher similarity, min 0.0).'.format(msg, l2_score, l2_similarity_threshold))
|
||||
|
Loading…
Reference in New Issue
Block a user