face_recognition é a biblioteca de reconhecimento facial mais simples do mundo, você pode usá-la por meio de referência Python ou linha de comando para gerenciar e reconhecer faces. Este pacote de software usa o algoritmo de aprendizado profundo mais avançado para reconhecimento facial em dlib, fazendo com que a taxa de precisão de reconhecimento atinja 99,38% no conjunto de dados de rostos rotulados no mundo.
Ao instalar face_recognition, você precisa primeiro instalar a biblioteca dlib. A biblioteca dlib é uma biblioteca python para detecção de pontos-chave faciais, mas por ser escrita em C++, ela precisa de algumas dependências e é mais complicada. Recomenda-se usar a instalação conda para baixar automaticamente as dependências relacionadas.
instalação da biblioteca face_recognition
# 安装dlib
conda install -c https://conda.anaconda.org/conda-forge dlib
# -i https://pypi.tuna.tsinghua.edu.cn/simple 国内下载比较慢,清华镜像
pip install face_recognition -i https://pypi.tuna.tsinghua.edu.cn/simple
Introdução às APIs comuns
load_image_file(arquivo, mode='RGB')
Carregue um arquivo de imagem em um objeto do tipo array numpy.
parâmetro:
- arquivo: o nome do arquivo de imagem a ser carregado
- mode: O formato da imagem convertida. Apenas "RGB" (RGB de 8 bits, 3 canais) e "L" (preto e branco) são suportados
- return: um objeto do tipo numpy array contendo os dados da imagem
face_landmarks(face_image,face_locations=Nenhum,model=“grande”)
Dada uma imagem, extraia a localização das características faciais para cada rosto na imagem
parâmetro:
- face_image: insira a imagem do rosto
- face_locations=None: parâmetro opcional, o valor padrão é None, representando cada face na imagem decodificada padrão. Se você inserir face_locations()[i], poderá especificar a face para decodificação
- model="large": O modelo de recurso de saída, o padrão é "large" e "small" é opcional. Quando "pequeno" é selecionado, apenas o olho esquerdo, o olho direito e a ponta do nariz são extraídos.
face_encodings(face_image, known_face_locations=Nenhum, num_jitters=1)
Dada uma imagem, retorne as 128 codificações de face (vetores de recursos) para cada face na imagem.
parâmetro:
- face_image: insira a imagem do rosto
- known_face_locations: parâmetro opcional, se você souber a caixa delimitadora onde cada face está localizada
- num_jitters=1: Número de vezes para reamostrar ao calcular a codificação. Maior é mais preciso, mas mais lento (100 será 100 vezes mais lento)
- retorno: uma lista de codificação de face de 128 dimensões
batch_face_locations(imagens, number_of_times_to_upsample=1, batch_size=128)
Dada uma imagem, retorna a posição de cada face na imagem
Parâmetros:
- img: uma imagem (tipo de matriz numpy)
- number_of_times_to_upsample: Quantas vezes encontrar faces a partir das amostras de imagens. Quanto maior o valor deste parâmetro, menor a face pode ser encontrada.
- modelo: qual modelo de detecção facial usar. "hog" é menos preciso, mas roda mais rápido em CPUs, "cnn" é mais preciso e profundo (e acelerado por GPU/CUDA, se houver suporte a GPU disponível), o padrão é "hog"
- return: uma lista de tuplas, cada tupla na lista contém a posição da face (superior, direita, inferior, esquerda)
compare_faces(known_face_encodings, face_encoding_to_check, tolerância=0,6)
Compare a lista de codificações faciais e codificações candidatas para ver se elas correspondem.
parâmetro:
- known_face_encodings: lista de codificações de face conhecidas
- face_encoding_to_check: dados de codificação de face única a serem comparados
- tolerância: Quanta distância entre duas faces é considerada uma correspondência. Quanto menor o valor, mais estrito o contraste e 0,6 é um valor ideal típico.
- return: Uma lista de valores True ou False indicando o resultado correspondente para cada membro da lista known_face_encodings
face_distance(face_encodings, face_to_compare)
Dado um conjunto de codificações faciais, compare-as com as codificações faciais conhecidas para obter a distância euclidiana. Para cada face comparada, a distância euclidiana representa quão semelhantes são as faces.
parâmetro:
- faces: lista de códigos faciais para comparar
- face_to_compare: dados de codificação de face única a serem comparados
- tolerância: Quanta distância entre duas faces é considerada uma correspondência. Quanto menor o valor, mais rigorosa a comparação, 0,6 é um valor ideal típico
- retorno: um ndarray numpy, a distância euclidiana na matriz corresponde à ordem da matriz de faces uma a uma
prática de código de aplicativo de reconhecimento facial:
Pontos importantes
from PIL import Image, ImageDraw
import face_recognition
# Load the jpg file into a numpy array
image = face_recognition.load_image_file("./data/zjl.jpg")
# Find all facial features in all the faces in the image
ace_landmarks_list = face_recognition.face_landmarks(image)
pil_image = Image.fromarray(image)
for face_landmarks in face_landmarks_list:
draw = ImageDraw.Draw(pil_image, 'RGBA')
for key in face_landmarks.keys():
#左图
draw.point(face_landmarks[feature_key],fill=(256, 256, 256))
#右图
#draw.line(face_landmarks[feature_key], width=5)
pil_image.show()
Efeito de execução de código:
Referências:
https://github.com/ageitgey/face_recognition