Como crear tu propio DETECTOR DE OBJETOS en TIEMPO REAL con Python OpenCV | Template Matching
Summary
TLDREn este video educativo, el presentador, Sánchez, guía a los espectadores a través del proceso de creación de un algoritmo de detección de objetos en tiempo real utilizando Python. Comenzando con la captura de imágenes de objetos específicos, como un llavero de moto, el video explica cómo tomar fotografías de diferentes ángulos para mejorar la detección. Luego, se profundiza en los conceptos teóricos fundamentales detrás del algoritmo de visión artificial llamado 'template matching', que utiliza similitud para identificar objetos en una imagen. El vídeo continúa con una guía práctica paso a paso en Python, incluyendo la importación de bibliotecas, la captura de vídeo en tiempo real, el recorte del objeto de interés, y el uso del método 'match template' para detectar instancias del objeto en la imagen. Finalmente, el presentador ilustra cómo dibujar rectángulos alrededor de los objetos detectados y presenta un ejemplo final con monedas para demostrar el efectivo funcionamiento del algoritmo. El video es una valiosa fuente de información para aquellos interesados en la detección de objetos y el procesamiento de imágenes en Python.
Takeaways
- 📚 Se discute un algoritmo de detección de objetos en tiempo real utilizando Python.
- 🔍 El algoritmo se basa en la técnica de template matching para encontrar objetos similares en una imagen.
- 📈 Se utiliza la librería OpenCV (cv2) para el procesamiento de imágenes y la detección de objetos.
- 📷 Se captura un objeto en tiempo real utilizando la cámara web y se guarda la imagen final como 'objeto.jpg'.
- 🖼️ Se realiza un recorte del objeto en la imagen para usarlo como plantilla para la detección.
- 🔢 Se compara la plantilla con el resto de la imagen mediante cálculo de similitud o disimilitud.
- 🎯 Se utiliza un umbral para determinar si un objeto es lo suficientemente similar a la plantilla para ser detectado.
- 🟦 Primero se lee la imagen en color y luego se convierte a escala de grises para el procesamiento.
- 📐 Se extraen las dimensiones del objeto para ajustar el tamaño del rectángulo que lo encierra.
- 📊 Se utiliza el método de similitud normalizado para obtener valores entre 0 y 1, facilitando la comparación.
- 🖋️ Una vez detectados los objetos, se dibujan rectángulos alrededor de ellos en la imagen final.
Q & A
¿Qué es el algoritmo de detección de objetos en tiempo real que se explicó en el video?
-El algoritmo de detección de objetos en tiempo real explicado en el video es un algoritmo de visión artificial llamado 'template matching'. Este es un método básico de detección de objetos que funciona bien en ambientes controlados.
¿Cómo funciona el algoritmo de detección de objetos 'template matching'?
-El algoritmo 'template matching' funciona tomando una parte de la imagen que contiene el objeto de interés como un 'template' o patrón, y luego busca similitudes de este patrón en el resto de la imagen. Se realiza un cálculo de similitud y aquellos elementos que superen un umbral determinado son considerados como objetos similares al template.
¿Por qué es importante tomar fotos de los objetos desde diferentes ángulos y posiciones?
-Es importante tomar fotos de los objetos desde diferentes ángulos y posiciones para que el algoritmo pueda detectar el objeto en una variedad de situaciones y no solo cuando está en una posición específica. Esto aumenta la versatilidad y eficacia del algoritmo.
¿Qué pasos son necesarios para implementar el algoritmo 'template matching' en Python?
-Para implementar el algoritmo 'template matching' en Python, se deben seguir los siguientes pasos: 1) Importar las librerías necesarias para el procesamiento de imágenes, 2) Capturar el objeto en tiempo real, 3) Guardar el último frame de la captura, 4) Leer y recortar la imagen del objeto, 5) Tomar otra captura para la detección, 6) Leer la imagen de detección en color y convertirla a escala de grises, 7) Utilizar la función 'match_template' para encontrar coincidencias, 8) Dibujar rectángulos alrededor de los objetos detectados.
¿Qué es la imagen en escala de grises y por qué se utiliza en el procesamiento de imágenes?
-La imagen en escala de grises es una representación de una imagen en la que cada píxel es asignado un único valor de gris, dependiendo de la intensidad de luz en ese píxel. Se utiliza en el procesamiento de imágenes porque simplifica el análisis y mejora la eficiencia del algoritmo, reduciendo la cantidad de datos a procesar.
¿Cómo se toman las fotos de los objetos para ser utilizadas como 'template' en el algoritmo?
-Se toman fotos de los objetos en diferentes ángulos y posiciones para capturar su apariencia de manera variada. Estas fotos son luego utilizadas como 'template' o patrón en el algoritmo de detección de objetos, permitiendo al algoritmo comparar y detectar el objeto en la imagen.
¿Por qué se utiliza un umbral en el algoritmo de detección de objetos?
-Se utiliza un umbral en el algoritmo de detección de objetos para determinar qué coincidencias son lo suficientemente fuertes como para ser consideradas como una instancia del objeto de interés. Los valores por encima del umbral indican una alta similitud con el template y son marcados como objetos detectados.
¿Cómo se muestran los resultados del algoritmo de detección de objetos en la pantalla?
-Los resultados del algoritmo de detección de objetos se muestran en la pantalla dibujando rectángulos alrededor de las áreas donde se ha detectado el objeto. Estos rectángulos se superponen sobre la imagen en color original para que los objetos detectados sean fácilmente visibles.
¿Qué tipo de objetos se pueden detectar utilizando el algoritmo de 'template matching'?
-El algoritmo de 'template matching' puede detectar cualquier tipo de objeto, siempre y cuando tengamos una imagen del objeto para usar como template. Esto incluye objetos complejos y de diferentes tamaños, siempre que el objeto sea lo suficientemente distintivo para ser reconocido en la imagen.
¿Cómo se puede mejorar la precisión del algoritmo de detección de objetos?
-La precisión del algoritmo de detección de objetos puede mejorarse tomando fotos del objeto desde múltiples ángulos y bajo diferentes condiciones, utilizando una imagen de alta calidad para el template, y ajustando el umbral de similitud para minimizar las falsas coincidencias.
¿Por qué es importante el procesamiento de imágenes en escala de grises en lugar de en color?
-El procesamiento de imágenes en escala de grises es importante porque reduce la complejidad del análisis, ya que cada píxel solo tiene un valor de gris en lugar de tres valores (para el rojo, verde y azul). Esto hace que el algoritmo sea más eficiente y rápido al buscar similitudes en la imagen.
¿Cómo se guarda la última foto tomada durante la captura en tiempo real?
-La última foto tomada durante la captura en tiempo real se guarda utilizando el nombre de archivo 'objeto.jpg'. Esto permite almacenar la imagen capturada para su posterior uso como template en el algoritmo de detección de objetos.
Outlines
😀 Introducción a la detección de objetos en tiempo real
El primer párrafo presenta la temática del video, que es la explicación de un algoritmo de detección de objetos en tiempo real utilizando Python. Se menciona que se creará una aplicación para detectar cualquier tipo de objeto y cantidad de objetos. Se destaca la importancia de tomar fotografías de los objetos a identificar, como en este caso, dos llaveros de moto, y cómo el algoritmo selecciona estos objetos. Además, se introduce el concepto de 'template matching', un método básico de detección de objetos que funciona bien en entornos controlados, y se describe el proceso que sigue el algoritmo: captura de una imagen, generación de candidatos, cálculo de similitud y decisión para identificar el objeto deseado.
📸 Proceso de captura y selección del objeto
El segundo párrafo se enfoca en el proceso de captura de la imagen del objeto a través de la biblioteca OpenCV (cv2). Se describe cómo se realiza la captura en tiempo real con la ayuda de una cámara USB y cómo se muestra el vídeo en pantalla. Se menciona la interacción con el usuario a través de la presión de una tecla para detener la captura y guardar el último fotograma. Luego, se procede a recortar el objeto deseado del vídeo y se guarda esta imagen para su posterior uso en el algoritmo. Se destaca la importancia de tomar fotografías de diferentes ángulos y posiciones del objeto para mejorar la precisión del algoritmo.
🔍 Aplicación del algoritmo de detección y visualización de resultados
El tercer párrafo detalla cómo se aplica el algoritmo de detección de objetos en la práctica. Se describe el proceso de lectura de la imagen en escala de grises para el procesamiento, a pesar de mostrar la imagen en color. Se extrae el ancho y el alto del recorte del objeto y se utiliza el método 'matchTemplate' para comparar el patrón del objeto con el de la imagen. Se establece un umbral de similitud y se almacenan las ubicaciones donde la detección supera este umbral. Finalmente, se dibujan rectángulos alrededor de los objetos detectados y se muestra la imagen con los resultados del algoritmo. Además, se incluye un ejemplo adicional de detección con monedas para demostrar la efectividad del algoritmo.
Mindmap
Keywords
💡algoritmo de detección de objetos
💡tiempo real
💡aplicación en Python
💡template matching
💡cálculo de similitud
💡OpenCV
💡captura de vídeo
💡recorte de imagen
💡escalas de grises
💡umbral
💡rectángulos
Highlights
El video ofrece una explicación detallada de un algoritmo de detección de objetos en tiempo real.
Se presenta una aplicación en Python para elaborar un algoritmo de detección de objetos.
El algoritmo es capaz de detectar cualquier tipo y cantidad de objetos.
Se describe el proceso de captura de imágenes de objetos para su posterior identificación.
El algoritmo utiliza la técnica de template matching para la detección de objetos.
Se menciona que el algoritmo funciona bien en ambientes controlados.
Se detalla el esquema de detección que incluye generación de candidatos, cálculo de similitud y decisión.
Se explica cómo se extrae el objeto de interés de la imagen para usarlo como patrón.
Se describe el proceso de comparación del patrón con el resto de la imagen para encontrar objetos similares.
Se utiliza la disimilitud para la comparación, lo que implica restar el patrón de la imagen a comparar.
Se muestra cómo se realiza la comparación por similitud multiplicando el patrón con la imagen.
Se destaca la importancia de la elección del umbral en la comparación para identificar objetos.
Se describe el paso a paso de la implementación del algoritmo en Python.
Se menciona la importación de bibliotecas como NumPy y OpenCV para procesar imágenes.
Se detalla cómo capturar el objeto en tiempo real utilizando la biblioteca OpenCV.
Se explica cómo guardar el último fotograma de la captura para su análisis.
Se muestra el proceso de recorte del objeto de la imagen capturada.
Se destaca la utilidad del algoritmo para cualquier tipo de objeto, independientemente de su tamaño.
Se realiza una demostración final con monedas para validar el funcionamiento del algoritmo.
Transcripts
bueno gente bienvenidos una vez más este
canal aprendiz niña les hablas entrego
sánchez y el de hoy les traigo un vídeo
muy muy útil porque les voy a explicar
un algoritmo de detección de objetos en
tiempo real el día de hoy les voy a dar
una aplicación en python y les voy a
explicar bien cómo podemos elaborar un
algoritmo para detectar cualquier tipo
de objeto y cualquier cantidad de
objetos así que no me en radio más y
comencemos con el vídeo y sonidos
entonces lo primero que debemos hacer es
tomarle fotos a los vetos que queremos
identificar en este caso es el llavero
de moto que tenemos
él tomó la gótico ahora lo puede hacer
es cambiarlo de posición para que usted
no me voy a poner y éste lo voy a dejar
y ahí pueden ver cómo en nuestro
algoritmo seleccionan los dos llaveros
de motos así que vamos a ver cómo
funciona
ah
bueno amigos ya estamos aquí en mi
computador y como hago normalmente
primero les voy a dar los conceptos
fundamentales teóricos para después
pasar a la práctica en python así que el
día de hoy vamos a vamos a programar un
algoritmo de visión artificial llamado
template machine este es un algoritmo
básico de detección de objetos que
funciona muy bien en ambientes
controlados donde tomamos una imagen
como descriptor y esto qué quiere decir
esto lo que quiere decir es que vamos a
tomar una parte de la imagen dónde está
nuestro objeto para compararlo con el
resto de la imagen y encontrar más
objetos entonces para la detección vamos
a seguir los siguientes el siguiente
esquema primero vamos a tener una imagen
de entrada de ahí vamos a hacer una
generación de candidatos después vamos a
hacer un cálculo de similitud o de
similitud y por último vamos a hacer una
decisión una parte de decisión y de
generación de ventanas señalando nuestro
objeto así que cómo funciona
bueno básicamente tenemos una imagen con
n elementos porque este algoritmo
funciona con cualquier tipo de elemento
el que ustedes quieran si nuestro
objetivo es identificar los círculos que
están en la imagen en esta imagen que
tenemos aquí en la parte de la izquierda
cierto en esta que tenemos aquí
y lo que queremos es identificar los
círculos nota
más bien paso 1 lo primero que debemos
hacer es recordar la parte de la imagen
que contiene el objeto que queremos
identificar en este caso como queremos
identificar los círculos entre
recortamos la parte de la imagen que
pertenece al círculo ahorita si no está
extraemos el objeto que queremos
identificar ya que este va a ser el
patrón que vamos a comparar con el resto
de la imagen lo que le estaba diciendo
tomamos ese pedacito de la imagen y lo
comparamos con el resto cierto paso
número 2 ahora
debe de pasar el patrón por toda la
imagen buscando similitudes y
similitudes con los otros objetos
entonces es muy sencillo ver que debemos
de hacer aquí tomamos este patrón que ya
lo ya lo habíamos notado aquí tomamos
este patrón y lo que vamos a hacer es
pasarlo por toda la imagen de izquierda
a derecha y de arriba hacia abajo
buscando elementos parecidos o elementos
similares cierto entonces nota en este
caso vamos a realizar la comparación por
disimilitud eso quiere decir que debemos
de restar el patrón con el segmento de
la imagen a comparar entonces es muy
sencillo que queremos hacer acá entonces
como queremos comparar este patrón con
el resto de la imagen en todo lo primero
que hacemos es compararlo con este
espacio que está aquí en blanco listo lo
comparamos con este espacio en blanco
tenemos dos magnitudes diferentes es
decir digamos que este vamos a hacer un
ejemplo de que este patrón base va a ser
igual a 5 y pues esto va a ser igual a 0
entonces 50 va a ser 5 cierto como son
magnitudes diferentes eso nos tiene que
dar un valor diferente de 0 ahora vamos
a hacer el ejemplo comparándolo con esta
el siguiente segmento de la imagen a
venga aquí tenemos dos elementos iguales
es decir tenemos dos magnitudes iguales
que esto es como si dijéramos 5 es un
ejemplo menos 5 eso qué quiere decir 5
menos 50 listo entonces así nos vamos a
ir por toda la imagen asignándole y
digamos que este umbral a cada uno de
los segmentos de la imagen con el fin de
que más adelante podamos determinar los
ceros porque en este caso lo estamos
haciendo una comparación por disimilitud
no está en caso de que seamos deseemos
hacer la comparación por similitud
debemos de multiplicar el patrón con el
segmento de la imagen a comparar quiere
decir que ya no nos debe dar 0 sino que
nos debe dar
255 a multiplicar los dos elementos
iguales cierto es una multiplicación con
otras operaciones conjuntas que no vamos
a profundizar en este vídeo porque se
nos van a ir media hora cierto listo en
donde es paso número 3
en el paso número 3 lo que hacemos es
tener en cuenta las comparaciones y
teniendo en cuenta de las comparaciones
buscamos en los píxeles que nos dieron 0
255 dependiendo de la comparación que
hicimos y los encerramos en un
rectángulo entonces en este caso como
tenemos estos dos elementos que son
iguales entonces debemos de n de
encerrar en un rectángulo estos dos
elementos que pertenecen a los círculos
que era el objeto que que queremos
dientes de carne ahora teniendo en
cuenta esto vamos a pasar a la práctica
en paita bueno gente ya estamos aquí en
python y cómo pueden observar este
código todavía no le pasaba a júpiter
notebook así que tengan en cuenta que
cuando lleguemos a mil 500 suscriptores
les voy a estar liberando este y todos
los códigos de visión artificial que
subido en los últimos días así que
empecemos lo primero que hacemos es
importar las librerías numbi y cb2 que
la librería para hacer el procesamiento
de imágenes como tan cierto entonces que
lo primero que hemos de hacer capturar
el objeto en tiempo real como lo hacemos
lo hacemos con cb2 punto vídeo captura y
aquí entre paréntesis debemos de colocar
la cámara que
utilizar en este caso colocó uno porque
quiere utilizar una cámara que tengo
conectado por usb en caso de que quiera
utilizar la cámara de mi computador
portátil pues colocó cero cierto si
ustedes tienen más cámaras conectadas
entonces van a colocar 2 3 4 5 las que
ustedes tengan conectadas así que a
continuación hacemos un while con el fin
de mostrar el vídeo en pantalla entonces
lo primero que hacemos es leer el vídeo
con cap punto royal y nos mostramos en
pantalla con un título que va a ser
objeto cierto a continuación lo que
hacemos es unir para leer una tecla de
nuestro teclado valga la redundancia
cual tecla vamos a leer vamos a leer la
tecla que tenga el código aquí oa la que
le pertenezca el código aquí 27 que es
la tecla ese escape quiere decir que
cuando le demos escape vamos a romper
ese why quiere decir que vamos a romper
ese vídeo y lo que vamos a hacer a
continuación es guardar ese último frame
ese último fotograma esa última foto la
vamos a acordar con el nombre de objeto
punto jpg
a continuación lo que hacemos es cerrar
el vídeo y cerrar la ventana
listo ahora lo que hacemos es leer la
imagen para recortar el objeto como tal
entonces como lo hacemos en off que es
una abreviación de objeto leemos la
imagen que guardamos anteriormente ahí
vamos bien y ahora lo que hacemos es un
recorte al cuadrante central de la
pantalla o sea de esa de ese vídeo que
generamos anteriormente por eso cuando
queremos identificar x objetos entonces
lo acomodamos en el cuadrante central y
le tomamos la foto por eso es que este
algoritmo sirve para cualquier tipo de
objeto
tienen que tener en cuenta que desde un
objeto muy grande pues hacemos el
recorte más grandecito y ya listo y lo
mostramos en pantalla como les muestra
anteriormente como les va a mostrar a
continuación listo una vez hacemos esto
lo que hacemos es tomar otra captura
totalmente igual pero porque yo hago
esto yo podría quedarme con la captura
anterior
yo lo hago con el fin de que movamos los
objetos de que los cambiamos de posición
para que ustedes encuentra que en verdad
pues el algoritmo funciona y funciona
muy bien en este ambiente controlado
entonces volvemos a hacer exactamente lo
mismo que es leer después el vídeo
mostrarlo y tomar el último prime pero
en este caso vamos a guardar esa punto
como detección punto jpg cierto que es
lo que estamos haciendo aquí las
guardamos como dirección punto jp
y ahora lo que vamos a hacer es leer esa
detección esa imagen entonces tengan en
cuenta algo la vamos a leer y la vamos a
almacenar en img pero en este caso las
almas la leímos con los tres canales es
decir rgb es decir a color vean que el
recorte el recorte lo leí en un solo
canal
es decir en escala de grises listo
entonces la leo a color cierto entonces
la vamos a tener a color y porque la
leímos a color porque ahí es donde vamos
a mostrar en pantalla para que se vea
bonito y toda la cosa pero lo vamos a
pasar a escala de grises para hacer todo
el procesamiento de los objetos entonces
es muy importante que tengan esa
diferencia a color para mostrarla y en
escale grises para el procesamiento al
instante de la para la máscara grises y
la mostramos ahí vamos muy bien
ahora lo que hacemos es extraer el ancho
y el alto del recorte del objeto porque
porque no queremos tener un objeto muy
grande por decir algo y un rectángulo
chiquito no queremos que si el objeto es
grande entonces el rectángulo que del
mismo tamaño cierto entonces por eso lo
hacemos y ahora si realizamos la
detección entonces como hacemos la
infección se ve dos puntos match
template colocamos la imagen que
acuérdense que va en escala de grises si
la imagen colocamos el patrón el objeto
que nosotros queremos identificar
entonces colocamos el recorte y aquí
colocamos el método en este caso yo
utilice un método de de similitud
normalizado esto quiere que quiere decir
que no nos va a dar 255 sino 1 el valor
máximo va a ser 1 y el valor mínimo va a
ser 0 entonces como lo hicimos por
similitud queremos el valor máximo es
decir 1 por eso colocamos un umbral de
0.75 porque porque los objetos que estén
por encima de 0.75 quiere decir que son
muy parecidos a nuestro objeto
y los vamos a subrayar o los vamos a
encasillar en un rectángulo entonces por
eso coloque ese umbral listo entonces
las ubicaciones las vamos a almacenar
cuando la detección sea mayor o igual a
0.75 que fue lo que les acabe explicar
cierto entonces si es mayor a 0 75 se
parece mucho a nuestro objeto así que
vamos a guardar esa ubicación que la
necesitamos y por último lo que haremos
es un x con el fin de dibujar esos
rectángulos entonces se ve dos
rectángulos lo colocamos en la imagen a
color recuerden que las mostramos le da
color pero hicimos el procesamiento en
escala de grises y lo que hacemos es
colocarle este ancho este alto colocarle
este color y colocarle este grosor eso
fue absolutamente todo y por último
mostramos pues ya la imagen con los
rectángulos dibujados así que vamos a
ver cómo funciona un último
funcionamiento de nuestro algoritmo
bueno ahora vamos a hacer un último
ejercicio con las monedas entonces
primero le tomaron foto a la moneda que
queremos identificar
al mismo tiempo entonces debería
identificar las tres del agua cambiar de
posición para que usted no vayan a
pensar que de pronto estamos haciendo
trapo de estatura acá también
[Música]
ahí está ya identificamos las tres
monedas así que nadie espero les haya
gustado el vídeo nos vemos una próxima
ocasión y hasta luego
[Música]
Посмотреть больше похожих видео
DETECCION Y SEGUIMIENTO DE CARROS Y MOTOS CON VISION ARTIFICIAL | Seguimiento de Objetos con Python
Estatística Básica para Ciência de Dados
Insertar datos en MongoDB
Curso de programación desde cero | Programación Orientada a Objetos Principios básicos #7
Como fazer amostragem de dados com Python
Cómo AGREGAR objetos a un VIDEO | Motion Tracking - After Effects Tutorial
5.0 / 5 (0 votes)