Está en la página 1de 7

Proyecto Técnicas de Inteligencia Artificial:

Reconocimiento de iris
1st Wilder Ofrey Bello Herrera 2nd Javier Eduardo Gutierrez Serrano
Ingeniería Mecatrónica Ingeniería Mecatrónica
Universidad Nacional de Colombia Universidad Nacional de Colombia
Bogotá D.C Bogotá D.C
wobelloh@unal.edu.co jaegurierrezser@unal.edu.co

I. R ESUMEN Tanto el ojo derecho como el izquierdo tienen patrones


El presente proyecto tiene como objetivo presentar una de iris que no coinciden.
alternativa para el reconocimiento de iris desde diferentes Por lo tanto, el reconocimiento del iris es un paso
ángulos, realizando dicho proceso mediante la identificación importante para el pre-procesamiento en los sistemas
de la sección específica de la cual se tiene información en automáticos y de seguridad.
comparación con los datos recolectados del iris completo
dado en el dataset, todo ello a través de la caracterización El reconocimiento del iris posee una alta precisión dado
de cada una de las imágenes a las cuales se le realizará un que la tasa de falsa aceptación y falso rechazo es muy baja,
procesado previo y posteriormente pasarlo a una red neuronal además de que es estable, como se menciono anteriormente
que mediante entrenamiento pueda identificar el porcentaje los patrones del iris permanecen a lo largo de la vida del
de similitud adecuado desde algunas perspectivas que se individuo, además que los sistema de reconocimiento del iris
desarrollarán en el presente trabajo. no son intrusivos, ya que la perdona no necesita contacto
físico con los dispositivos para realizar un escaneo de iris.
II. I NTRODUCCIÓN El presente documento esta organizado de la siguiente
El ser humano es un ser único entre las especies, tal es la manera: la sección 3 describe un esbozo general de trabajos
unicidad que posee diferentes patrones que hacen que cada previamente desarrollados con base en el reconocimiento e
individuo de la especie sea un ser único entre ellas, lo cual identificación por iris, es decir, el tema a tratar en el proyecto,
permite declararle una identidad a cada individuo. Una forma los métodos hasta ahora empleados para la determinación y
viable para la identificación y autenticación de un individuo reconocimiento por iris en una imagen se encuentran en la
hace uso de ciertas características físicas, para así realizar un sección 4, y finalmente se encuentran los resultados obtenidos
reconocimiento automático. y las conclusiones posteriores a la implementación de los
diferentes métodos estudiados en clase y adquiridos durante
Por otro lado, el desarrollo de los sistemas biométricos la investigación de los trabajos previos.
ha permitido captar varias características físicas estables e
intransferibles de los individuos de la especie humana, por III. E STADO DEL A RTE
lo tanto, estos sistemas se basan en emplear las huellas La gran mayoría de los sistemas de reconocimiento de
dactilares, reconocimiento de voz, la fisiología de las manos iris hoy en día se en el algoritmo creado por John Daugman
y del rostro (cara), la escritura a mano, la retina y el iris. [5], por este motivo gran variedad de artículos y trabajos
investigativos con base en el reconocimiento de iris siguen
El iris es un segmento del ojo que se encuentra debajo de este método.
la retina, el cual este compuesto por una membrana coloreada
y circular del ojo humano y contiene en el centro de ella la En el artículo de Seetharaman [4], se muestra la
pupila. Las técnicas de identificación biométrica por iris de estructura base del reconocimiento de iris del método
acuerdo con [4] y [5] se consideran una huella ideal por una de Daugman, el cual consiste en la implementación de cuatro
serie de razones: módulos específicos para realiza una debida identificación y
El patrón floral del iris humano es único, distintivo y reconocimiento del iris.
estable a lo largo de la vida del individuo.
El iris se forma de manera aleatoria durante la gestación El método de Daugman se puede ver en una estructura más
del individuo, por lo tanto, los individuos que son genéti- ampliada en el trabajo realizado en la universidad de Teheran
camente gemelos e idénticos poseen iris diferentes entre [6], en el cual se evidencia el proceso de comparación que
ellos. realiza el método para la verificación del reconocimiento.
la periferia del iris, además se usan métodos de
segmentación para encontrar la región del iris ya que
existen bloqueos por parte de los párpados en la parte
superior e inferior del iris.

