Detector de rosto PHP
Identifique a localização do rosto na imagem usando GD.
- Foi criado com base no projeto mauricesvay/php-facedetection.
- Ao portar para js e aplicar as melhorias, reescrevi o código PHP com error_reporting = E_ALL safe.
- A razão pela qual a licença é GPL-2.0 é porque ela deve reter a licença original.
- Há uma grande diferença na taxa de reconhecimento dependendo do tamanho da imagem. Como não entendi os princípios do algoritmo, não consegui melhorar a taxa de reconhecimento além do tamanho. A maioria das imagens usadas nos testes tem os melhores resultados quando têm 281px, então o valor padrão é 281.
- Por consumir muitos recursos, se você quiser utilizá-lo para fins de classificação de miniaturas, é melhor detectá-lo no momento do upload e salvar o valor da direção juntos, em vez de aplicá-lo em tempo real.
$ 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])
- Estão disponíveis arquivos de imagem GIF, jpeg, png, webp, recursos gd e binários de imagem.
múltiplo
- Se você definir o valor múltiplo como verdadeiro, até mais 10 posições de face serão encontradas e retornadas como uma matriz.
- Você pode inserir um número em vez de verdadeiro, limitado de 2 a 50.
- A taxa de reconhecimento de múltiplos rostos é particularmente baixa, portanto há uma grande probabilidade de que nem todos os rostos sejam reconhecidos, mesmo que o tamanho da imagem seja alterado.
resSize
- Em vez de usar a imagem original como está, use um tamanho de imagem reduzido. Ele é reduzido com base na menor largura e altura, e o valor padrão é 281.
$ face = $ detector -> FaceDetect ();
$ size = $ detector -> getImageSize ();
$ direction = Xeno Image FaceDetector:: AlignDirection ( $ size [ ' width ' ], $ size [ ' height ' ], $ face [ ' x ' ], $ face [ ' y ' ], $ face [ ' w ' ]);
- Retorna a direção para alinhar em direção ao rosto.
- Se a largura for longa, retorna a posição onde o rosto foi detectado entre esquerda, centro e direita, e se a altura for longa, retorna a posição onde o rosto foi detectado, entre superior, meio e inferior.
- Julgamos que é tendencioso em cerca de 30% ou mais.
$ faces = Xeno Image FaceDetector:: FilterSmallFaces ( $ faces );
- Filtre qualquer coisa que seja pelo menos 60% menor que a maior.
$ detector = new Xeno Image FaceDetector (imagefile or gdresource or imagebinary);
$ direction = $ detector -> getDirection ();
- Automatiza o processo até o reconhecimento de direção. Quando vários rostos são reconhecidos, eles são centralizados.
$ detector = new Xeno Image FaceDetector (imagefile or gdresource or imagebinary);
[gd resource or boolean] = $ detector -> cropThumbnail (size, [direction], [file], [type]);
- Retorna a miniatura recortada. Mesmo que o original seja menor que o tamanho, ele não é ampliado para caber, mas simplesmente cortado de acordo com a proporção.
direção
- Se omitido, getDirection será usado para preenchê-lo.
arquivo
- Se omitido, o recurso gd será retornado.
tipo
- gif, jpg, png, png8 e webp são suportados. Se omitido, será determinado pela extensão do arquivo.
- png8 usa cores indexadas da mesma forma que gif, portanto seu tamanho é pequeno e a qualidade da imagem é ruim.
Um exemplo abrangente está contido em testes/exemplo.php. Edite a localização do seu autoload.php e teste-o no console.
projeto js: https://github.com/crucifyer/facedetector-js