|
| 1 | +<?php |
| 2 | + |
| 3 | +use CV\Scalar, CV\Size; |
| 4 | +use function CV\{imread, imwrite}; |
| 5 | + |
| 6 | +$netDet = \CV\DNN\readNetFromCaffe('models/ssd/res10_300x300_ssd_deploy.prototxt', 'models/ssd/res10_300x300_ssd_iter_140000.caffemodel'); |
| 7 | +$netRecogn = \CV\DNN\readNetFromONNX('models/insightface/arcface_mobilefacenet.onnx'); |
| 8 | + |
| 9 | +$src = imread("images/faces.jpg"); |
| 10 | +$size = $src->size(); // 2000x500 |
| 11 | + |
| 12 | +$minSide = min($size->width, $size->height); |
| 13 | +$divider = $minSide / 300; |
| 14 | +\CV\resize($src, $resized, new Size($size->width / $divider, $size->height / $divider)); // 1200x300 |
| 15 | + |
| 16 | +//var_export($resized); |
| 17 | + |
| 18 | +$blob = \CV\DNN\blobFromImage($resized, 1, new Size(), new Scalar(104, 177, 123), true, false); |
| 19 | + |
| 20 | +$netDet->setInput($blob); |
| 21 | + |
| 22 | +$r = $netDet->forward(); |
| 23 | + |
| 24 | +//var_export($r->shape); |
| 25 | + |
| 26 | +$faces = []; |
| 27 | +$scalar = new Scalar(0, 0, 255); |
| 28 | +for ($i = 0; $i < $r->shape[2]; $i++) { |
| 29 | + $confidence = $r->atIdx([0,0,$i,2]); |
| 30 | + if ($confidence > 0.9) { |
| 31 | + var_export($confidence);echo "\n"; |
| 32 | + $startX = $r->atIdx([0,0,$i,3]) * $src->cols; |
| 33 | + $startY = $r->atIdx([0,0,$i,4]) * $src->rows; |
| 34 | + $endX = $r->atIdx([0,0,$i,5]) * $src->cols; |
| 35 | + $endY = $r->atIdx([0,0,$i,6]) * $src->rows; |
| 36 | + |
| 37 | + $face = $src->getImageROI(new \CV\Rect($startX, $startY, $endX - $startX, $endY - $startY)); |
| 38 | + //imwrite("results/_face.jpg", $face); |
| 39 | + |
| 40 | + $blob = \CV\DNN\blobFromImage($face, 1.0 / 255, new Size(112, 112), new Scalar(), true, false); |
| 41 | + $netRecogn->setInput($blob); |
| 42 | + $vec = $netRecogn->forward(); |
| 43 | + \CV\normalize($r, $r); |
| 44 | + |
| 45 | + //$vec->print(); |
| 46 | + var_export($vec->data()); |
| 47 | + } |
| 48 | +} |
0 commit comments