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