2. Extracción de características: Después de encontrar


las características internas y bordes externos del iris
y el mapeo de esta área, un extracto se debe hacer
un vector de características de la cinta obtenida por
medio de la técnica de normalizado [6]. Este vector
debe ser utilizado de tal manera que se utilice el especial
características del tejido del iris y varían de un individuo
a otro.

El vector resultante solo debe codificar la información


vital en el tejido del iris.

3. Codificación y coincidencia: A partir del normalizado


por medio de estrategias matemáticas se realiza una
A continuación, se explica cada uno de los módulos
demodulación de la señal almacenada para así generar
principales del método de Daugman:
un código que posee las características de comparación
del iris, para luego realizar un comparación que permita
1. Adquisición de Imágenes y Pre-procesamiento: La estimar la razón de asertividad del iris reconocido con
adquisición de las imágenes por lo general se realiza con base a una modelo previamente obtenido [6].
cámaras fotográficas digitales, para obtener imágenes
de buena calidad se utilizan cámaras NIR, las cuales 4. Comparación: A partir de un criterio de comparación,
consisten en usar un filtro infrarrojo que les permite el cual sirve de medida con tal que el resultado de
tener una sensibilidad capaz de captar luz infrarroja y coincidencia de las imágenes de un ojo del un individuo
elimina los efectos reflectivos de la luz que se evidencian en diversas circunstancias tenga una coincidencia de
en los ojos cuando se usan cámaras comunes [5]. salida con un alto nivel de certeza entre las imágenes
comparadas, para así decidir si las dos imágenes son
iguales y se pueden relacionar a un mismo individuo [7].

Con base en el articulo de Lopez y Gonzales [8], se


encuentran otros cinco métodos usados para el reconocimiento
del iris, obteniendo la siguiente tabla comparativa con un
porcentaje de fiabilidad del método y las desventajas que
conllevan el uso de cada uno de estos métodos.
El dataset CASIA V1, es un banco de imágenes de
origen chino para uso libre bajo autorización de sus
creadores. La adquisición de las imágenes de CASIA se
realizo bajo el uso de cámaras NIR. El dataset UBIRIS
V1, es un banco de imágenes de la universidad de Beira
Interior de Portugal de uso libre bajo autorización, en
el cual la adquisición de las imágenes se realizó con
cámaras digitales convencionales [4],[5],[6],[7].
Figura 1. Características cuantitativas de los principales métodos de identifi-
El pre-procesamiento se realiza para identificar cación de iris humanos
IV. M ÉTODO
Se plantea el siguiente modelo para la solución del proyecto.

Figura 2. Imagen original

El proceso de adquisición de las imágenes se toman de


la base de datos Ubiris en donde se tienen cerca de 1000
fotografías de ojos de diferentes individuos, con estas se Figura 3. Imagen original
proceden a realizar el procesamiento de los siguientes pasos
del modelo planteado.

Segmentación de Imagen: En esta sección se aísla la


región del iris de los párpados y las pestañas
Filtrado de imagen: Se realiza un desenfoque de la
imagen con el fin de reducir el ruido que posee la imagen
y reducir algunos detalles.
Mapeo del Contorno: Por medio del mapeo se nos
permite identificar la geometría requerida para la identi-
ficación del iris, para así poder discriminar el contorno
de interés para luego realizar la normalización de esta
área.
Normalización del contorno: La etapa de normaliza-
ción de la imagen de interés permite hacer un cambio
de espacio, con el fin de convertir la región circular del
iris en una sección rectangular cartesiana para realizar la
comparación e identificación del iris, para ello se hace Figura 4. Histograma de colores - Canales RGB
el cambio de coordenadas siguiendo la parametrización
mostrada a continuación: Luego, se normalizó el histograma de grises obtenido
previamente para así poder obtener unos bordes adecua-
dos (Figura 7).
Aplicación de filtro Blur: Se aplicó el filtro Blur, esto
para quitar las pestañas que obstaculizan el poder obtener
imagen completa del iris, obteniendo así la Figura 8.
Aplicación del detector de bordes de Canny: Para obtener
los bordes de la imagen y poder identificar correctamente
la pupila se aplicó el detector de bordes de Canny a la
imagen con filtro Blur, obteniendo así la Figura 9.

