Gesichtsdetektor PHP
Identifizieren Sie die Position des Gesichts im Bild mithilfe von GD.
- Es wurde basierend auf dem Projekt mauricesvay/php-facedetection erstellt.
- Durch die Portierung auf js und die Anwendung der Verbesserungen habe ich den PHP-Code mit error_reporting = E_ALL sicher neu geschrieben.
- Der Grund dafür, dass die Lizenz GPL-2.0 ist, liegt darin, dass die Lizenz des Originals beibehalten werden muss.
- Abhängig von der Bildgröße gibt es große Unterschiede in der Erkennungsrate. Da ich die Prinzipien des Algorithmus nicht verstand, konnte ich die Erkennungsrate außer der Größe nicht verbessern. Die meisten beim Testen verwendeten Bilder erzielen die besten Ergebnisse, wenn sie 281 Pixel groß sind, daher ist der Standardwert 281.
- Da es viele Ressourcen verbraucht, ist es besser, es zum Zeitpunkt des Hochladens zu erkennen und den Richtungswert zusammen zu speichern, wenn Sie es zum Sortieren von Miniaturansichten verwenden möchten, anstatt ihn in Echtzeit anzuwenden.
$ php composer.phar require " crucifyer/facedetector-php " " dev-main "
$ detector = new Xeno Image FaceDetector (imagefile or gdresource or imagebinary);
$ face = $ detector -> FaceDetect ();
[ ' x ' => int, ' y ' => int, ' w ' => int]
$ faces = $ detector -> FaceDetect ( true );
[
[ ' x ' => int, ' y ' => int, ' w ' => int],
[ ' x ' => int, ' y ' => int, ' w ' => int],
[ ' x ' => int, ' y ' => int, ' w ' => int],
[ ' x ' => int, ' y ' => int, ' w ' => int],
[ ' x ' => int, ' y ' => int, ' w ' => int],
]
FaceDetector:: FaceDetect ([multiplue bool], [resSize int])
- Es stehen GIF-, JPEG-, PNG-, WebP-Bilddateien, GD-Ressourcen und Bildbinärdateien zur Verfügung.
mehrere
- Wenn Sie den multiplen Wert auf true setzen, werden bis zu 10 weitere Gesichtspositionen gefunden und als Array zurückgegeben.
- Sie können anstelle von true eine Zahl eingeben, die auf 2 bis 50 begrenzt ist.
- Besonders schlecht ist die Erkennungsrate bei mehreren Gesichtern, sodass die Wahrscheinlichkeit groß ist, dass auch bei einer Änderung der Bildgröße nicht alle Gesichter erkannt werden.
resSize
- Anstatt das Originalbild unverändert zu verwenden, verwenden Sie eine reduzierte Bildgröße. Es wird basierend auf der kleineren Breite und Höhe reduziert und der Standardwert ist 281.
$ face = $ detector -> FaceDetect ();
$ size = $ detector -> getImageSize ();
$ direction = Xeno Image FaceDetector:: AlignDirection ( $ size [ ' width ' ], $ size [ ' height ' ], $ face [ ' x ' ], $ face [ ' y ' ], $ face [ ' w ' ]);
- Gibt die Ausrichtungsrichtung zum Gesicht zurück.
- Wenn die Breite lang ist, wird die Position zurückgegeben, an der das Gesicht erkannt wurde (links, in der Mitte und rechts), und wenn die Höhe lang ist, wird die Position zurückgegeben, an der das Gesicht erkannt wurde (oben, in der Mitte und unten).
- Wir gehen davon aus, dass die Verzerrung um etwa 30 % oder mehr liegt.
$ faces = Xeno Image FaceDetector:: FilterSmallFaces ( $ faces );
- Filtern Sie alles heraus, das mindestens 60 % kleiner als das größte ist.
$ detector = new Xeno Image FaceDetector (imagefile or gdresource or imagebinary);
$ direction = $ detector -> getDirection ();
- Automatisiert den Prozess bis zur Richtungserkennung. Wenn mehrere Gesichter erkannt werden, werden sie zentriert.
$ detector = new Xeno Image FaceDetector (imagefile or gdresource or imagebinary);
[gd resource or boolean] = $ detector -> cropThumbnail (size, [direction], [file], [type]);
- Gibt das zugeschnittene Miniaturbild zurück. Auch wenn das Original kleiner ist, wird es nicht passend vergrößert, sondern einfach entsprechend dem Seitenverhältnis beschnitten.
Richtung
- Wenn es weggelassen wird, wird getDirection zum Füllen verwendet.
Datei
- Wenn es weggelassen wird, wird die gd-Ressource zurückgegeben.
Typ
- gif, jpg, png, png8 und webp werden unterstützt. Wenn sie weggelassen werden, wird sie durch die Dateierweiterung bestimmt.
- PNG8 verwendet indizierte Farben auf die gleiche Weise wie GIF, daher ist es klein und die Bildqualität ist schlecht.
Ein ausführliches Beispiel ist in tests/example.php enthalten. Bearbeiten Sie Ihren autoload.php-Speicherort und testen Sie ihn in der Konsole.
js-Projekt: https://github.com/crucifyer/facedetector-js