كاشف الوجه PHP
تحديد موقع الوجه في الصورة باستخدام GD.
- تم إنشاؤه بناءً على مشروع mauricesvay/php-facedetection.
- من خلال النقل إلى js وتطبيق التحسينات، قمت بإعادة كتابة كود PHP باستخدام error_reporting = E_ALLsafe.
- سبب كون الترخيص GPL-2.0 هو أنه يجب أن يحتفظ بالترخيص الأصلي.
- هناك اختلاف كبير في معدل التعرف حسب حجم الصورة. ولأنني لم أفهم مبادئ الخوارزمية، لم أتمكن من تحسين معدل التعرف بخلاف الحجم. تحصل معظم الصور المستخدمة في الاختبار على أفضل النتائج عندما تكون بحجم 281 بكسل، لذا فإن القيمة الافتراضية هي 281.
- لأنه يستهلك الكثير من الموارد، إذا كنت ترغب في استخدامه لأغراض فرز الصور المصغرة، فمن الأفضل اكتشافه في وقت التحميل وحفظ قيمة الاتجاه معًا، بدلاً من تطبيقه في الوقت الفعلي.
$ 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])
- تتوفر ملفات GIF وjpeg وpng وملفات صور webp وموارد gd وثنائيات الصور.
عديد
- إذا قمت بتعيين القيمة المتعددة على true، فسيتم العثور على ما يصل إلى 10 مواضع وجه أخرى وإرجاعها كمصفوفة.
- يمكنك إدخال رقم بدلاً من "صحيح"، يقتصر على 2 إلى 50.
- معدل التعرف على الوجوه المتعددة ضعيف بشكل خاص، لذلك هناك احتمال كبير بعدم التعرف على كل الوجوه حتى لو تم تغيير حجم الصورة.
resSize
- بدلاً من استخدام الصورة الأصلية كما هي، استخدم حجمًا أصغر للصورة. ويتم تقليله بناءً على العرض والارتفاع الأصغر، والقيمة الافتراضية هي 281.
$ face = $ detector -> FaceDetect ();
$ size = $ detector -> getImageSize ();
$ direction = Xeno Image FaceDetector:: AlignDirection ( $ size [ ' width ' ], $ size [ ' height ' ], $ face [ ' x ' ], $ face [ ' y ' ], $ face [ ' w ' ]);
- إرجاع الاتجاه للمحاذاة نحو الوجه.
- إذا كان العرض طويلًا، فإنه يُرجع الموضع الذي تم اكتشاف الوجه فيه بين اليسار والوسط واليمين، وإذا كان الارتفاع طويلًا، فإنه يُرجع الموضع الذي تم اكتشاف الوجه فيه، بين الأعلى والوسط والأسفل.
- نحن نحكم على أنها متحيزة بحوالي 30% أو أكثر.
$ faces = Xeno Image FaceDetector:: FilterSmallFaces ( $ faces );
- قم بتصفية أي شيء أصغر بنسبة 60% على الأقل من الأكبر.
$ detector = new Xeno Image FaceDetector (imagefile or gdresource or imagebinary);
$ direction = $ detector -> getDirection ();
- أتمتة العملية حتى التعرف على الاتجاه. عندما يتم التعرف على وجوه متعددة، يتم توسيطها.
$ detector = new Xeno Image FaceDetector (imagefile or gdresource or imagebinary);
[gd resource or boolean] = $ detector -> cropThumbnail (size, [direction], [file], [type]);
- إرجاع الصورة المصغرة التي تم اقتصاصها. حتى لو كان حجم المستند الأصلي أصغر من الحجم، فلن يتم تكبيره ليناسب حجمه، ولكن يتم اقتصاصه ببساطة وفقًا للنسبة.
اتجاه
- إذا تم حذفه، فسيتم استخدام getDirection لملئه.
ملف
- إذا تم حذفه، فسيتم إرجاع مورد gd.
يكتب
- يتم دعم gif وjpg وpng وpng8 وwebp، وفي حالة حذفها، يتم تحديدها بواسطة امتداد الملف.
- يستخدم png8 الألوان المفهرسة بنفس طريقة استخدام gif، لذا فإن حجمه صغير وجودة الصورة رديئة.
يوجد مثال شامل في الاختبارات/example.php. قم بتحرير موقع autoload.php الخاص بك واختبره في وحدة التحكم.
مشروع Node.js: https://github.com/crucifyer/facedetector-js