Arquivos
php-opencv-examples/recognize_face_by_facerecognizersf.php
Vladimir Goncharov f74f3c6ed3 FaceRecognizerSF
2023-03-31 18:33:10 +03:00

54 linhas
1.6 KiB
PHP

<?php
use CV\Scalar;
use function CV\{imread, imwrite, rectangle};
$src = imread("images/faces.jpg");
$scalar = new Scalar(0, 0, 255);
$netDet = CV\FaceDetectorYN::create('models/opencv_zoo/face_detection_yunet_2022mar.onnx', '', $src->size());
$netRecogn = CV\FaceRecognizerSF::create('models/opencv_zoo/face_recognition_sface_2021dec.onnx', '');
$r = $netDet->detect($src);
$features = [];
for ($i = 0; $i < $r->rows; $i++) {
$confidence = $r->atIdx([$i,14]);
var_export($confidence);echo "\n";
if ($confidence > 0.9) {
$startX = $r->atIdx([$i,0]);
$startY = $r->atIdx([$i,1]);
$w = $r->atIdx([$i,2]);
$h = $r->atIdx([$i,3]);
var_export([$startX, $startY, $startX + $w, $startY + $h]);echo "\n";
//rectangle($src, $startX, $startY, $startX + $w, $startY + $h, $scalar, 3);
//$faces[] = $src->getImageROI(new \CV\Rect($startX, $startY, $w, $h));
$faceBox = $r->row($i);
//$face = $netRecogn->alignCrop($r, $faceBox); // todo: doesn't work. needs fix
//imwrite("results/_recognize_face_by_facerecognizersf$i.jpg", $face);
$face = $src->getImageROI(new \CV\Rect($startX, $startY, $w, $h));
$feature = $netRecogn->feature($face);
var_export($feature);
var_export($feature->data());
$features[] = $feature;
}
}
foreach ($features as $i => $feature) {
foreach ($features as $j => $feature2) {
if ($i == $j) {
continue;
}
$similarity = $netRecogn->match($feature, $feature2);
var_export($similarity);echo "\n";
}
}