Transcripciones
1. Descripción general: Hola. En esta clase, veremos
como detectar objetos en imágenes y videos usando
deep learning y CV abierto. Mi nombre es Yossi y
seré tu instructor
en esta clase. Llevo programando
desde 2019. Y yo soy el autor del vlog. No te repitas,
donde ayudo a más de 5 mil desarrolladores cada mes a aprender
más sobre Python, aprendizaje
automático
y visión por computadora. Entonces, ¿qué es la detección de objetos? detección de objetos
es el proceso de localizar objetos
con cajas delimitadoras, una imagen o un video. Es una de las
tareas más importantes en la visión por computador. Y tiene muchas aplicaciones
en diversos campos, como vigilancia, personas,
conteo, autos autónomos, etc.
Ahora, hay una
diferencia entre detección de
objetos y la clasificación de
imágenes. Entonces, básicamente,
la detección de objetos es el proceso que localiza
objetos en una imagen. Si bien la clasificación de imágenes
es el proceso que asigna etiquetas a las imágenes en
función de su contenido. Así que entremos a la clase y empecemos a construir nuestro proyecto.
2. Instalación: Lo primero que tenemos que
hacer es instalar
los paquetes requeridos útiles
para el procesamiento de imágenes. Entonces vamos a instalar
OpenCV y el non pipe. Primero comencemos con OpenCV, abrimos una nueva
ventana de terminal y ejecutemos el comando pip,
Install OpenCV polygon. En mi caso, se puede ver que
tengo CV abierto ya instalado. Requisito, ya satisfecho. Pero solo quiero crear
un entorno virtual. Para que el trío pueda ver lo que
obtienes cuando lo instalaste. Así que vamos a crear el entorno
virtual. Envidiamos. Hablemos de TV. Ahora, vamos a
preinstalar CV abierto. Cv. Aquí puede ver que OpenCV se instaló
con éxito junto con CV sin tubería abierta. Entonces no necesito
instalar NumPy. Aquí puedes ver que
tengo abierto CV 4.54.5 versión de OpenCV y la versión de
non pi air es 1.22 a uno.
3. Detección de objetos en imágenes: Ahora en este video, usaremos el detector de disparo
único del trabajo combinado con la arquitectura MobileNet como nuestro detector de objetos
basado en deep learning. Entonces lo primero
que tenemos que
hacer es importar nuestras bibliotecas. Entonces diremos importar CB2. Y también podemos cargar nuestra imagen. Entonces vamos a decir Marine aquí, la olla para nuestra imagen. Y también podemos
redimensionarlo también. Entonces cuando decimos CV
para cambiar el tamaño de la imagen, digamos 644 el ancho. Y para 84 la altura. Ahora vamos a obtener la altura de
la imagen y el ancho. Entonces no diríamos
imagen punto forma 0. Y para la altura
dirá forma uno. Ahora necesitamos los pesos y el
archivo de configuración para nuestro modelo. Por lo que descargó este phi es de la documentación de OpenCV. Entonces tenemos dos expedientes aquí. Pondré un enlace
a estas personas en la versión textual de esta parte. Entonces ahora que tenemos todos
los archivos que necesitamos, podemos cargar nuestro modelo. Para que podamos escribir
aquí nuestra red. Entonces no veremos V2 punto DNN punto leído en tipo de flujo. Y en el encabezado
proporcionaremos los pesos y el archivo de
configuración. Entonces no podemos escribir estas
dos variables aquí. Cuando dices que el
peso es igual a y nosotros brindamos el
camino a nuestro peso. Entonces este es el
archivo que contiene los pesos para el modelo. Se puede decir modelo. Esta es la
arquitectura de nuestro modelo. Ahora lo que podemos hacer es eso, así que aquí tenemos el archivo de nombres de
cacao. Cuando lo pones aquí
dentro del proyecto. Entonces básicamente este archivo contiene las cláusulas que podemos detectar. Así podremos abrir el
archivo e instalar las etiquetas de clase en la lista. Podemos usar Context
Manager para adultos, así lo diremos con open. Y aquí te brindamos el camino
a nuestro nombre de cacao está bien. Sólo tienes que copiarlo de aquí. Aquí diremos leer archivo. Aquí almacenaremos las etiquetas de
clase dentro, dentro de la lista que
vamos a nombrar nombres. Entonces vamos a decir aquí los nombres de
clúster es igual
a una lista vacía. Aquí podemos escribir f, lote, llovido, despojado y puntos. Y nos dividiremos
en base a la nueva línea. Ahora necesitamos preprocesar
nuestra imagen y tenemos una función que hará todo
el preprocesamiento por nosotros. Entonces podemos decir aquí, blob es igual a c v2 punto DNN. Y aquí usaremos la imagen de envolvente
funcional. Aquí te brindamos nuestra imagen. Y ahora aquí tenemos algunos parámetros que
están establecidos por defecto. Estos se proporcionan a partir de
la documentación. Entonces básicamente aquí el
primero es el factor de escala. Podemos poner 1, dividimos por 127.5. Y entonces aquí tenemos el
tamaño para la imagen de salida. No podemos escribir 320. Y el último argumento aquí es el medio de valores de producción. Ahora podemos escribir
uno a uno a 7.5. Lo mismo aquí y lo
mismo aquí. A continuación, podemos establecer el, este blob como entrada para la red y obtener
la predicción de salida. Entonces podemos decir aquí, no mucho. Entrada. Y vamos a proporcionar nuestro blob. Para hacer la predicción. Diremos que la salida
es igual a cuatro. Ahora aquí tenemos
nuestras predicciones. Así que vamos a imprimir la
forma de esta variable. Diremos que la forma de salida
será escribir nuestro código. Entonces aquí, como pueden ver, tenemos una forma de 11107. Entonces aquí tenemos las
detecciones, el pelo siete, tenemos las cajas delimitadoras, la confianza, y
alguna otra información. Entonces ahora lo que podemos hacer, podemos recorrer esta variable
para obtener las detecciones. Entonces diremos para
detección en salida. Aquí diremos 00. Y aquí nos llevamos todo. Y aquí también nos
llevamos todo. Ahora aquí obtendremos
la confianza del modelo para la detección de
corriente. Entonces podemos decir Pro
Really t es igual al segundo argumento del segundo elemento
de nuestra detección. Ahora podemos filtrar
las detecciones de errores. Entonces ahora podemos atar si nuestra probabilidad o la
confianza del modelo es,
digamos, por debajo de 0.5, seguiremos haciendo un ciclo. Entonces no vamos a hacer nada. Y si no, obtendremos el cuadro delimitador
de la detección. Por lo que se encuentran los recuadros delimitadores. Se puede ver la detección
de tres a siete. Ahora bien, este cuadro delimitador, o dado un relativamente
con respecto a la anchura y la
altura de la imagen. Así que vamos a imprimir nuestra
caja. Y el pelo. Como puede ver,
tenemos 0.30.350.5. Entonces necesitamos
multiplicarlos con el ancho
y el alto de la imagen para obtener las coordenadas x
e y reales del cuadro delimitador. Hola, Qué podemos hacer, podemos usar la función zip y no vamos a escribir
una lista de comprensión. Entonces aquí cuando escribamos el ZIP, tomaremos las detecciones
de tres a siete. Y el segundo argumento aquí
vamos a proporcionar la anchura, la altura, la anchura,
y la altura. Y aquí diremos Para a, b en esta función zip, tomaremos la multiplicación
de estos dos elementos. Aquí. La primera coordenada es la x de la parte superior izquierda
del cuadro delimitador. Lo multiplicamos con el ancho. Entonces tenemos la y. La
multiplicamos por la altura. Y luego tenemos la
x en la parte inferior, justo por el ancho. Y luego las coordenadas y
en la parte inferior, justo multiplicado por la altura. Entonces ya no necesitamos esto. Y también necesitamos convertir
nuestra lista en una tupla. Ahora podemos dibujar los rectángulos, así diremos c
v2 rectángulo de punto. Aquí. Déjenme decir imagen. Para las coordenadas
del rectángulo, usaremos el cuadro delimitador. Toma para el punto de partida, tomaremos los dos
primeros elementos del cuadro delimitador. Entonces aquí diremos
los dos últimos elementos. El motivo de la llamada
a para el espesor. Ahora vamos a extraer
el ID de clúster
del objeto detectado y
obtener la etiqueta de clase. Así que podemos bien, el ID de
clase es igual a y aquí el ID del clúster. Podemos acceder a él así. Para el nombre de la clase, podemos escribir aquí la etiqueta. La etiqueta que es el
punto de texto que vamos a poner en la imagen que vamos a
escribir es igual a una cadena f. El primer elemento. Tomaremos la etiqueta de clase. Entonces tenemos los nombres de nuestras clases. Y los nombres de nuestras clases es una lista. Se inicia a partir de 0. Entonces necesitamos restar
uno del ID del clúster. Entonces escribiremos permite ID
y restaremos uno. Ahora también podemos escuchar que se muestra la probabilidad junto
con las etiquetas de clase. Entonces diremos
probabilidad por 100. Y por último, podemos dibujar
nuestro texto sobre la imagen. Entonces diremos CV para adoptar
poner texto aquí, imagen. Aquí para el texto, tendremos decir la
etiqueta para el origen. Podemos usar nuestras cajas. Entonces 0 aquí y la caja uno. Pero aquí agregaremos algunos píxeles para asegurarnos de que el texto
esté dentro del cuadro delimitador. Agreguemos 15 píxeles. Ahora para la fuente, podemos usar font. Simplemente busca la piel, digamos 0.5 color verde. Y dos, para el grosor. Creo que ya hemos terminado para que
podamos mostrar nuestra imagen. Así decir V2 punto IM mostrar
imagen e imagen. Y CB2 punto peso 0. Vamos a ejecutar nuestro código. Y aquí no se muestra el
cuadro delimitador. Aquí está, necesitamos tomar los dos últimos elementos
en el cuadro delimitador. Entonces cuando volvemos a ejecutar esto, ahora aquí como pueden ver, se detectó a
la persona, pero aquí el texto es un
poco raro. Podemos cambiar. El tipo de letra, dirá, aquí dicen
las mujeres. En terciario es simplemente miradas. Entonces aquí como puedes ver, la persona fue
detectada correctamente. Y aquí tenemos la
confianza, que es 78%
4. Detección de objetos en videos: Ahora pasemos
al siguiente paso, que es detectar
objetos en un video. Entonces aquí primero necesitamos
inicializar la captura de video. Escribiremos v d u es igual a CV para adoptar captura de video. Y aquí tengo un video
que voy a usar en este ejemplo. Entonces vamos a escribir aquí, estamos digamos rehacer un punto mp4. Ahora aquí todo
sigue igual. Pero dos, puede crear una lista de colores aleatorios para
representar cada clase. Entonces ya podemos escribir aquí. Primero tendremos que
importar numpy. Y aquí en realidad no
necesitamos estos dos paquetes. Así que aquí vamos a escribir semilla aleatoria de
punto no pi para T2 y T4. Los colores, diremos
non pi, no alrededor de ellos. Alrededor. Para el valor bajo, diremos 0 y para
el valor alto 255. Por lo que generará valores
entre estos dos valores. El tamaño usaremos la
longitud de nuestros nombres de clase. Y aquí diremos tres
para generar los colores RGB. A continuación podemos comenzar a
procesar nuestros forams. Entonces si bien es cierto. Y aquí vamos a
hacer un up frames. Entonces vamos a decir por qué es cierto aquí. Cuando la copa y cuando ponemos
esto dentro del bucle while. Aquí, fuimos a conseguir la
altura de nuestros marcos. Entonces para él, no en forma 0. Y también el ancho y el pelo, todo sigue igual. Entonces escucharemos decir marco. Lo único que
queremos hacer es
conseguir el foro de color,
la detección actual. Entonces diremos que los colores
son iguales para llamar al nuestro. Y aquí necesitamos proporcionar
el ID de la detección. Para que podamos poner esta línea
antes del lote de autos. Y aquí podemos decir clase. Ahora necesitamos convertir el
color en un entero. Entonces diremos r es igual a entero de color,
el primer color. Lo mismo para el BGF. Y el encabezado, podemos
usar nuestro color personalizado. Vamos a decir B, G, y R. Y aquí el
nombre y el marco. Y aquí necesitamos usar
uno por un milisegundo para el
peso k De lo contrario, nuestro marco se congelará. Así que ahora podemos ejecutar nuestro código. Entonces ahí vamos. Nuestro auto se detecta
con éxito en el video. Ahora puedes usar diferentes
videos para ver si esto va a funcionar, esto va a funcionar bien. Pero espero que se te ocurra la
idea de la detección de objetos.