Explicação de rotina 07-Face-Detection->face_recognitionReconhecimento facial
Tutorial em vídeo 19 - Distinguir diferentes rostos: https://singtown.com/learn/50033/
Reconhecimento facial utilizando recursos LBP.
Base de dados de rostos da AT&T:\ O catálogo contém uma colecção de rostos tirados entre Abril de 1992 e Abril de 1994 nos Laboratórios de Investigação Olivetti em Cambridge, Inglaterra.
Existem 10 imagens diferentes de 40 motivos diferentes. Para alguns sujeitos, as imagens foram tiradas em momentos diferentes com iluminação, expressão facial (olhos abertos/fechados, sorridente/sem sorriso) e detalhes faciais (óculos/sem óculos) ligeiramente variados. Todas as imagens são tiradas contra um fundo escuro e uniforme, com o sujeito na posição frontal superior direita (com tolerância para algum movimento lateral).
Estes ficheiros estão no formato PGM e podem ser facilmente visualizados através do programa "xv". Cada imagem tem 92x112, escala de cinzentos de 8 bits. As imagens estão divididas em 40 diretórios (um para cada tópico) denominados: sX
Onde X representa o número do tópico (entre 1 e 40). Em cada diretório existem 10 imagens diferentes para o tema selecionado, denominadas: Y.pgm
em que Y representa imagens de um tema específico (entre 1 e 10).
Ao utilizar estas imagens, dê crédito aos Laboratórios de Investigação Olivetti.\ Uma referência útil é um trabalho de reconhecimento facial utilizando algumas destas imagens:
F. Samaria e A. Harter\ “Parametrização de modelos estocásticos para reconhecimento facial”\ O 2º Simpósio IEEE de Aplicações de Visão por Computador\ ------------------Dezembro de 1994, Sarasota (Florida).
# 用LBP特征进行人脸识别。
# 见 Timo Ahonen's "Face Recognition with Local Binary Patterns".
#
# 运行示例之前:
# 1) 下载AT&T faces数据库http://www.cl.cam.ac.uk/Research/DTG/attarchive/pub/data/att_faces.zip
# 2) 提取并复制orl_faces目录到SD卡根目录。
#
# NOTE: This is just a PoC implementation of the paper mentioned above, it does Not work well in real life conditions.
# 注意:这只是上面提到的论文的一个PoC实现,在现实生活中并不适用。
import sensor, time, image
SUB = "s2"
NUM_SUBJECTS = 5
NUM_SUBJECTS_IMGS = 10
img = image.Image("orl_faces/%s/1.pgm"%(SUB))
d0 = img.find_lbp((0, 0, img.width(), img.height()))
img = None
print("")
for s in range(1, NUM_SUBJECTS+1):
dist = 0
for i in range(2, NUM_SUBJECTS_IMGS+1):
img = image.Image("orl_faces/s%d/%d.pgm"%(s, i))
d1 = img.find_lbp((0, 0, img.width(), img.height()))
dist += image.match_descriptor(d0, d1)
print("Average dist for subject %d: %d"%(s, dist/NUM_SUBJECTS_IMGS))
Explicação da função do documento oficial chinês OpenMV da Singtown Technology: