Explicación de rutina 07-Face-Detection->face_recognitionReconocimiento facial
Vídeo tutorial 19 - Distinguir diferentes caras: https://singtown.com/learn/50033/
Reconocimiento facial mediante funciones LBP.
Base de datos de caras de AT&T faces:\ El catálogo contiene una colección de rostros tomados entre abril de 1992 y abril de 1994 en el Laboratorio de Investigación Olivetti en Cambridge, Inglaterra.
Hay 10 imágenes diferentes de 40 temas diferentes. Para algunos sujetos, las imágenes se tomaron en diferentes momentos con iluminación ligeramente variable, expresión facial (ojos abiertos/cerrados, sonriendo/no sonriendo) y detalles faciales (gafas/sin gafas). Todas las imágenes se toman sobre un fondo oscuro y uniforme, con el sujeto en una posición frontal superior derecha (con tolerancia para algún movimiento lateral).
Estos archivos están en formato PGM y se pueden ver fácilmente usando el programa "xv". Cada imagen tiene una resolución de 92x112 y una escala de grises de 8 bits. Las imágenes están divididas en 40 directorios (uno para cada tema) denominados: sX
Donde X representa el número de tema (entre 1 y 40). En cada directorio hay 10 imágenes diferentes para el tema seleccionado, denominadas: Y.pgm
donde Y representa imágenes de un tema específico (entre 1 y 10).
Al utilizar estas imágenes, dé crédito a Olivetti Research Laboratories.\ Una referencia útil es un trabajo de reconocimiento facial utilizando algunas de estas imágenes:
F. Samaria y A. Harter\ "Parametrización de modelos estocásticos para reconocimiento facial"\ El segundo simposio de aplicaciones de visión por computadora del IEEE\ ------------------Diciembre 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))
Explicación de la función del documento oficial chino de Singtown Technology OpenMV: