INSTITUTO POLITÉCNICO NACIONAL
UNIDAD PROFESIONAL INTERDISCIPLINARIA EN
INGENIERÍA Y TECNOLOGÍAS AVANZADAS
INGENIERÍA MECATRÓNICA
SISTEMAS DE VISIÓN ARTIFICIAL
Proyecto Final
Jiménez Díaz Oscar Daniel
Ramírez León Francisco Xavier
Saucedo Andrade Luis Ángel
Vazquez Olvera Lizeth
Profesor: Erick Huitrón Ramírez
Grupo: 4MV8
2024-2
RESUMEN
El proceso es que a partir de tomar una fotografía frontal se obtiene el contorno
de la imagen, lo cual nos proporciona los píxeles que lo componen, se realiza un
conteo de los píxeles y de acuerdo con pruebas se obtuvo la equivalencia de
pixeles a centímetros, tras ello el software es capaz de obtener las medidas de
los tepalcates. Estas medidas reales nos permitirán comprender mejor las
características físicas de este objeto y aplicar los conceptos teóricos en un
contexto práctico. En este informe, presentaremos los métodos utilizados para
medir el tepalcate, describiremos el proceso de obtención de datos y
analizaremos los resultados.
INTRODUCCIÓN
La reconstrucción 3D es un proceso mediante el cual se crea una representación
tridimensional de un objeto utilizando datos de entrada, como fotografías
bidimensionales (2D) o escaneos del objeto real. Algunas aplicaciones
importantes de la reconstrucción 3D incluyen:
Modelado y Visualización: Permite crear modelos 3D realistas para visualizar
objetos, edificios, paisajes o incluso partes del cuerpo humano con mayor detalle.
Arqueología y Patrimonio Cultural: Ayuda a preservar y estudiar artefactos
históricos, monumentos y sitios arqueológicos.
Ingeniería y Diseño Industrial: Permite diseñar y analizar prototipos, piezas
mecánicas y estructuras complejas.
Robótica y Visión por Computadora: Es fundamental para la navegación
autónoma de robots y la detección de objetos en entornos 3D.
MARCO TEÓRICO
Visión Artificial. ¿Qué es?
La visión artificial es un campo de la IA que permite que las computadoras y los
sistemas obtengan información significativa de imágenes digitales, videos y otras
entradas visuales, y tomen acciones o hagan recomendaciones basadas en esa
información.
La visión artificial funciona de manera muy similar a la visión humana, excepto
que los humanos tienen una ventaja. La vista humana tiene la ventaja de las
experiencias y los contextos aprendidos para diferenciar entre los objetos, qué
tan lejos están, si se están moviendo o si hay algo mal en una imagen.
La visión artificial entrena a las máquinas para realizar estas funciones, pero tiene
que hacerlo en mucho menos tiempo con cámaras, datos y algoritmos en lugar
de retinas, nervios ópticos y una corteza visual. Debido a que un sistema
capacitado para inspeccionar productos o la manufactura de estos puede analizar
miles de productos o procesos por minuto puede superar rápidamente las
capacidades humanas, notando defectos o problemas imperceptibles.
¿Cómo funciona?
La visión artificial necesita de muchos datos. Ejecuta análisis de datos una y otra
vez hasta identificar diferencias y, finalmente, reconocer imágenes.
Por ejemplo, para entrenar a una computadora para que reconozca los
neumáticos de los automóviles, es necesario alimentarla con grandes cantidades
de imágenes de neumáticos y elementos relacionados con los neumáticos para
aprender las diferencias y reconocer un neumático, especialmente uno sin
defectos.
Se utilizan dos tecnologías esenciales para lograr esto: un tipo de machine
learning llamado deep learning y una red neuronal convolucional (CNN).
Machine Learning.
Utiliza modelos algorítmicos que permiten que una computadora se enseñe a sí
misma sobre el contexto de los datos visuales.
Red Neuronal Convolucional.
Ayuda a un modelo de machine learning o deep learning a "ver" al dividir las
imágenes en píxeles a los que se les asignan etiquetas o rótulos. Utiliza las
etiquetas para realizar convoluciones (una operación matemática en dos
funciones para producir una tercera función) y hace predicciones sobre lo que
está "viendo".
Aplicaciones de la Visión Artificial
Las aplicaciones del mundo real demuestran lo importante que es la visión
artificial para las empresas, el entretenimiento, el transporte, la atención médica
y la vida cotidiana. Un factor clave para que estas aplicaciones crezcan es la
avalancha de información visual que fluye desde teléfonos inteligentes, sistemas
de seguridad, cámaras de tráfico y otros dispositivos visualmente instrumentados.
Ejemplos
• Clasificación de imágenes
La clasificación de imágenes ve una imagen y puede clasificarla (un perro, una
manzana, la cara de una persona). De manera concisa, puede predecir con
exactitud que una imagen determinada pertenece a un cierto tipo.
• Detección de objetos
La detección de objetos puede usar la clasificación de imágenes para identificar
una determinada clase de imagen y luego detectar y tabular su apariencia en una
imagen o vídeo.
• Seguimiento
El seguimiento de objetos sigue o rastrea un objeto una vez que se detecta. Esta
tarea a menudo se ejecuta con imágenes capturadas en secuencia o con videos
en tiempo real.
• Recuperación de imágenes basada en contenido
La recuperación de imágenes basada en contenido utiliza la visión artificial para
navegar, buscar y recuperar imágenes de grandes almacenes de datos,
basándose en el contenido de las imágenes en lugar de en las etiquetas de
metadatos asociadas con ellas.
Metrología con Visión Artificial.
Es una técnica que combina la ciencia de la medición con la tecnología de visión
artificial para realizar mediciones precisas y automatizadas. Esta técnica utiliza
cámaras y sistemas de procesamiento de imágenes para realizar mediciones con
alta precisión en una amplia gama de aplicaciones industriales y científicas.
¿Qué pasos realizar para una correcta medición?
• Captura de imágenes: Se utilizan cámaras digitales de alta resolución para
capturar imágenes de componentes y objetos que se desean medir. Las
imágenes pueden ser tanto en 2D como en 3D, dependiendo de las
necesidades.
• Procesamiento de imágenes: Una vez que tenemos la imagen, se aplican
procesamientos de imagen para analizar y extraer información. Se pueden
detectar los bordes, hacer una segmentación de objetos o identificar otras
características.
• Calibración: La calibración del sistema de visión es primordial, para evitar
distorsiones. También en necesario conocer los parámetros intrínsecos de
la cámara, distorsión radial y tangencial, para evitar mediciones erróneas
en el mundo real.
• Extracción de datos: Después del procesamiento, se obtienen datos como
ángulos, dimensiones, áreas o volúmenes.
• Análisis: Los datos obtenidos se comparan con valores de referencia para
determinar si los objetos cumplen los criterios propuestos y no hay
desviaciones significativas, así como cumplir los estándares de calidad.
PLANTEAMIENTO DEL PROBLEMA
El propósito final del Proyecto grupal es realizar un modelo 3D de una pieza de
estudio para lo que es necesario conocer las medidas del objeto para obtener
un modelo real y preciso.
OBJETIVO PERCIBIDO POR EL EQUIPO
Diseñar un algoritmo en un entorno de desarrollo libre para obtener las
dimensiones reales de un tepalcate a partir de una fotografía frontal y una lateral,
obtener los contornos del tepalcate y la firma de la imagen.
DESARROLLO
Como primer paso desarrollaremos un programa que nos ayude a capturar una
imagen de nuestro tepalcate, y realizaremos un tratamiento de imagen para
detectar bordes y así poder trazar un recuadro alrededor del objeto y calcular un
área de pixeles, una vez que tenemos esto, calculamos una relación de la
distancia a la cual se está haciendo la toma, y así podemos determinar las
medidas reales de nuestra pieza. Realizaremos este mismo paso en 2 tomas,
para poder obtener el largo, ancho y alto de nuestra pieza.
PROGRAMA DE MEDICIONES
# print("Medidas")
if hasattr(img_label, 'pil_image'):
if hasattr(root, 'cropped_image'):
if (not isinstance(imagenLateral, list)):
print("Medición")
# Generación de una nueva ventana para observar los resultados
new_window = [Link](root)
new_window.title("Medidas")
new_window.geometry("800x650")
# Procesamiento de la imagen
color1 = [Link](root.cropped_image)
color1 = [Link](color1, cv2.COLOR_RGB2HSV)
imagen = img_label.pil_image
imagen1 = imagen
imagen2 = imagenLateral
w, h = [Link]
w2, h2 = [Link]
while h > 300:
imagen1 = [Link]((int(float(w) / 2), int(float(h) /
2)))
w, h = [Link]
while h2 > 300:
imagen2 = [Link]((int(float(w2) / 2), int(float(h2)
/ 2)))
w2, h2 = [Link]
wR1, hR1 = [Link]
imagen = [Link](imagen)
imagen_hsv = [Link](imagen, cv2.COLOR_RGB2HSV)
imagenLateral = [Link](imagenLateral)
imagenLateral_hsv = [Link](imagenLateral,
cv2.COLOR_RGB2HSV)
tk_image = [Link](imagen1)
label1 = [Link](new_window, image=tk_image)
[Link] = tk_image # Mantener una referencia para evitar
que la imagen sea recolectada por el garbage collector
[Link](x=10, y=50)
tk_image2 = [Link](imagen2)
label2 = [Link](new_window, image=tk_image2)
[Link] = tk_image2 # Mantener una referencia para evitar
que la imagen sea recolectada por el garbage collector
[Link](x=wR1 + 35, y=50)
# [Link]=imagen_hsv
hsv_mean = [Link](color1)[:3]
magentaBajo = [Link]([hsv_mean[0] - 20, 50, 50], np.uint8)
magentaAlto = [Link]([hsv_mean[0] + 20, 255, 255], np.uint8)
# Creacion de la mascara
mascara_magenta = [Link](imagen_hsv, magentaBajo,
magentaAlto)
mascara_magentaLateral = [Link](imagenLateral_hsv,
magentaBajo, magentaAlto)
segmentada_magenta = cv2.bitwise_and(imagen, imagen,
mask=mascara_magenta)
segmentada_magentaLateral = cv2.bitwise_and(imagenLateral,
imagenLateral, mask=mascara_magentaLateral)
# print(segmentada_magenta)
# Binarización de la imagen
try:
segmentada_magenta = [Link](segmentada_magenta,
cv2.COLOR_HSV2RGB)
segmentada_magentaLateral =
[Link](segmentada_magentaLateral, cv2.COLOR_HSV2RGB)
except [Link]:
print("No es HSV")
segmentada_grises = [Link](segmentada_magenta,
cv2.COLOR_RGB2GRAY)
segmentada_grisesLateral =
[Link](segmentada_magentaLateral, cv2.COLOR_RGB2GRAY)
_, imgBin = [Link](segmentada_grises, 28, 255,
cv2.THRESH_BINARY)
_, imgBinLateral = [Link](segmentada_grisesLateral, 28,
255, cv2.THRESH_BINARY)
# Operaciones morfológicas para obtención de bordes
kernel = [Link]((3, 3), np.uint8)
imgBin = [Link](imgBin, cv2.MORPH_CLOSE, kernel,
iterations=5)
imgBin = [Link](imgBin, cv2.MORPH_OPEN, kernel,
iterations=5)
imgBin = cv2.bitwise_not(imgBin)
imgBin = cv2.bitwise_not(imgBin)
imgBinLateral = [Link](imgBinLateral, cv2.MORPH_CLOSE,
kernel, iterations=7)
imgBinLateral = [Link](imgBinLateral, cv2.MORPH_OPEN,
kernel, iterations=7)
imgBinLateral = cv2.bitwise_not(imgBinLateral)
imgBinLateral = cv2.bitwise_not(imgBinLateral)
# imagenDeSalida=imgBin
# Cálculo de longitudes en pixeles
fy = [sum(i) for i in imgBin]
fx = [sum(i) for i in zip(*imgBin)]
# print(fy)
# print(fx)
inx = []
iny = []
for k in range(len(fx)):
if (fx[k] > 0 & fx[k - 1] == 0):
# inx=k
[Link](k)
# print(inx)
IX = inx[1]
FX = len(inx) + inx[1] - 1
longitudx = FX - IX
for k in range(len(fy)):
if (fy[k] > 0 & fy[k - 1] == 0):
# iny=k
[Link](k)
IY = iny[1]
FY = len(iny) + iny[1] - 1
longitudy = FY - IY
# Cálculo de longitudes en pixeles 2
fy = [sum(i) for i in imgBinLateral]
fx = [sum(i) for i in zip(*imgBinLateral)]
# print(fy)
# print(fx)
inxLateral = []
inyLateral = []
for k in range(len(fx)):
if (fx[k] > 0 & fx[k - 1] == 0):
# inx=k
[Link](k)
# print(inx)
IX = inxLateral[1]
FX = len(inxLateral) + inxLateral[1] - 1
longitudxLateral = FX - IX
# for k in range(len(fy)):
# if (fy[k]>0 & fy[k-1]==0):
# #iny=k
# [Link](k)
# IY=inyLateral[1]
# FY=len(inyLateral)+inyLateral[1]-1
# longitudyLateral=FY-IY
textoLargo = f'Largo: {longitudy} pixeles, {round(longitudy /
30, 3)} cm'
textoAncho = f'Ancho: {longitudx} pixeles, {round(longitudx /
30, 3)} cm'
textoAlto = f'Alto: {longitudxLateral} pixeles,
{round(longitudxLateral / 30, 3)} cm'
# print([Link])
title_label1 = [Link](new_window, text=(textoLargo),
font=("Helvetica", 10, "bold"))
title_label1.place(x=10, y=400)
title_label2 = [Link](new_window, text=(textoAncho),
font=("Helvetica", 10, "bold"))
title_label2.place(x=10, y=420)
title_label4 = [Link](new_window, text=(textoAlto),
font=("Helvetica", 10, "bold"))
title_label4.place(x=10, y=440)
# print(longitudx)
# print(longitudy)
imagenLateral = []
else:
segundaImagen()
else:
[Link]("Warning", "No hay ninguna imagen cargada
para medir.")
else:
[Link]("Warning", "No hay ninguna imagen cargada para
medir.")
# Definir la variable global umbral
umbral = 128
RESULTADOS
Interfaz:
Mediciones:
CONCLUSIONES
Jiménez Díaz Oscar Daniel
Durante este proyecto enfrentamos varios problemas reales al trabajar en un
proyecto integrado por varios equipos, fue complicada la organización de todos
ya que cada uno trabajaba a su ritmo y lo hacia de formas distintas, la
comunicación fue de los principales problemas al no conocernos entre nosotros,
pero tras un tiempo de adaptación, dialogo y tomar la iniciativa, se logró llegar a
un acuerdo donde se decidían aspectos como la forma, materiales, luces,
elementos, entorno de desarrollo, etc. Sin embargo, al final la integración continuó
siendo un problema por la necesidad de la cabina al mismo tiempo y que algunos
equipos no fueron capaces de terminar su parte a tiempo afectaron a los demás.
Personalmente fue un reto ya que al no tener amplios conocimientos en el
lenguaje de programación Python, tuve que investigar e intentar aprenderlo por
mi cuenta, aunque el equipo de mediciones fue el que me apoyó a entender como
hacerlo.
Ramírez León Francisco Xavier
El desarrollo de este proyecto nos permitió la integración de los conceptos vistos
durante el curso de sistemas de visión artificial, ya que en el equipo en el que
participe (mediciones) se tuvo que usar varios métodos para la obtención de las
mediciones de los Tepalcates, como la binarización de la imagen a partir de una
de sus capaz de la imagen original, también se utilizaron operaciones
morfologicas, para quitar ruido en la imagen binarizada y corregir algunas
situaciones que se pueden presentar por las diferentes características de los
Tepalcates. Ademas para la obtención de la firma de la imagen, primero se utilizó
el algoritmo de Canny al ser un algoritmo bastante preciso en la obtención de
bordes en las imágenes y después con el procedimiento visto en clase se obtuvo
la firma de imagen.
Todo esto nos sirvió para conocer un caso de uso real de los métodos vistos en
clase, siempre teniendo en cuenta la importancia del control del entorno, debido
a que son muy susceptibles a la luz.
La integración en equipo fue un poco complicada debido a que al ser un proyecto
de varias personas, era complicado estar al pendiente de todo, pero al final el
equipo de medición logro su objetivo.
Saucedo Andrade Luis Ángel
En este proyecto logramos reafirmar de buena manera nuestros conocimientos,
donde analizamos una imagen, y realizamos el tratado de la imagen donde
binarizamos la imagen para poder detectar bordes y así mismo su firma, una vez
que tenemos eso podemos detectar los bordes del objeto y así tener las medidas
que abarca en pixeles, con una regla de 3, lo convertimos los pixeles a una
medida real en centímetros para presentar estas medidas.
El reto de trabajar en conjunto y depender de otros equipos fue algo que nunca
había hecho, fue un proyecto muy ambicioso que me agrado bastante, ya que
logramos tener buenos resultados, tanto en equipo, como en el grupo completo.
Vazquez Olvera Lizeth
A través de este proyecto, se pudieron reafirmar conceptos vistos a lo largo del
curso de Sistemas de Visión Artificial, puesto que se abordaron diferentes temas
que llevaron a realizar manipulación de una imagen para obtener información de
ella.
En esta ocasión, se utilizaron métodos de binarización, obtención de bordes,
obtención de capas de color, para poder obtener las medidas de una pieza.
Es importante conocer estas técnicas, ya que a partir de ellas es el comienzo
para realizar diferentes procesos y de esta manera obtener parámetros para su
respectiva aplicación.
Para el proyecto, se enfocó principalmente en obtener las medidas de una pieza
de al menos 15x15 cm, realizado a través de las técnicas anteriormente
mencionadas, con el uso de un lenguaje de alto nivel, que en este caso fue
Python.
BIBLIOGRAFÍA
[1] Metrología con visión artificial - ATRIA Innovation. (s.f.). ATRIA Innovation.
[Link]
artificial/#:~:text=La%20metrología%20con%20visión%20artificial%20es%20una
%20técnica%20que%20combina,realizar%20mediciones%20precisas%20y%20
automatizadas.
[2] ¿Qué es la visión artificial? | IBM. (s.f.). IBM - United States.
[Link]