เครื่องตรวจจับใบหน้า PHP
ระบุตำแหน่งของใบหน้าในภาพโดยใช้ GD
- มันถูกสร้างขึ้นตามโครงการ mauricesvay/php-facedetection
- ด้วยการพอร์ตไปยัง js และใช้การปรับปรุง ฉันเขียนโค้ด PHP ใหม่ด้วย error_reporting = E_ALL safe
- เหตุผลที่ใบอนุญาตเป็น GPL-2.0 ก็เพราะว่าต้องคงใบอนุญาตของต้นฉบับไว้
- อัตราการรู้จำมีความแตกต่างกันมากขึ้นอยู่กับขนาดภาพ เนื่องจากฉันไม่เข้าใจหลักการของอัลกอริธึม ฉันจึงไม่สามารถปรับปรุงอัตราการรู้จำอื่นได้นอกจากขนาด รูปภาพส่วนใหญ่ที่ใช้ในการทดสอบจะได้ผลลัพธ์ที่ดีที่สุดเมื่อมีขนาด 281px ดังนั้นค่าเริ่มต้นคือ 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 และไบนารีของรูปภาพ
หลายรายการ
- หากคุณตั้งค่าหลายค่าเป็นจริง ระบบจะพบตำแหน่งใบหน้าเพิ่มเติมสูงสุด 10 ตำแหน่งและส่งกลับเป็นอาร์เรย์
- คุณสามารถป้อนตัวเลขแทนค่าจริงได้ โดยจำกัดไว้ที่ 2 ถึง 50
- อัตราการจดจำใบหน้าหลายใบนั้นต่ำเป็นพิเศษ ดังนั้นจึงมีความเป็นไปได้สูงที่จะจดจำใบหน้าบางใบไม่ได้ แม้ว่าขนาดภาพจะเปลี่ยนไปก็ตาม
ปรับขนาด
- แทนที่จะใช้รูปภาพต้นฉบับตามที่เป็นอยู่ ให้ใช้ขนาดรูปภาพที่ลดลง จะลดลงตามความกว้างและความสูงที่น้อยกว่า และค่าเริ่มต้นคือ 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 ดังนั้นจึงมีขนาดเล็กและคุณภาพของภาพไม่ดี
ตัวอย่างที่ครอบคลุมมีอยู่ใน tests/example.php แก้ไขตำแหน่ง autoload.php ของคุณและทดสอบในคอนโซล
โครงการ js: https://github.com/crucifyer/facedetector-js