Детектор лиц PHP
Определите расположение лица на изображении с помощью GD.
- Он создан на основе проекта mauricesvay/php-facedetection.
- Портировав на js и применив улучшения, я переписал код PHP с error_reporting = E_ALL Safe.
- Причина, по которой лицензия является 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 и двоичные файлы изображений.
несколько
- Если вы установите для параметра Multiple значение true, будет найдено еще до 10 положений лица, которые будут возвращены в виде массива.
- Вместо true вы можете ввести число, ограниченное диапазоном от 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, поэтому его размер мал, а качество изображения низкое.
Подробный пример содержится в файлеtests/example.php. Отредактируйте местоположение autoload.php и проверьте его в консоли.
js-проект: https://github.com/crucifyer/facedetector-js