V. R ESULTADOS
Para realizar el procedimiento, se toma inicialmente una El código utilizado para obtener los resultados vistos en las
imagen con el iris visible como se puede ver en la Figura 3. Figuras 4, 5, 6, 7, 8 y 9 se puede observar en el Listing 1.
Los métodos que se han aplicado son: 1 import cv2
2 import numpy as np
Obtención del histograma: Inicialmente se realiza la 3 from matplotlib import pyplot as plt
aplicación para la obtención del histograma de la imagen 4
original en cada uno de los canales que lo componen (R, 5 imagen = ’Images/1.jpg’
6 img = cv2.imread(imagen)
G, B) como se puede ver en la Figura 4. 7
Posteriormente se realizó el procesado de la imagen a 8 cv2.imshow(’Imagen.jpg’, img)
grises como se puede ver en la Figura 5 y se procedió 9
10 color = (’b’, ’g’, ’r’)
a obtener el histograma de la imagen en grises como se 11
puede observar en la Figura 6. 12 for i, c in enumerate(color):
Figura 5. Imagen en escala de grises.

Figura 7. Histograma Normalizado.

Figura 6. Histograma de la imagen en escala de grises. Figura 8. Imagen con filtro Blur.

13 hist = cv2.calcHist([img], [i], None, [256], [0, 37 cv2.imshow(’Imagen’, bordes)


256]) 38 cv2.waitKey(0)
14 plt.plot(hist, color = c) 39 cv2.destroyAllWindows()
15 plt.xlim([0, 256]) Listing 1. Código utilizado.
16
17 plt.show() Se decidió seguir el paso a paso de:
18 cv2.waitKey()
19 Pasar la imagen a escala de grises para poder observar
20 cv2.destroyAllWindows() correctamente cada una de las partes que componen la
21
22 # Pasar imagen a escala de grises.
imagen.
23 #escalaGrises = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY Aplicar filtro Blur para que no se noten los objetos
) cercanos a los ojos, como lo son las cejas, pestañas u
24 escalaGrises = cv2.imread(imagen, cv2.
IMREAD_GRAYSCALE)
otros objetos.
25 escalaGrises = cv2.equalizeHist(escalaGrises) Aplicar el detector de bordes de Canny para evidenciar
26 # Histograma para detectar la pupila los bordes que componen el ojo luego del procesado
27 hist = cv2.calcHist(escalaGrises, [0], None, [256],
[0, 256])
realizado anteriormente.
28 plt.plot(hist, color = ’gray’) Todo lo anterior se realizó con el objetivo de evitar posible
29 plt.xlabel(’intensidad de iluminacion’) ruido que se obtiene de la imagen original, como lo son las
30 plt.ylabel(’cantidad de pixeles’)
31 plt.show() arrugas, exceso de luz y reducción de pestañas y cejas.
32 # Suavizado de imagen - filtro mediana De acuerdo los resultados que se pueden ver al aplicar el
33 blur = cv2.medianBlur(escalaGrises, 5) filtro Blur en la Figura 8, se puede notar que al realizar el
34 # Detector de bordes Canny
35 bordes = cv2.Canny(blur, 30, 150) suavizado con dicho filtro se logran mantener los datos que
36 son de interés, como lo son la pupila y el iris.
1 import matplotlib.pyplot as plt
2 import numpy as np
3 import cv2,os,scipy
4 from skimage.morphology import black_tophat,disk
5 from scipy import ndimage as ndi
6 from skimage import data
7 from skimage.util import img_as_float
8 from skimage.filters import gabor_kernel
9
10 def rgb2gray(rgb):
11 return np.dot(rgb[...,:3], [0.299, 0.587,
0.114])
12
13 def center(gaussian_img):
14 edges = cv2.Canny(gaussian_img,50,100)
15 cimg = cv2.cvtColor(edges,cv2.COLOR_GRAY2BGR)
16 circles = cv2.HoughCircles(edges,cv2.
HOUGH_GRADIENT,1,20,
Figura 9. Imagen con bordes de Canny. 17 param1=50,param2=30,
minRadius=0,maxRadius=0)
18 circles = np.uint16(np.around(circles))
19 center=circles[0,:]
Por otra parte, el realizar el suavizado previo a la aplicación 20 y=int(center[0,0])
del detector de bordes de Canny permite reducir el ruido 21 x=int(center[0,1])
generado por las pestañas, y otros objetos que pueden llegar 22 r=int(center[0,2])
23 return (x,y,r)
a estar cerca del ojo. 24
25 def radius(gaussian_img):
Posteriormente, mediante la aplicación del repositorio 26 edges = cv2.Canny(gaussian_img,20,20)
27 cimg = cv2.cvtColor(edges,cv2.COLOR_GRAY2BGR)
Iris-recognition-with-python-and-opencv creado por 28 circles = cv2.HoughCircles(edges,cv2.
abhishekghoshh, se realizaron las modificaciones pertinentes HOUGH_GRADIENT,1,20,
para poder obtener la imagen del iris normalizada para poder 29 param1=50,param2=30,
minRadius=0,maxRadius=0)
realizar la comparación pertinente, para ello se utilizaron 30 circles = np.uint16(np.around(circles))
las imágenes del Dataset UBIRIS luego de la conversión de 31 circles=circles[0,:]
JPG a BMP, las imágenes de prueba utilizadas para obtener 32 circles = np.uint16(np.around(circles))
33 radiuses=circles[:,2]
la imagen normalizada y la normalización de la misma se 34 x=[]
pueden ver en las Figuras 10 y 11 respectivamente.[9] 35 for i in range(len(radiuses)):
36 if(radiuses[i]<115 and radiuses[i]>100):
37 x.append(radiuses[i])
38 return int(np.mean(x))
39 def norm_image(path):
40 path = os.path.join(os.getcwd(),path)
41 image=np.array(cv2.imread(path))
42 temp_img=gray_img=np.uint8(rgb2gray(image))
43 selem = disk(6)
44 b_tophat = black_tophat(gray_img, selem)
45 resultant_img=b_tophat+gray_img
46 median_img = cv2.medianBlur(resultant_img,5)
47 gaussian_img=scipy.ndimage.filters.
gaussian_filter(median_img,
48
sigma=1.90, order=0,output=None,
Figura 10. Imágenes de Prueba
49
mode=’reflect’,
50
cval=0.0, truncate=4.0)
51 xc,yc,r=center(gaussian_img)
52 R=radius(gaussian_img)
53 theta = np.arange(0.00, np.pi*2, 0.01) #theta
54 rng=np.arange(0,100)
55 norm_img=np.zeros((rng.size,theta.size))
56 for t in theta:
57 for rc in rng:
58 mc=(R-r)*(rc)/100+r
59 x=int(xc+mc*np.cos(t))
60 y=int(yc+mc*np.sin(t))
61 try:
Figura 11. Imágenes Normalizadas 62 norm_img[rc,np.where(theta==t)]=
temp_img[x,y]
El código utilizado para obtener la normalización de las 63 except Exception as e:
imágenes se puede ver a continuación: 64 pass
65 return norm_img 123 plt.subplot(4,2,4)
66 124 plt.imshow(person4)
67 def compute_feats(image, kernels): 125 plt.xlabel("Imagen normalizada persona 4")
68 feats = np.zeros((len(kernels), 2), dtype=np. 126
double) 127 # prepare reference features
69 for k, kernel in enumerate(kernels): 128 ref_feats = np.zeros((4, len(kernels), 2), dtype=np.
70 filtered = ndi.convolve(image, kernel, mode= double)
’wrap’) 129 ref_feats[0, :, :] = compute_feats(person1, kernels)
71 feats[k, 0] = filtered.mean() 130 ref_feats[1, :, :] = compute_feats(person2, kernels)
72 feats[k, 1] = filtered.var() 131 ref_feats[2, :, :] = compute_feats(person3, kernels)
73 return feats 132 ref_feats[3, :, :] = compute_feats(person4, kernels)
74 133
75 percentage_array=[] 134 print(’Matched against references using Gabor filter
76 def match(feats, ref_feats): banks:’)
77 max_error=15000000 135 print(’original: person 4, match result: ’, end=’’)
78 min_error = np.inf 136 unknown_person_norm_image=norm_image(unknown_img)
79 min_i = None 137 feats = compute_feats(unknown_person_norm_image,
80 for i in range(ref_feats.shape[0]): kernels)
81 error = np.sum((feats - ref_feats[i, :])**2) 138 print(person_names[match(feats, ref_feats)])
82 percentage=int((max_error-error)*100/ 139
max_error) 140 plt.figure(figsize=(10,10))
83 percentage_array.append(percentage) 141
84 # print(str(percentage)+" %") 142 for i in range(4):
85 if error < min_error: 143 plt.subplot(4,2,2*i+1)
86 min_error = error 144 plt.xticks([])
87 min_i = i 145 plt.yticks([])
88 return min_i 146 plt.xlabel(person_names[i]+" eye image")
89 147 plt.imshow(np.array(cv2.imread(image_names[i])),
90 kernels = [] cmap =’gray’)
91 for theta in range(4): 148 plt.subplot(4,2,2*i+2)
92 theta = theta / 4. * np.pi 149 plt.xticks([])
93 for sigma in (1, 3): 150 plt.yticks([])
94 for frequency in (0.05, 0.25): 151 plt.xlabel("Match result : "+str(
95 kernel = np.real(gabor_kernel(frequency, percentage_array[i])+"%")
theta=theta, 152 plt.imshow(np.array(cv2.imread(unknown_img)),
96 sigma_x= cmap =’gray’)
sigma, sigma_y=sigma)) 153 plt.show()
97 kernels.append(kernel)
98
Listing 2. Código utilizado para normalizar.[9
99
100 image_names=[r"C:\Users\wob19\Music\ Luego de la normalización, se realiza la comparación en-
UN_TecnicasDeInteligenciaArtificial\Proyecto\ tre cada una de las imágenes a compara, obteniendo como
Images\eyes\Img_8_1_1.bmp", resultado la Figura 12.
101 r"C:\Users\wob19\Music\
UN_TecnicasDeInteligenciaArtificial\Proyecto\
Images\eyes\Img_5_1_3.bmp",
102 r"C:\Users\wob19\Music\
UN_TecnicasDeInteligenciaArtificial\Proyecto\
Images\eyes\Img_7_1_1.bmp",
103 r"C:\Users\wob19\Music\
UN_TecnicasDeInteligenciaArtificial\Proyecto\
Images\eyes\Img_1_1_1.bmp"]
104
105 person1=norm_image(image_names[0])
106 person2=norm_image(image_names[1])
107 person3=norm_image(image_names[2])
108 person4=norm_image(image_names[3])
109
110 person_names = (’person 1’, ’person 2’, ’person 3’,’
person 4’)
111 unknown_img = r"C:\Users\wob19\Music\
UN_TecnicasDeInteligenciaArtificial\Proyecto\
Images\eyes\Desconocido.bmp"
112 images = (person1,person2,person3,person4)
113
114 plt.subplot(4,2,1)
115 plt.imshow(person1)
116 plt.xlabel("Imagen normalizada persona 1") Figura 12. Resultados de comparación de Iris.
117 plt.subplot(4,2,2)
118 plt.imshow(person2) Buscando el factor diferenciador para el proyecto planteado
119 plt.xlabel("Imagen normalizada persona 2")
120 plt.subplot(4,2,3) inicialmente, se buscó implementar el reconocimiento de iris
121 plt.imshow(person3) mediante la cámara de un PC, para lo cual se implementó el
122 plt.xlabel("Imagen normalizada persona 3") código de Python del Listing 3.
1 import cv2 tipos de bordeado para determinar una solución que se
2 face_cascade = cv2.CascadeClassifier(’ adecúe al iris también.
haarcascade_frontalface_alt2.xml’)
3 eye_cascade = cv2.CascadeClassifier(’haarcascade_eye Al momento de aplicar la segmentación planteada en
.xml’) cada uno de los papers consultados y realizar la norma-
4 cap = cv2.VideoCapture(0) lización con filtro Blur y filtro gaussiano, se puede notar
5 while True:
6 ret, img = cap.read() que al realizarse la conversión del iris a un rectángulo
7 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) y desde una perspectiva lateral la información que es
8
requerida para hacer la comparación puede llegar a ser
9 faces = face_cascade.detectMultiScale(gray)#,
1.3, 5) insuficiente para poder diferenciar entre la información
10 for (x,y,w,h) in faces: esperada y la que se recibe desde el Dataset.
11 #print(w,h) Si bien el aplicar la detección de rostro y ojos es
12 cv2.rectangle(img, (x,y), (x+w, y+h),
(0,255,0), 2) un plus que puede otorgar una interfaz visible para el
13 #cv2.circle(img, (x+100,y+100), w-100, usuario, el llegar a complementar la seguridad para el
(0,255,0), 2) reconocimiento de iris es algo lejano debido a la calidad
14 roi_gray = gray [y:y+h, x:x+w]
15 roi_color = img[y:y+h, x:x+w] de imagen necesaria para obtener el mayor detalle del
16 iris.
17 eyes = eye_cascade.detectMultiScale(roi_gray
) R EFERENCIAS
18 for (ex, ey, ew, eh) in eyes:
19 cv2.rectangle(roi_color, (ex,ey), (ex+ew
, ey+eh), (255,0,0), 2) [1] Vscode(2022). Visual Studio Code. Microsoft.
20 [2] OpenCV(2022). OpenCV AI Courses and Library.
21 cv2.imshow(’img’, img) OpenCV Team.
22
23 if cv2.waitKey(30) & 0xFF == ord(’q’): [3] Zamudio L. Reconocimiento del iris como iden-
24 break tificación biométrica utilizando el vídeo.". Documento
25
reportado para obtener el grado de maestría en ciencias
26 cv2.release()
27 cv2.destroyAllWindows() de sistemas digitales. 2010.
Listing 3. Código utilizado para normalizar.
[4] K. Seetharaman y R. Ragupathy, Ïris Recognition for
personal identification system", Sciverse scienceDirect,
Obteniendo como resultado que si bien detecta el rostro y vol. 38, n.º 1531-1546, 2012.
los ojos como se puede ver en la Figura 13, al momento de [5] M. Gonzales, Reconocimiento de iris", Trabajo de fin
realizar un gran acercamiento para poder ver correctamente de grado, Universitat de Barcelona, Barcelona.
la pupila y el iris, el código deja de funcionar ya que se [6] V. Nazmdeh, S. Mortazavi, D. Tajeddin, H. Nazmdeh
sale de los límites que puede detectar. Lo cual en conjunto y M. Modarresi Asem, Ïris Recognition; From Classic to
con la pérdida de datos al momento de realizar el análisis Modern Approaches", IEEExplorer, p. 8.
comparativo del iris desde una vista de perspectiva lateral, no [7] R. Biswas, J. Uddin y J. Hasan, .A New Approach of
permite obtener los valores adecuados para el reconocimiento Iris Detection and Recognition", International Journal of
del iris. Electrical and Computer Engineering (IJECE), vol. 7, n.º
5, pp. 2530–2536, 2017.
[8] J. LOPEZ CARVAJAL y J. GONZALEZ PATIÑO,
.ESTADO DEL ARTE: RECONOCIMIENTO AUTOMÁ-
TICO DEL IRIS HUMANO", Scientia et Technica Año
XI„ n.º 29, 2005.
[9] Ïris-recognition-with-python-and-
opencv/iris_match.py at master· abhishekghoshh/Iris-
recognition-with-python-and-opencv". GitHub.
https://github.com/abhishekghoshh/Iris-recognition-
Figura 13. Detección de rostro e iris.
with-python-and-opencv/blob/master/code/iris_match.py
(accedido el 25 de noviembre de 2022).
VI. C ONCLUSIONES
Como se puede notar en la Figura 9, el haber realizado
un pos-procesado a la imagen original permite reconocer
correctamente la pupila de la persona a simple vista, lo
que ayudará en la detección de la zona de interés para
la red neuronal.
Si bien el borde obtenido mediante el detector de Canny
cumple la función requerida, es necesario revisar otros

También podría gustarte