Skip to content

Commit f74f3c6

Browse files
committed
FaceRecognizerSF
1 parent 01d208e commit f74f3c6

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

Diff for: phpdoc.php

+11
Original file line numberDiff line numberDiff line change
@@ -1416,6 +1416,9 @@ function convertScaleAbs() {}
14161416
define('CV\COLOR_BayerGR2RGBA', 140);
14171417
define('CV\COLOR_COLORCVT_MAX', 143);
14181418

1419+
define('CV\FaceRecognizerSF_DISTYPE_FR_COSINE', 0);
1420+
define('CV\FaceRecognizerSF_DISTYPE_FR_NORM_L2', 1);
1421+
14191422
namespace CV\Face;
14201423
use CV\Mat;
14211424

@@ -1635,4 +1638,12 @@ public static function create(string $model, string $config, int $backend_id = 0
16351638
public function alignCrop(Mat $image, Mat $face) {
16361639
return new Mat();
16371640
}
1641+
1642+
public function feature(Mat $face) {
1643+
return new Mat();
1644+
}
1645+
1646+
public function match(Mat $face1, Mat $face2, $dis_type = 0) {
1647+
return new Mat();
1648+
}
16381649
}

Diff for: recognize_face_by_facerecognizersf.php

+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<?php
2+
3+
use CV\Scalar;
4+
use function CV\{imread, imwrite, rectangle};
5+
6+
$src = imread("images/faces.jpg");
7+
$scalar = new Scalar(0, 0, 255);
8+
9+
$netDet = CV\FaceDetectorYN::create('models/opencv_zoo/face_detection_yunet_2022mar.onnx', '', $src->size());
10+
$netRecogn = CV\FaceRecognizerSF::create('models/opencv_zoo/face_recognition_sface_2021dec.onnx', '');
11+
12+
$r = $netDet->detect($src);
13+
14+
$features = [];
15+
for ($i = 0; $i < $r->rows; $i++) {
16+
$confidence = $r->atIdx([$i,14]);
17+
var_export($confidence);echo "\n";
18+
19+
if ($confidence > 0.9) {
20+
$startX = $r->atIdx([$i,0]);
21+
$startY = $r->atIdx([$i,1]);
22+
$w = $r->atIdx([$i,2]);
23+
$h = $r->atIdx([$i,3]);
24+
25+
var_export([$startX, $startY, $startX + $w, $startY + $h]);echo "\n";
26+
//rectangle($src, $startX, $startY, $startX + $w, $startY + $h, $scalar, 3);
27+
28+
//$faces[] = $src->getImageROI(new \CV\Rect($startX, $startY, $w, $h));
29+
30+
$faceBox = $r->row($i);
31+
32+
//$face = $netRecogn->alignCrop($r, $faceBox); // todo: doesn't work. needs fix
33+
//imwrite("results/_recognize_face_by_facerecognizersf$i.jpg", $face);
34+
35+
$face = $src->getImageROI(new \CV\Rect($startX, $startY, $w, $h));
36+
37+
$feature = $netRecogn->feature($face);
38+
39+
var_export($feature);
40+
var_export($feature->data());
41+
$features[] = $feature;
42+
}
43+
}
44+
45+
foreach ($features as $i => $feature) {
46+
foreach ($features as $j => $feature2) {
47+
if ($i == $j) {
48+
continue;
49+
}
50+
51+
$similarity = $netRecogn->match($feature, $feature2);
52+
var_export($similarity);echo "\n";
53+
}
54+
}

0 commit comments

Comments
 (0)