[IA] Crea una aplicación web de reconocimiento de objetos con Python y React | Alex Bakker | Skillshare

Velocidad de reproducción


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

[IA] Crea una aplicación web de reconocimiento de objetos con Python y React

teacher avatar Alex Bakker, Web, A.I. and Mobile Development

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Ve esta clase y miles más

Obtenga acceso ilimitado a todas las clases
Clases enseñadas por líderes de la industria y profesionales activos
Los temas incluyen ilustración, diseño, fotografía y más

Lecciones en esta clase

    • 1.

      Introducción

      1:26

    • 2.

      IA, aprendizaje automático y aprendizaje profundo

      13:27

    • 3.

      Redes neuronales convulsivas

      6:27

    • 4.

      Instalación de VSCode

      2:08

    • 5.

      Extensiones de VSCode

      1:59

    • 6.

      La mejor manera de tomar el curso

      2:30

    • 7.

      Recursos

      0:23

    • 8.

      Configuración de FastAPI y Python

      5:15

    • 9.

      Instala Python en MacOS

      4:02

    • 10.

      Instalación de Python en Windows

      2:23

    • 11.

      Instalación y ejecución de FastAPI

      8:10

    • 12.

      Otro ejemplo de ruta

      5:01

    • 13.

      Aplicación para correr con Uvicorn

      3:36

    • 14.

      Instalación de paquetes con requisitos

      3:55

    • 15.

      Qué es React y TypeScript

      3:09

    • 16.

      Instalación de nodejs

      2:03

    • 17.

      Crea una aplicación de First React con Vite

      3:43

    • 18.

      Componente y estilo de control de imagen

      5:34

    • 19.

      Configuración de nuestras variables de estado

      3:58

    • 20.

      Plantilla de cuadros de predicción e imágenes

      7:07

    • 21.

      Entrada de carga de imágenes

      3:33

    • 22.

      Explicación de Tensorflow SSDMobileNetV2 y COCO DataSet

      2:59

    • 23.

      Agregar el modelo COCO de COCO para SSD de MobileNetV2

      1:26

    • 24.

      Carga de modelos preentrenados en una aplicación

      4:42

    • 25.

      Función de inferencia de ejecución

      5:48

    • 26.

      Predice la ruta

      12:08

    • 27.

      Label_Map

      2:17

    • 28.

      Resultados de predicción de ruta

      6:18

    • 29.

      Prueba nuestra ruta

      3:22

    • 30.

      Usa el gancho de carga de imágenes

      6:46

    • 31.

      Tipos de resultados

      4:53

    • 32.

      Devolución de datos de Hook

      9:21

    • 33.

      Uso de Hook en el control de imágenes

      1:49

    • 34.

      Clave de API

      2:55

    • 35.

      Manejar la carga y manejar imágenes

      5:26

    • 36.

      Prueba de la carga de imágenes

      1:19

    • 37.

      Permitir CORS

      3:09

    • 38.

      Cómo llevar los resultados a la pantalla

      1:29

    • 39.

      Dividir en componentes más pequeños

      3:25

    • 40.

      Accesorios de React

      4:29

    • 41.

      Casos de uso y limitaciones

      2:32

  • --
  • Nivel principiante
  • Nivel intermedio
  • Nivel avanzado
  • Todos los niveles

Generado por la comunidad

El nivel se determina según la opinión de la mayoría de los estudiantes que han dejado reseñas en esta clase. La recomendación del profesor o de la profesora se muestra hasta que se recopilen al menos 5 reseñas de estudiantes.

49

Estudiantes

--

Proyectos

Acerca de esta clase

[IA] Crea una aplicación web de reconocimiento de objetos con Python y React

Crea aplicaciones web basadas en IA con FastAPI y React. Descubre el aprendizaje automático con Python para desarrolladores.

Este curso completo, "Crea una aplicación web de reconocimiento de objetos con Python y React", está diseñado para capacitar a los desarrolladores con las habilidades para crear aplicaciones avanzadas con IA. Al combinar el poder de FastAPI, TensorFlow y React, los estudiantes aprenderán a crear una aplicación web de reconocimiento de objetos completa que muestre el potencial del aprendizaje automático en el desarrollo web moderno.

A lo largo de este curso práctico, los participantes se sumergirán en profundidad en las tecnologías de backend y frontend, con un enfoque principal en Python para la IA y el desarrollo de backend, y TypeScript para la implementación de frontend. El curso comienza con la introducción de los estudiantes a los fundamentos del aprendizaje automático y la visión por computadora, proporcionando una base sólida en los conceptos de IA esenciales para las tareas de reconocimiento de objetos.

Luego, los estudiantes explorarán el marco de FastAPI, aprendiendo a crear API REST eficientes y escalables que sirvan como columna vertebral de la aplicación. Esta sección cubrirá temas como el manejo de solicitudes, la validación de datos y la programación asíncrona en Python, para garantizar que el backend pueda manejar las demandas del procesamiento de reconocimiento de objetos en tiempo real.

El corazón del curso radica en su componente de aprendizaje automático, donde los estudiantes trabajarán extensamente con TensorFlow para crear y entrenar modelos de reconocimiento de objetos personalizados. Los participantes aprenderán a preparar conjuntos de datos, diseñar arquitecturas de redes neuronales y afinar modelos preentrenados para obtener un rendimiento óptimo. El curso también cubrirá temas esenciales, como el aumento de datos, el aprendizaje por transferencia y las técnicas de evaluación de modelos.

En la interfaz, los estudiantes usarán React y TypeScript para crear una interfaz de usuario dinámica y receptiva. Esta sección se centrará en crear componentes reutilizables, administrar el estado de las aplicaciones e implementar actualizaciones en tiempo real para mostrar los resultados de reconocimiento de objetos. Los participantes también aprenderán a integrar el frontend con el backend de FastAPI, lo que garantiza una comunicación perfecta entre las dos capas de la aplicación.

A lo largo del curso, se hará hincapié en las mejores prácticas de desarrollo de software, incluida la organización del código y la estructura del proyecto. Los estudiantes también obtendrán información sobre la implementación de aplicaciones web con IA, teniendo en cuenta factores como el servicio de modelos, la escalabilidad y la optimización del rendimiento.

Al final del curso, los participantes habrán creado una aplicación web de reconocimiento de objetos completamente funcional, ganando experiencia práctica al combinar tecnologías de IA con marcos de desarrollo web modernos. Este enfoque basado en proyectos garantiza que los estudiantes no solo entiendan los conceptos teóricos, sino que también adquieran las habilidades prácticas necesarias para crear aplicaciones sofisticadas basadas en IA en escenarios del mundo real.

Tanto si eres un desarrollador experimentado que busca expandir tus habilidades o un entusiasta de la IA que quiere dar vida a los modelos de aprendizaje automático en la web, este curso te ofrece la combinación perfecta de teoría y práctica para ayudarte a lograr tus objetivos en el emocionante campo del desarrollo web con IA.

***DESCARGO DE RESPONSABILIDAD*** Este curso es parte de una serie de 3 aplicaciones en las que creamos la misma aplicación con diferentes tecnologías, incluidas Angular, React y una aplicación móvil multiplataforma con React Native CLI. Elige el marco de frontend que mejor se adapte a ti.

Portada diseñada por FreePik

Conoce a tu profesor(a)

Teacher Profile Image

Alex Bakker

Web, A.I. and Mobile Development

Profesor(a)
Level: All Levels

Valoración de la clase

¿Se cumplieron las expectativas?
    ¡Superadas!
  • 0%
  • 0%
  • Un poco
  • 0%
  • No realmente
  • 0%

¿Por qué unirse a Skillshare?

Mira las galardonadas Skillshare Originals

Cada clase tiene lecciones cortas y proyectos prácticos

Tu membresía apoya a los profesores de Skillshare

Aprende desde cualquier lugar

Ve clases sobre la marcha con la aplicación de Skillshare. Progresa en línea o descarga las clases para verlas en el avión, el metro o donde sea que aprendas mejor.

Transcripciones

1. Introducción: Hola a todos. Soy Alex Baker, y estoy encantada de darle la bienvenida a este curso Como desarrollador full stack, ingeniero móvil, instructor y entusiasta de la IA, tengo el privilegio de trabajar con varias grandes compañías tecnológicas cuando me especializo en tecnologías como React, React Native, Engler y Biton Hoy nos embarcamos en un emocionante viaje juntos. Construiremos una aplicación de reconocimiento de objetos desde cero, combinando el poder de reacción para nuestro front-end con FAS PI y PTN para nuestro back-end Pero este no es solo otro curso de desarrollo web. Vamos a adentrarnos en el fascinante mundo de la IA y el machine learning, aplicando este concepto en escenarios del mundo real. Si eres un entusiasta, ansioso por construir tu primera aplicación inteligente, un aspirante a desarrollador que busca entrar en la tecnología o un programador experimentado que quiere expandir tu conjunto de habilidades con la integración de React o AI Este curso está diseñado para ti. Trabajaremos con tecnologías de calibre de corte como API rápida, PTN y flujo tensor, lo que le brinda una experiencia final en la creación de aplicaciones modernas impulsadas por IA Prepárate para transformarte de espectador en creador de tecnología de IA Al final de este curso, tendrás las habilidades para construir aplicaciones que no solo procesen datos. Ellos ven y entienden el mundo que les rodea. Convirtamos tus inspiraciones de IA en realidad. 2. 02. IA, aprendizaje automático y aprendizaje profundo: Bienvenidos, todos. Entonces, antes comenzar con la codificación práctica, tendremos un poco de teoría con respecto a la IA, aprendizaje automático y el aprendizaje profundo. Hoy, nos estamos embarcando en un emocionante viaje por el mundo de la inteligencia artificial, aprendizaje automático y el aprendizaje profundo trata de tecnologías transformadoras que están remodelando el mundo que vemos hoy y están apareciendo nuevas tecnologías, nuevas características respecto a aquellas tecnologías nuevas características respecto a aquellas tecnologías alrededor de nuestros dispositivos que están cambiando nuestras Y con eso, ¿qué es la IA o la inteligencia artificial? La inteligencia oficial o IA es una rama de la informática que se enfoca en crear máquinas inteligentes capaces de realizar tareas que normalmente requieren inteligencia humana. Pero, ¿qué significa realmente? Imagine un sistema informático que pueda entender el lenguaje natural, reconocer objetos e imágenes, tomar decisiones e incluso aprender de sus experiencias. Entonces esa es la esencia de la IA en general. Se trata de crear máquinas que imiten las funciones cognitivas, nos asociamos con las mentes humanas, como aprender y resolver nuestro problema Los sistemas de IA pueden variar desde simples programas basados en reglas hasta sistemas completos que pueden adaptarse y evolucionar. El objetivo es crear máquinas que puedan percibir el entorno, razonar sobre lo que perciben y tomar acciones que maximicen sus posibilidades de éxito en ese objetivo que queremos en este caso. Ahora, ¿cuáles son los tipos de IA o qué podemos encontrar como esos tipos de IA? Cuando hablamos de IA, es importante entender que existen diferentes tipos o niveles de IA. Entonces, exploremos las dos categorías principales de la misma. Entonces tenemos IA débil o estrecha, IA fuerte o general. Tan débil IA o IA estrecha, este es un tipo de IA que interactuamos con nuestra vida diaria. Está diseñado para realizar una tarea estrecha o un conjunto específico de tareas que podamos incluir en este caso, algo como asistencia de voz como City Alex o Bullet, sistemas de recomendación, como vemos en Netflix o Amazon, software de reconocimiento de imágenes y filtros de spa en correo electrónico. Estos sistemas son excelentes y son tareas específicas pero pueden desempeñarse fuera de sus dominios de programa. No tienen inteligencia general ni conciencia. Con ese caso, llegamos a la IA fuerte o IA general. Eso es más un concepto teórico en este punto. La IA fuerte se refiere a una máquina que con conciencia, sensibilidad y mente, con la capacidad de aplicar la inteligencia a cualquier problema, más bien a una sola tarea específica Este tipo de IA incluirían algo como razonamiento, resolver acertijos, emitir juicios con certeza, planificar, aprender, comunicarse con el lenguaje natural, integrar todas las habilidades hacia un objetivo común. Si bien aún no estás ahí, este es el objetivo final de los investigadores de IA. Es el tipo de IA que vemos en películas como terminator, matrix, etc. Ahora vamos a aprender qué es el aprendizaje automático. El aprendizaje automático es un subconjunto de IA. El aprendizaje automático es donde las cosas realmente se ponen interesantes desde nuestra perspectiva. En la programación tradicional, proporcionamos a la computadora un conjunto de instrucciones explícitas para resolver un problema. Pero con el aprendizaje automático, tomamos un enfoque diferente. En lugar de escribir instrucciones explícitas, le damos a la máquina una gran cantidad de datos y dejamos que aprenda a resolver nuestros problemas. ¿Y cómo funciona esto? Entonces alimentamos la máquina con grandes conjuntos de datos. La máquina analiza e identifica patrones. En base a estos patrones, la máquina puede crear sus propias reglas o algoritmos. La máquina entonces puede aplicar las reglas a los nuevos datos de pecado para hacer predicciones. Por ejemplo, en lugar de programar una computadora con todas estas reglas, lo que hace que un correo electrónico sea spam, podemos mostrarlo en miles de ejemplos de correos no deseados y no spam. El algoritmo de aprendizaje automático aprenderá entonces a identificar las características del correo electrónico no deseado y luego podrá aplicar este conocimiento a nuevos correos electrónicos que no se habían visto antes. La clave aquí es que los sistemas de aprendizaje automático mejoren su rendimiento con experiencia. Cuantos más datos procesen, mejor se convierten en una mejor tarea. Esta capacidad de aprender y mejorar a partir de la experiencia sin estar explícitamente programado es lo que distingue al aprendizaje automático. Y luego lado del aprendizaje automático, hay varios tipos de aprendizaje. Tenemos el aprendizaje sin supervisión donde los datos vienen sin etiquetar, o los clústeres de datos vienen sin etiquetar, y es una tarea de la máquina identificar y etiquetar esos conjuntos Entonces tenemos el aprendizaje supervisado donde alimentamos a la máquina con datos ya etiquetados. Voy a ser más fácil para la máquina aprender con esos conjuntos de datos. Entonces tenemos el aprendizaje reforzado donde la máquina aprenderá al tener recompensas o castigos como va a aprender con esos datos y dándonos la salida Entonces ahora podemos pasar a la tercera parte de nuestro contexto de IA, que es el deep learning. Un aprendizaje profundo lleva el aprendizaje automático al siguiente nivel. Es un subconjunto de esa parte de aprendizaje automático inspirado en la estructura y función del cerebro, especialmente la interconexión de muchas neuronas El aprendizaje profundo utiliza estructuras llamadas redes neuronales artificiales que son sistemas de software diseñados para imitar la forma nuestras neuronas en nuestro cerebro se conectan y comunican Así como nuestros cerebros pueden identificar patrones y dar sentido a datos complejos, los algoritmos de aprendizaje profundo pueden realizar características similares. El aprendizaje profundo y profundo se refiere al número de capas en estas redes neuronales, mientras que una red neuronal simple podría tener solo una o dos capas, y los sistemas de aprendizaje profundo pueden tener cientos. Cada capa de la red neuronal Depo procesa los datos que recibe, extrae entidades y pasa la información procesada a la siguiente capa A medida que los datos se mueven a través de estas capas, la red puede aprender características cada vez más abstractas y complejas de los datos. Esto hace que el aprendizaje profundo sea particularmente bueno en el reconocimiento de imágenes y voz, procesamiento del lenguaje natural, traducción entre los idiomas, generación de imágenes y videos realistas, incluso crear arte de la música Como ahora como vemos aquí en la pantalla, tenemos también las partes de las redes neuronales. Entonces, profundicemos un poco más en las redes neuronales ya que son la base del agotamiento Existen varios tipos de redes neuronales, cada una diseñada para tipos específicos de tareas. Entonces tienes la red neuronal feed forward. Estos son los tipos más simples de redes neuronales artificiales. La información se mueve en una sola dirección desde la capa de entrada a través de las capas ocultas, y luego obtenemos el resultado en la capa de salida. Se utilizan para tareas sencillas como clasificación y regresión. También tenemos la red neuronal recurrente. Estas redes tienen conexiones para que formen ciclos, permitiendo que la información persista. Son particularmente buenos para procesar datos secuenciales como texto o datos de series temporales. Y se utilizan en tareas como traducción de idiomas y el reconocimiento de voz. Luego vemos las redes neuronales convolucionales . Estos están diseñados para procesar datos con topología de cuadrícula, como imágenes Utilizan una operación matemática llamada convolución en lugar de una multiplicación matricial general en al menos una de Ahí van a elección para cualquier tipo de tarea de análisis de imágenes. Cada una de estas redes tiene sus fortalezas y debilidades, y elegimos en base al problema específico que nos ocupa. Y ahora, ¿cómo juntamos todas estas partes para crear una aplicación? Ahora que entendemos los componentes individuales, veamos cómo el aprendizaje automático de IA y el aprendizaje profundo funcionan juntos en el escenario del mundo real. Tomemos el ejemplo del sistema de detección de objetos en un automóvil autónomo. La parte AI, el sistema de extralimitación que permite que el automóvil perciba su entorno, toma decisiones y controla su movimiento Esto incluye no solo detectar objetos, sino también planear rutas, seguir las reglas de tránsito e interactuar con los demás vehículos y peatones Luego pasamos a la parte de aprendizaje automático que es el motor subyacente que permite a la IA aprender de grandes cantidades de datos de conducción. Esto incluye aprender a reconocer diferentes tipos de objetos como autos, peatones y señales de tráfico, comprender las condiciones de la carretera y adaptarse a diferentes escenarios de manejo La arquitectura de deep learning y en este caso, utiliza las CNN o las redes neuronales convolucionales entra en la compleja tarea de detección de objetos en imágenes La CNN procesa la entrada visual de la cámara del automóvil, identificando y localizando objetos en tiempo real En este escenario, la IA proporciona el marco general y el proceso de toma de decisiones. El machine learning entonces nos permitirá al sistema mejorar el rendimiento a lo largo del tiempo ya que encuentra más escenarios y escenarios de complejidad en este caso, el aprendizaje profundo nos proporcionará un patrón poderoso para reconocer las capacidades necesarias para detección y clasificación de objetos en tiempo real. Entonces, ¿cuáles son las aplicaciones del mundo real de este tipo de tecnologías que podemos encontrar o tener en un futuro cercano? En aplicaciones de IA, podemos obtener bots de chat, reconocimiento de voz, autos autónomos, asistentes virtuales como City, Alexa y Google, dispositivos Smart Home, mantenimiento predictivo en manufactura también. Luego podemos pasar al aprendizaje automático donde tenemos el filtrado de correo electrónico, la detección de fraudes, sistemas de recomendación como Netflix, Amazon, Spotify y pronóstico del tiempo también En el aprendizaje profundo, podemos tener tecnologías como el reconocimiento facial, conducción autónoma, el diagnóstico médico, procesamiento del lenguaje natural, etc. Los beneficios de esta tecnología para el mundo pueden tener mucho impacto en la salud, la protección del medio ambiente, la educación, la accesibilidad, investigación científica, los negocios y la economía y el transporte. Como hemos visto, la IA y el aprendizaje automático y el aprendizaje profundo no solo están dando forma a nuestro futuro. También están activos mejorando nuestro presente. Estas tecnologías están resolviendo problemas y creando oportunidades que eran inimaginables hace apenas unos años No obstante, es importante recordar que el gran poder viene con una gran responsabilidad. A medida que estas tecnologías se integran más en nuestras vidas, también debemos considerar las implicaciones éticas de la misma. Y asegurar que se desarrollen y utilicen de formas que beneficien a toda la humanidad. Seguro que el futuro es emocionante y está construido con líneas de objetivos, redes neuronales y datos. Si eres un estudiante, un profesional, o simplemente un individuo curioso, te animo a que sigas aprendiendo sobre estos fascinantes campos porque quién sabe tal vez podrías desarrollar un próximo avance. Gracias por acompañarme en este viaje a través del aprendizaje automático de IA y el aprendizaje profundo. Y ahora podemos pasar a las partes más interesantes que son la codificación endzone 3. 03.Redes neuronales convulsivas: Ahora llegamos a la parte de la red neuronal que usaremos en este curso para detectar las imágenes, y usaremos la red neuronal convolucional que aprendimos antes, y tendremos una comprensión más profunda sobre qué es Entonces podemos comenzar con la definición de una red convolucional que son tipos especializados de redes neuronales diseñadas específicamente para procesar datos visuales Se han convertido en la columna vertebral de numerosas aplicaciones, desempeñando un papel crucial en tareas como la detección de objetos, clasificación de imágenes, reconocimiento facial y mucho más. Pero, ¿qué hace que las CNN sean tan especiales? Bueno, se inspiran en procesos biológicos en la corteza visual de los animales. Así como nuestros cerebros pueden reconocer rápidamente patrones y objetos en lo que vemos, CNN pueden ser entrenadas para hacer exactamente lo mismo con imágenes y videos digitales Las redes neuronales convolucionales nos presentan algunas características clave Entonces ahora vamos a desglosarlos. Entonces primero, tenemos las capas convolucionales. Son el núcleo de los bloques de construcción de CNN. Aplican una serie de filtros a la imagen de entrada, cada uno diseñado para detectar características específicas como bordes, texturas o patrones más complejos. A medida que profundizamos en la red, estas características se vuelven cada vez más abstractas y sofisticadas. Entonces tenemos también algunas capas de tracción. Después de la convolución, a menudo usamos estas capas de tracción. Reducen la dimensión espacial de los datos, haciendo que la red sea más eficiente computacionalmente y ayudándola a enfocarse en las características más importantes Los tipos comunes incluyen tracción máxima y tracción promedio. Luego nos dirigimos a las capas completamente conectadas que normalmente se encuentran al final de la red. Estas capas conectan cada neurona de la capa anterior a cada neurona en la siguiente, y se utilizan para hacer la clasificación o predicción final basada en las características, extractos en las capas Todo esto funciona es la matemática detrás de todo esto. Entonces aquí tenemos un ejemplo de red neuronal en esta imagen. Un componente crucial es la función de activación. En muchos CNN, utilizamos lo que se llama la función Lu, como se puede ver allí, que significa unidad lineal rectificada, y la forma es simplemente esta fórmula matemática es nuestra función de activación en este caso Esto significa que para cualquier entrada X, si X es negativo, la función devolverá cero. Si X es positivo, devuelve X en sí. Esta sencilla función ayuda a introducir no linealidad en nuestra red, lo que le permite aprender patrones más complejos La belleza de este Lu es que computacionalmente eficiente y ayuda a mitigar los gradientes de desvanecimiento que pueden ocurrir Y ahora por la estructura y razón de esta profunda red neuronal, entendemos los componentes. Entonces veamos cómo se juntan en la típica CNN para detección en tiempo real en este caso, que vamos a utilizar en nuestra aplicación Entonces, para nuestra detección de objetos en tiempo real, tenemos las entradas. Aquí es donde alimentamos nuestros datos. Tenemos un modelo de tendencia prane en este caso. Después la convolución, la primera capa convolucional que aplica los filtros para detectar entidades de bajo En este caso, utilizamos el framework de flujo tensor de paquete en nuestra aplicación Luego usamos la capa de tracción para reducir la dimensión especial. También utilizamos convolución, otra capa convolucional que detecta el nivel de los ojos de las entidades Luego usamos tirar de nuevo, tal y como lo vemos en la imagen, y reducimos las dimensiones y nos enfocamos en características clave. También tenemos entonces al final la capa completamente conectada que hace nuestra clasificación y detección. Entonces vemos el resultado en la capa de salida, tales clases de objetos y asignaciones en la imagen Esta estructura permite que la red aprenda progresivamente entidades más complejas desde aristas simples hasta objetos complejos. Cuando se trata de implementar la detección de objetos de tiempo de archivo CNNs, a menudo usamos modelos preentrenados Se trata de CNN que ya han sido entrenados en grandes conjuntos de datos y pueden reconocer una amplia variedad de objetos Luego podemos afinarlos para encontrar nuestro caso específico, ahorrándonos una cantidad significativa de tiempo y recursos computacionales Un marco popular para esto es como mencionamos antes, el flujo tensor Proporciona una API de alto nivel que facilita la construcción, entrenamiento y el despliegue de redes neuronales, incluida nuestra red neuronal convolucional La aplicación de estas CNN es vasta, por lo que podemos obtener estas redes para vehículos autónomos, imágenes médicas, reconocimiento facial, moderación de contenido y realidad aumentada Entonces, en conclusión, las redes neuronales convolucionales han revolucionado el campo de la visión por computador, permitiendo que las máquinas vean y comprendan el mundo de formas en las que estábamos en estábamos en A medida que continuamos perfeccionando estos modelos y desarrollando nuevas arquitecturas, las posibilidades son realmente emocionantes Ya sea que seas investigador, desarrollador o sencillo, alguien que esté interesado en este campo, CNN son definitivamente una tecnología para observar Simplemente están dando forma a la visión por computadora y mejorando la característica en sí. Con esto, tenemos una mejor comprensión cómo vamos a construir nuestra aplicación. 4. 04.Instalación de VSCode: En este curso, usaré código de Visual Studio para editar a texto. Por lo que será nuestra identificación. Siéntete libre de usar el que estás más acostumbrado a él. Si no tienes ninguno, te aconsejo que instales este para codificar junto conmigo en este caso. Y si no lo sabes, código de Visual Studio es ID, editor de texto o editor de código, y forma parte de Microsoft Environment y nos permite tener muchas extensiones apoyadas por la comunidad y también por grandes empresas. Y este ID soporta, muchos idiomas. Nuevamente, las extensiones son parte vital para este desarrollo de ID y software, también como terminal integrado, que es muy cool y soporte GIT. Entonces, para instalar el código de Visual Studio, simplemente da clic aquí en este botón. En mi caso aparece me mudaré para Mac porque estoy ejecutando un entorno Mac. Pero dependiendo de qué tipo de sistema operativo tengas, te parecerá diferente. Así que solo haz clic en esto. Y una vez que se descargue, continuaremos. Entonces, una vez que haya terminado de descargarse, solo tienes que ir a la descarga de Con. Mi abeja un archivo Zip, solo necesitas extraerlo, y depende de tu sistema operativo nuevamente, tendrás archivo ejecutible o un archivo DMG Así que simplemente lo presionaremos dos veces y procederemos con la instalación. Una cosa a notar es que tenemos una pequeña casilla de garrapata para agregar a Path. Por favor hazlo porque te permite abrir el editor a través de la terminal con un simple comando. Una vez instalado, está abierto, se puede ver el ID aquí, y vamos a ir más allá en él a continuación. Pero por ahora, tenemos nuestro ID instalado y podemos continuar. 5. 05.Extensiones de VSCode: Ahora que tenemos nuestro editor, instalaremos algunas extensiones. Así que las extensiones básicamente nos permiten obtener un mejor flujo de trabajo. Nos ayudó con algunos bugs para detectar algunas partes, con GID e incluso colorear texto. Entonces, realmente depende de ti. Pero en este caso, usaremos parte de PyTon y FAST API, e instalaremos extensiones que confiarán en ella Entonces, en nuestra base de extensión, necesitaremos todos estos paquetes Byton para ayudarnos a codificar mejor y codificar más fácilmente y soportar Hay pilones que tiene básicamente la inteligencia que puede predecir lo que queremos en la costa y también decir algunos errores en la costa o algunos opcionales para mejorarla También necesitamos Biton, así el lenguaje, el depurador para depurar nuestro cos, el entorno gestionado, así tendremos administración virtual o tendremos entornos virtuales para ejecutar nuestro entorno Python Por lo que también necesitarán el enlace para que el pilón cegue nuestro código para ver dónde queremos formatear nuestro código y mantenerlo igual entre todos los equipos en este caso Y estos son los paquetes que necesitamos, y podemos instalar todo este paquete con solo uno. Así que tenemos este paquete de extensión de Python que instalaremos todos los paquetes que vimos antes. Por lo que basta proceder con la instalación de éste. Instalará los demás con él, y te pediremos relos Entonces solo recargue el código de Visual Studio, y tendremos los paquetes necesarios 6. La mejor manera de tomar el curso: En esta conferencia, aprenderemos a sacar el máximo provecho y aprovechar este curso. En el software, especialmente cuando estamos aprendiendo, nos encontraremos con muchos bloqueos de carreteras, incluso cuando sigamos códigos junto con los videos. Esto sucedió por mal mecanografía, errores del instructor o más frecuentemente por software y paquetes que siempre están cambiando. Entonces, ¿qué debes hacer si te quedas atascado, entonces ya no puedes continuar con el curso? En primer lugar, no peniques, es normal. Esto le pasa a todos. Como no puedo responder a todas las preguntas, asegúrate de usar la pestaña de discusión de habilidades compartidas donde puedes encontrar estudiantes con el mismo problema que tú y puedes tener un hilo con todas tus preguntas y respuestas. Por lo que podemos ayudarle a continuar con el curso. A medida que el software cambia todo el tiempo, me aseguraré de dejar los recursos en las secciones de recursos en skill share, donde podrás descargar requisitos, empaquetar Jason y las versiones correctas de todos los paquetes que necesites para este curso. También te dejaremos las imágenes para que puedas descargar las imágenes que usaremos en este curso. Si sigues atascado, usa Google. Google en la solución a menudo devolverá muchos resultados, y también puedes aprender de esa búsqueda. Muchos alumnos tendrán el mismo error. Mucha gente en el software tendrá el mismo error, y eso puede ayudarte a resolverlo. Leer documentación. Muchas plataformas y paquetes o lenguajes de programación nos proporcionan documentación completa o tutoriales sobre cómo instalarlo y proceder con él. Entonces, si te apilan, por favor, repasa la documentación y sigue los pasos en ella, ya que podría ayudarte a continuar con el curso y abastecerte También puedes preguntar a la IA. Estas herramientas son de oído para ayudar con seguridad, y podemos proporcionar una solución rápida para el problema con mayor explicación. Te ayudará a resolver el problema además de explicar qué pasó y qué estabas haciendo mal. Si sigues estas recomendaciones, hará que tu experiencia sea más suave y de calidad general. Con todo esto aclarado, todos podemos seguir adelante. 7. Recursos: Este curso, vamos a utilizar algunos recursos, y para encontrar los recursos, simplemente necesitas bajar al curso y encontrarlo aquí. Entonces la carpeta zip contendrá enlaces, imágenes, y otros recursos necesarios que a lo largo del curso, vamos a insertar en ella. Así que siéntete libre de descargar esto y seguir el video. 8. 08. Configuración de FastAPI y Python: Entonces, en esta conferencia, vamos a explorar algunas tecnologías emocionantes que forman la base de nuestra aplicación de reconocimiento de objetos de IA. Entonces, específicamente, discutiremos BTN y API rápida y cómo estas poderosas herramientas nos permiten construir un backend robusto y eficiente en nuestra aplicación de IA Entonces comencemos con BTN. Muchos de ustedes ya están familiarizados con este versátil lenguaje de programación, pero recapitulemos por qué es tan crucial para nuestro proyecto PyTon a menudo se llama el lenguaje de la IA por buenas razones En primer lugar, su sintaxis es clara, intuitiva, facilitando la escritura y comprensión de algoritmos complejos. Esto es particularmente importante cuando se trata de conceptos de IA y aprendizaje automático. PyTN también cuenta con un rico ecosistema de bibliotecas y marcos diseñados específicamente para IA y aprendizaje automático Esto significa que tenemos una gran cantidad de herramientas a nuestra disposición para construir sofisticadas aplicaciones de IA. Además, la comunidad grande y activa de Python asegura que tengamos muchos recursos y tutoriales y soporte disponibles a medida que desarrollamos nuestra aplicación. Pero PTN no es solo para IA. Su versatilidad nos permite utilizarlo también para el desarrollo web. Análisis de datos, automatización y mucho más. Esto hace que una ventanilla única para muchas de nuestras necesidades de desarrollo, incluido el final de nuestra aplicación de reconocimiento de objetos de IA. Ahora hablemos un poco más sobre FASTEPI. Así que FASTEPI es un marco web moderno de alto rendimiento para construir APIs con PyTN Pero, ¿qué significa y por qué es importante para nuestro proyecto? En primer lugar, FAST API hace honor a su nombre. Es rápido. De hecho, es uno de los frameworks PyTN más rápidos disponibles Esta velocidad es crucial cuando tratamos con el reconocimiento de objetos en tiempo real, ya que necesitamos que nuestra aplicación responda rápidamente a las entradas de los usuarios. La API rápida también es increíblemente fácil de usar. Si se siente cómodo con PyTon, encontrará que puede ponerse al día rápidamente con Fast API Utiliza sugerencias de tipo PTN estándar, que no solo hacen que su código sea más fácil de entender sino que también proporcionan validación automática de datos Otra gran característica de FAST API es la generación automática de documentación. Esto significa que a medida que construimos nuestra API, FAST API crea automáticamente documentación interactiva para ella. Eso lo veremos más adelante en nuestro curso. Y esto es increíblemente útil para probar nuestra API para cualquier futuro desarrollador que pueda trabajar en nuestro proyecto. FASTEPI también soporta programación sincrónica, lo que permite a nuestra aplicación manejar múltiples solicitudes Y esto es vital para crear una aplicación de IA receptiva que pueda servir a múltiples usuarios simultáneamente. Entonces, ¿cómo se unen PyTon y FASEPI en nuestra aplicación que vamos a construir desde nadie? Así que vamos a desglosarlo. Usamos Python para manejar la lógica central de nuestra aplicación, y esto incluye imágenes de proceso, ejecutar nuestro modelo de IA para el reconocimiento de objetos y administrar el flujo general de datos a través de nuestro sistema. API de FAS en el otro extremo proporciona un marco para nuestra API web. Nos permite crear puntos finales con los que nuestro front-end pueda comunicarse Por ejemplo, podríamos tener un punto final que acepte y aplause la imagen y devuelva una lista de objetos reconocidos en esa imagen La API rápida nos ayuda a terminar con todas estas solicitudes entrantes y respuestas salientes. Se encarga de cosas como analizar la imagen entrante, los datos y formatear nuestros modelos de IA da como resultado una respuesta que nuestro front-end puede entender La simplicidad de PTN y la naturaleza intuitiva de FAST API también nos permiten desarrollarnos e interactuar rápidamente, lo cual es crucial en el acelerado mundo del de IA En conclusión, PTN y FASEPI forman un potente dúo que nos permite construir un back-end robusto, eficiente y escalable, back-end robusto, eficiente y escalable, para nuestra aplicación de reconocimiento de objetos de IA PTN nos proporciona las herramientas y bibliotecas que necesitamos para el desarrollo I, mientras que FASEPI ofrece un marco de alto rendimiento para exponer nuestras capacidades de IA al mundo A medida que avancemos en este curso, obtendrás finales en experiencia tanto con PyTon como con FAST API Al ver primero y todas estas tecnologías se unen para crear algo verdaderamente emocionante. Recuerda, las habilidades que estás aprendiendo aquí son solo aplicables para nuestro proyecto específico. La combinación de PyTon y API rápida está utilizando varias aplicaciones de inteligencia artificial y aprendizaje automático en todas las industrias Estás construyendo un conjunto de habilidades básicas que te servirá bien en muchos proyectos de características. En nuestras próximas sesiones, comenzaremos a escribir algún código y veremos estos conceptos en acción. Prepárate para dar vida a tu acto de reconocimiento objetivo de IA . 9. 09. Instalar Python en MacOS: Así que ahora entraremos en instalar PyTon en un entorno Mac OS Si no tienes un Mac OS, puedes saltarte esta conferencia e ir a la conferencia de Windows donde instalamos PyTon en Windows Machine Entonces en macOS, tenemos varias opciones para instalar PTN Entonces el primero que usaremos es instalar PyTon a través de Brew Así Brew es un gestor de paquetes o instalador de paquetes en macOS. Primero necesitamos abrir nuestra terminal e ingresar este comando. No te preocupes. Dejaré todos estos comandos en los recursos para que puedas copiarlo fácilmente. Entonces después de que tengamos este comando, solo tienes que pegarlo aquí y presionar Enter. Voy a solicitar sus contraseñas. Entonces solo ingresa las contraseñas. Y presionamos Enter para instalar el brebaje. Entonces ahora que tenemos nuestra brebaje instalada, podemos proceder con la instalación de PyTon En este caso, sólo voy a despejar mi terminal. Solo necesitamos escribir Brew Install PytnPressenter, y después de eso, y después de eso, A así que si todo salió bien, deberías ver algo como esto. Otra forma de instalar PTN y es la forma más común y asesorada de instalar el lenguaje PyTon es a través del sitio web oficial y luego descarga partes Entonces simplemente aquí, tienes descargas, no te preocupes, voy a dejar todos estos enlaces en los recursos. Simplemente encuentra la versión que necesita. Entonces en este caso, si pulsas este botón, descargará la última versión para tu sistema operativo Simplemente será un paquete para instalar. descargarás, lo instalarás, y PTN y el paquete harán todo por ti mismo La tercera forma de instalar PTN es a través de BM, por lo que PM nos permite instalar versiones específicas de PTN, y también lo instalamos a través de Brew, así que solo podemos decir Instalar Pi M. Así que simplemente damos clic en él. Después de que esté instalado, podemos consultar la lista PyM Install Si hacemos clic, nos dará la lista de pytes y versiones disponibles para instalar, así que simplemente presionamos Enter Y como puedes ver, tenemos muchas versiones de Python para instalar. Pero de todos modos, eliges el último siempre. Lo hemos instalado. Y después de tener instalado Python, solo podemos borrar mi terminal. Podemos ver el Python que tenemos instalado, y si todo va bien, deberías poder escribir Python tres porque Python tres es el último y es el que vamos a usar en este curso. Y solo hacemos la etiqueta Version, y vemos la que tenemos instalada. Así que presiona Enter. Y como pueden ver, actualmente, en mi sistema, tengo instalado Python 3.12 0.0 Entonces también deberíamos tener algo alrededor de esta versión. Y con esto, vemos que todo salió bien, y nuestro sistema tiene PyTon instalado 10. 10. Instalar Python en Windows: Ahora procederemos con la instalación de BTN en la máquina Windows Si está en nuestra máquina Windows, puedes saltarte esta conferencia e ir a la parte de MacBook donde instalaremos PyTNon Pero de todas formas, si tienes una máquina Windows y harás este curso a través de Windows, puedes continuar con este video. Por lo que la forma más recomendada de instalar PyTon en la máquina Windows es a través del sitio web oficial Dejaré el enlace enlace directo al sitio web en los recursos. Entonces básicamente, solo necesitas ir al sitio web de PyTon, descarga partes Y aquí tendrás la versión correcta para tu máquina. Simplemente presione el botón de descarga, descargue el paquete y luego continúe con la instalación. Entonces después de las descargas, haces clic en el icono que descarga y verás una ventana como esta. Tan importante tener en cuenta que necesitamos marcar esta casilla de verificación aquí, así que le pediremos a PTN que pase, y después de que esto esté marcado, solo puede instalar ahora También aquí, podemos deshabilitar el límite de longitud de ruta porque algunos sistemas no permiten muchos caracteres en el límite, pero esto puede causar problemas en nuestro sistema, por lo que solo podemos deshabilitarlo. Y luego tenemos una configuración exitosa. Después después de la instalación, podremos abrir nuestro símbolo del sistema para verificar la versión, solo hacemos Python y luego el indicador Version. Como podemos ver, hemos instalado correctamente PTN en nuestra máquina Windows Otra forma de instalar PyTon es abrir nuestra tienda de Microsoft y en la guerra de búsqueda solo hacemos PyTon y luego podemos ver PyTon tres y tenemos todas estas versiones Python del último establo, y luego simplemente presionamos G, y nos instalará el PTN A tener en cuenta, esta es la forma más fácil de instalar PTN, pero la menos personalizable 11. 11. Instalación y ejecución de FastAPI: Así que ahora crearemos nuestro servidor API rápido. Lo primero que haremos es crear una nueva carpeta donde guardaremos nuestras aplicaciones. Así que sólo puedo crear una nueva carpeta aquí. Puedes crear tus carpetas de la manera que quieras. No importa y lo que quieras, tampoco importa. Y ahora la llamaré mi app de aprendizaje. Entonces ahora que tienes nuestra carpeta, podemos abrir nuestra carpeta y nuevamente, crear una nueva carpeta donde la llamamos servidor. Y tenemos nuestras carpetas creadas. Así que de nuevo, necesitamos abrir esto con código de Visual Studio. Si tienes tu código de Visual Studio en el post puedes simplemente abrirlo así. Si no, lo abriremos a través de la terminal. Entonces abramos una terminal. Entonces ahora tengo mi terminal y voy a navegar a mi escritorio. Y en mi escritorio, tengo mi carpeta que se llama mi app de aprendizaje. Y dentro de esta carpeta, tengo, nuevamente, otra carpeta llamada server. Así que ahora puedo abrirlo con código de Visual Studio con este sencillo código, espacio, y luego punto. Y luego tenemos nuestro código de Visual Studio, y estamos dentro de la carpeta correcta aquí. Si por alguna razón el comando cos dot no abrirá tu Visual Studio, podemos arreglarlo muy fácilmente. Así que abre tu código de Visual Studio de cualquier otra manera. Así que simplemente haz clic en la aplicación donde la tienes en tu sistema y luego se abrirá, y luego podrás ver aquí el comando. Entonces y luego se puede ver el comando. Entonces en Macs, comando Shift, y B en Windows deberían ser Control, Shift B. Así que súplica ábrelo, y luego puedes buscar Shell Comando, y ahí ya lo puedes ver. Así que instale el código a la ruta de comando. Así que simplemente haz clic aquí y es posible que tengas que reiniciar tu terminal, y luego tendremos ese comando disponible para ti. Así que ahora dentro de nuestro servidor aquí, vamos a crear un archivo, y nuestro archivo se llamará punto principal pi o PY cuatro PyTon Entonces dentro de nuestro punto pi principal, agregaremos la primera ruta para la FastAPI Llamaremos a los primeros paquetes necesarios para la API FAST, así que solo podemos decir desde FAST API, importamos el paquete de API rápida. Entonces entonces tenemos que usarlo, y luego lo iniciamos en la constante, así arriba será rápido API y las llaves porque es una clase Bien, entonces ahora tendremos la primera ruta. Entonces nuestra primera ruta será una ruta get solo por ejemplo y demo de la API rápida. Entonces diremos agregar. Porque estamos llamando a una clase FastAPI, y luego decimos G, y luego la G, tenemos nuestras rutas o ruta raíz que será solo una barra diagonal Y luego dentro de nuestros métodos get, tendremos función sync. Entonces un sumidero es una función síncrona que se ejecutará de cualquier manera sin esperar el resto del código. Y entonces Df es lo que llamamos una función en Python, y decimos deroot Entonces el nombre de nuestra función, llaves abiertas y luego punto y coma, y luego tenemos el retorno y solo devolveremos un mensaje sencillo Entonces el mensaje estará justo dentro de las citas, y luego regresaremos al mundo bajo. Entonces, lo que es importante aquí en Byton siempre necesitamos esta identación para que se ejecute el código Si lo hacemos así, causará un error porque este bloque identado es realmente necesario Así que ahora para que nuestra app funcione, necesitamos crear un entorno virtual. El entorno virtual nos permite ejecutar Python dentro de un entorno cerrado. Y para eso, sólo tenemos que volver a entrar en nuestro proyecto. Sólo puedo abrir una terminal dentro del código de sal Studio. Entonces aquí, y luego voy a decir solo PyTon o Python tres. VM para entorno virtual, y luego VM punto. ¿Y por qué creamos un entorno virtual? Así que en entorno virtual El nos permite ejecutar versiones de PyTon e incluso nuestros paquetes sin ser influenciados por el sistema externo Así que creamos sólo una especie de encapsulación, de modo que el entorno para ejecutar esa versión de PyTon sin meterse o entrar en conflicto con Entonces aquí solo presionaré Enter. Y ahí se puede ver crea dos carpetas. Así que la caché caché los códigos Python y el entorno virtual, donde tenemos la aplicación ejecutándose, y luego en el futuro, los paquetes. Pero entonces todavía necesitamos ejecutar nuestro entorno virtual. Entonces para ejecutarlo, solo podemos decir fuente punto VM BMF Mac. Si estás en un Mac es BM si estás en el Windows es scripts. Entonces porque tenemos una carpeta BM, puedes consultar aquí. Diremos Bin, y luego activaremos el entorno virtual. Así que solo presiona Enter. Y como puedes ver, ahora estamos corriendo dentro del entorno virtual. Por lo que este entorno virtual ejecutará siempre la misma versión de Python ahí y el paquete se instala sin necesidad de cambiar cada vez que cambies en nuestro sistema, cual es suficiente para lo que quieres hacer aquí. Así que ahora por fin podemos ejecutar nuestra aplicación. Entonces en este caso, solo decimos rápido API, dev, y luego el archivo que queremos ejecutar. Entonces queremos ejecutar el punto principal PI, nosotros solo al punto principal py. Entonces PY para Python, y luego solo presionamos Enter y la aplicación se está ejecutando. Entonces aquí, puedes navegar a esta ruta, y eso es lo que vuelve nuestra ruta. Entonces el slash en este caso. Entonces si te das cuenta, aquí tenemos también esta API docs. Así que FAST API creará como doc inmediatamente, y podremos consultar todas nuestras rutas y probar nuestras rutas así como la documentación, solo por simpl ir a este RL aquí Entonces otra vez, si voy al mismo y luego un Doc tendremos un FastAPI swagger con Por ahora, solo tenemos la raíz pero al final, más abajo en el curso, aquí tendremos más rutas. Entonces aquí en los muelles, se puede ver, se puede probar la ruta Entonces, si sólo voy a ejecutar, tendremos ensayos que establecemos aquí. 12. 12. Otro ejemplo de ruta: Podemos buscar una ruta más compleja que podamos usar en nuestra aplicación. Entonces antes que nada, voy a pegar aquí sólo un simple objeto. Entonces este objeto, se puede ver que tenemos tres elementos con nombre y descripción. Por lo que esta será una especie de nuestro asistente de artículos en descripción que podemos navegar a una página que contiene esta información. Dejaré este objeto en los recursos para que solo puedas copiarlo y pegarlo en tu proyecto para que no tengas que escribir todo esto. Así que ahora, lo primero que tenemos que hacer es crear otro Grow como lo hicimos antes, solo lo haremos en entonces app. Así que de nuevo, nuestra aplicación Fast API, y luego decimos G y luego abrimos llaves, y vamos a querer que nuestra ruta se llame items Luego slash, y luego para cada artículo, tendremos el artículo Por lo que vamos a pasar esto un argumento para obtener cada uno de estos ítems. Entonces otra vez, necesitamos definir nuestra función y esta función podemos nombrarla get item y luego pasaremos nuestro Im ID que va a ser, en este caso, integer. Entonces aquí sólo estamos asumiendo el tipo. Siempre seremos un entero. Entonces simplemente cerramos aquí, entonces podemos crear una variable llamada item, que serían los itens Entonces nuestro objeto get get y obtendrá ITNs ID. Entonces pasaremos ese ID de Ian en nuestra función, y luego obtendremos exactamente el mismo entero de nuestro objeto. Y luego solo hacemos un poco de manejo de errores. Entonces, si ITN no es, así que si no existimos, podemos simplemente devolver un simple error Y entonces decimos ITN no encontrado. Y el conjunto será error 04. Entonces 404 suele ser el error no encontrado en el desarrollo de la aplicación. Pero si todo sale como se esperaba, solo devolveremos el artículo. Así que solo devolveremos el artículo correcto. Así que ahora podemos guardar y volver a nuestro navegador. Y aquí como vemos tenemos nuestra primera ruta que creamos, y luego solo necesitamos navegar dos elementos. Y si presionamos Iones, no encontramos porque necesitamos establecer el entero como vimos en nuestra función. Entonces otra vez, otro slash, vamos a conseguir el artículo número dos, y no hay diversión porque me olvidé de agregar una porción aquí Por lo que deberían ser los INs de barras de raíz y luego el ítem 80. Entonces, si vuelves a nuestro navegador, solo necesitamos refrescar esto y aquí lo tenemos. Entonces nuevamente, nuestro punto dos de nuestra lista. Podemos ver los otros dos. Entonces el ítem uno, el ítem uno es correcto, y luego el ítem tres. Así cohost 800 y luego slash DGS. Tenemos, nuevamente, nuestro PI Swagger más rápido, y aquí tenemos una nueva ruta Así que sólo podemos abrirla aquí. Tenemos nuestros parámetros de que nuestra ruta solo toma el ID del artículo, y luego el ID del artículo será uno, dos o tres, como lo configuramos antes, y podemos probarlo. Se abrirá la caja para que probemos, y podemos volver a decir el punto dos. Y si decimos ejecutar, obtenemos artículos a nuestra ruta y luego el ítem correcto. Así que vamos a intentarlo de nuevo. Tan claro y luego di el ítem uno, ejecuta, y yo soy uno, el correcto. Ahora bien, si establecemos el ítem cuatro, como probamos en nuestra rousa antes, solo podemos ejecutar de nuevo y obtenemos el mensaje de error 13. 13. Aplicación para correr con Uvicorn: Ahora instalaremos UVcorn en nuestra aplicación. UVcorn es ASGI por lo que una interfaz de puerta de enlace de servidor síncrona que está diseñada para ser muy rápida para aplicaciones pyting para serle Pero ahora me preguntas, ¿por qué necesitamos esto? Ya tenemos nuestro servidor funcionando con una API rápida normal. Bueno, entonces UVcorn nos ofreció más beneficios por la velocidad Fast API se construye sobre los estándares ASGI, y UVcorn es totalmente compatible con los estándares, lo que garantiza una integración perfecta Además, UVcorn tiene un soporte sincrónico. Python como características sincrónicas que permiten un manejo eficiente y solicitudes simultáneas UVcorn también está listo para la producción y puede manejar cargas e, lo que lo hace adecuado tanto para el desarrollo como para el despliegue También nos permite configurar fácilmente los ajustes de UVcornn. Por lo que los beneficios para las aplicaciones web con UVcorn son los mejores tiempos de respuesta, escalabilidad y está preparado para ser utilizado con Python moderno Ahora, para instalar UVcorn en nuestra aplicación, simplemente volvemos a los códigos de hysal Studio Podemos detener nuestro servidor con control C, paramos nuestro servidor, y luego puedo borrar nuestro servidor para que sea para que ustedes puedan verlo mejor. Y entonces sólo podemos decir PIP. Por lo que PIP es el gestor de paquetes de PyTon, instalamos nuestros paquetes en PyTon instalamos Ahora solo podemos presionar Enter y dejar que el paquete se instale. Así que finalmente, que instalemos nuestro UVcorn, podemos ejecutar la aplicación con él. Entonces en este caso, solo decimos UVcorn columna principal y luego arriba, y luego vuelve a cargar Por lo que este indicador de recarga permitirá que la aplicación se vuelva a cargar cada vez que ocurran algunos cambios También podemos agregar más opciones al cable UVcord. Entonces digamos que queremos echarlo en un puerto diferente. Entonces solo decimos la aplicación principal de UVcorn, y luego podemos decir puerto Entonces actualmente estamos ejecutando el puerto 8,000 y solo podemos decir 80, 80, y luego nuestra aplicación se ejecutará en este puerto. Pero por ahora, simplemente lo ejecutaremos normalmente con una bandera de recargas. Bien. Bien, entonces ahora, nuestra aplicación se está ejecutando con UVcorn. Vamos a verlo en un navegador. Y tenemos nuestros documentos y nuestra aplicación normal funcionando. Y probemos Ins punto uno. Y parece que todo salió bien, y ahora tenemos nuestra aplicación ejecutándose con UVcorn 14. 14. Instalación de paquetes con requisitos: En la conferencia anterior, vimos el paquete Twinstyle usando Así que usa paquetes BIP Twinstyle y Byton. Pero imagina lo siguiente. Imagina que tenemos un equipo grande y todo el equipo debería usar los mismos paquetes sin ser instalados uno por uno manualmente. Además, se prefieren las mismas versiones, por lo que la aplicación se ejecutará igual para todos. Entonces, ¿cómo podemos hacer eso? Entonces en FAST API, podemos agregar el texto de requisitos, y luego la aplicación instalará todos los requisitos a través de ese archivo. Entonces aquí, en nuestra barra lateral, creamos un nuevo archivo y lo llamamos requisitos texto. Entonces lo guardamos, y luego tenemos un archivo de texto. Y para eso, podemos agregar los paquetes aquí. Digamos, por ejemplo, nuestra API rápida, y luego la versión del paquete. Entonces en este caso, tenemos el 0.1 15 y el cero. No te preocupes. Dejaré este expediente en los recursos. Y por favor, la forma preferida es copiar el contenido de ese archivo y pegarlo aquí porque las versiones pueden ser diferentes para ti en el momento que estás viendo este curso. Y así, nos aseguramos que ejecutes la aplicación exactamente como yo. Entonces aquí tenemos el número de versión, pero digamos que queremos usar la última versión. En este caso, solo necesitamos tenerlo como API rápida, y luego la gente obtiene el paquete más reciente. Entonces ahora usaremos las versiones actuales. Entonces voy a decir FAST NPI es cero punto 115 punto cero. Entonces también usaremos flujo tensor que es la versión 2.16 punto uno Puedes saltarte esta parte y simplemente copiar los archivos que mencionamos antes. También necesitamos un nPi 1.26 punto cuatro. También utilizaremos el CV abierto Piton 410, punto cero punto 84 Y luego la versión UVcorn que instalamos antes. Pero nuevamente, así cero punto 30 punto seis, y luego guardamos el archivo. Entonces ahora, ¿cómo instalamos todo a la vez? Así que de nuevo, en nuestro terminal, simplemente paramos el servidor con Control C, y luego solo podemos decir PP Instalar aire cuatro requisitos, y luego nuestros requisitos punto texto. Ahora si presionamos Enter, instalará todos los paquetes. Entonces, solo presionemos Enter. Y entonces lo tienes. Entonces todos los paquetes están instalados, y luego podemos simplemente ejecutar, de nuevo, el UVIcorn main up, y luego Entonces como puedes ver, todo salió sin problemas y ahora todos nuestros paquetes están instalados. 15. 15. Qué es React y TypeScript: Imagina que estás construyendo tu casa. Desea que sea resistente, eficiente y fácil de modificar si necesita agregar una habitación o cambiar un diseño. En el mundo del desarrollo web, react y mecanografiado son como las herramientas avanzadas y el conjunto de planos te ayudan a construir Entonces comencemos con reaccionar. Piense en reaccionar como un maestro carpintero que se especializa en crear componentes reutilizables En lugar de construir su habitación desde cero cada vez, React le permite crear piezas modulares como paredes preconstruidas, ventanas o incluso habitaciones enteras. Que puedes usar una y otra vez. Esto no solo ahorra tiempo, sino que también garantiza la consistencia en toda su casa o aplicaciones web. React hace que su sitio web sea interactivo y dinámico. Es como tener una casa donde las luces se encienden automáticamente cuando entras a tu habitación o la temperatura se ajusta por cuenta propia. En una aplicación de reacción, cuando haces clic en un botón o ingresas algún texto, la página puede actualizarse instantáneamente sin necesidad de recargarla por completo Esto crea una experiencia de aplicación fluida para los usuarios. Ahora hablemos de mecanografiado. Si React es nuestro maestro carpintero, mecanografiado es como tener un asistente súper inteligente que doble verifica todo antes de que se construya TypeScript es un lenguaje de programación que se basa en Javascript, agregando una capa adicional de seguridad y claridad a su Imagina que estás tratando de encajar una clavija cuadrada en un agujero redondo. Simplemente no funciona, ¿verdad? El mecanografiado evita este tipo de errores en tu código antes de que Es como tener un chico que se asegure de que estás usando el tipo de material adecuado para cada parte de tu casa. Si accidentalmente intentaste usar una ventana donde debería estar una puerta, mecanografiada te avisará incluso antes de comenzar a construir Esto puede sonar complicado, pero en realidad te hace la vida más fácil a la larga. Con el mecanografiado, captas errores antes, tu curso se vuelve más autoexplicativo y el trabajo en equipo se vuelve más suave porque todos pueden entender el plano con Cuando se combinan reaccionar mecanografiado, obtienes lo mejor de ambos mundos Tiene el poder de construir aplicaciones web interactivas dinámicas con componentes reutilizables al mismo tiempo que tiene la red de seguridad que atrapa posibles errores y hace que su código sea más robusto. A medida que los estudiantes se sumergen en el desarrollo web, piensan que el aprendizaje reacciona y mecanografiado es ganar superpoderes React le brinda la capacidad de crear interfaces de usuario flexibles y eficientes. Wild TypeScript te proporciona visión de rayos X para detectar y prevenir problemas antes de que Juntos, te mantienen con las herramientas para construir aplicaciones web modernas y confiables que pueden soportar la prueba del tiempo y escalar el crecimiento de tus proyectos. Entonces, en este curso, usaremos este tanto react como mecanografiado para construir nuestra aplicación front-end 16. 16. Instalación de Nodejs: Así que ahora instalaremos Nojs. Pero, ¿qué no es JS? Por lo que NOJs es una plataforma cerrada de código abierto que permite que JavaScript desarrolladores usen y ejecuten entornos de tiempo de ejecución de Así que instalar no Js es muy fácil, solo puedes ir tonjs.org, y aparecerá en el botón hacia abajo para Y esto ya tiene la versión de su sistema. Entonces, si estás ejecutando el entorno Windows, las descargas serán para el sistema Windows. Si estás ejecutando un MAC, también será para macOS. Entonces solo necesitas descargar, asegúrate de que estás usando LTS, y para nuestro proyecto aquí, usaremos siempre la versión mayor a 20 Entonces, al momento de este curso, debería estar bien. Así que solo descarga no Js a donde más te convenga y simplemente ejecuta el archivo e instala no Js. Después de completar la instalación de NGS, puede abrir un terminal para verificar la instalación Puede que tengas que reiniciar tu sistema, pero rara vez sucede. Entonces en nuestro terminal, podemos verificar la versión de NGS simplemente escribiendo nota Versión Dash Dash y aquí puedes ver que estoy ejecutando la última, pero que como características avanzadas, realmente no la necesitamos, la usas aquí o realmente no la necesitamos aquí. Entonces en este caso, solo puedes usar el 20, el LTS que es común y mejor para el usuario habitual Así que vamos a revisar tu versión. También puedes verificar tu versión usando el atajo, así que no V. Lo mismo. Para que puedas ver tu versión de no Js aquí. 17. 17. Crea una aplicación de First React con Vite: Así que ahora podemos empezar a crear nuestro front end. Y para crear nuestro front-end, vamos a usar VT. Entonces T es una herramienta que nos permite crear fácilmente aplicaciones con react, view, etc. Incluso aplicaciones JavaScript vainilla. Su marco nos permite un andamiaje rápido de las aplicaciones y también una rápida construcción y renderización Entonces para crear una aplicación, así volvemos a nuestro terminal en nuestro terminal, estamos en nuestra carpeta servidor. Así que solo vamos un nivel abajo, así que cd punto punto. Y luego estamos en nuestra carpeta de proyectos, y luego solo podemos hacer NPM, crear t y luego solo decimos a más tardar para que podamos instalar la última versión Entonces solo presionas Enter, y luego decimos que sí. El nombre del proyecto, lo vamos a nombrar como reconocimiento de objetos un nombre de Packers puede permanecer igual. Y luego tenemos todas las opciones con las que podemos construir nuestra aplicación. Entonces en este caso, solo vas a elegir el de reaccionar, usar las teclas de flecha para navegar, reaccionar, y luego también vamos a usar mecanografiado, y nuestra aplicación está instalada Así que ahora podemos navegar a la carpeta de la aplicación. Así que mira la aplicación de reconocimiento de objetos. Entra, y luego lo vamos a abrir con nuestro código de Visual Studio, así código, y luego punto. Y ahora que abrimos nuestra aplicación con código de Visual Studio, necesitamos instalar nuestros paquetes. Así que ahora abriremos nuestra terminal dentro de nuestro código de Visual Studio. Y si por alguna razón no aparece la opción de abrir el terminal en tu configuración ahí, solo puedes decir Shift Control P en Windows o Comando, Shift P en Mac. Y luego tienes un desplegable y solo puedes escribir Toggle. Terminal. Y aquí tenemos la opción de abrir la terminal, y solo tienes que pulsar Enter, y la nueva terminal aparecerá para ti. Y estamos dentro de nuestra carpeta de proyectos. Podemos simplemente decir NPM install para instalar el paquete o NPMI como corto Así que instalemos el paquete y dejemos que se ejecuten. Entonces ahora los paquetes están instalados. Podemos ejecutar nuestra aplicación. Y en este caso de WVD, solo a NPM corremos sordos para ejecutar el modo de desarrollo como podemos ver aquí En nuestro paquete Jason, cómo ejecutar la aplicación en modo muerte, cómo construir nuestra aplicación, ejecutar líder e incluso previsualizar el modo Has Build. Entonces cerremos esto y ejecutemos la ejecución de NPM Def. Después de que se haya construido, verá que tiene nuestro local como donde se ejecuta la aplicación. Así que vamos a copiar esto e ir a nuestro navegador, y luego vemos que tenemos nuestra aplicación VID y reaccionar ejecutándose. 18. 18. Componente y estilo de control de imagen: Ahora para el front-end principal, podemos volver al costo de Visual Studio, y dentro de nuestra fuente, tenemos esta app dot TSX, ese es nuestro punto de entrada, y aquí no vamos a necesitar algunas cosas Simplemente cerraré o pondré termot bit abajo y no necesitamos este te Y podemos borrar todo lo que esté dentro de nuestra devolución. Además, como ves, estos paquetes no se utilizan, por lo que también podemos eliminarlos. Y por ahora, lo dejamos así. Entonces B aquí, vamos a crear una nueva carpeta, entonces icono aquí, y lo llamamos componentes dentro de nuestros componentes porque nuestra aplicación es muy simple, en el lado frontal, podemos simplemente crear un componente y luego crear un nuevo archivo y lo llamamos control de imagen punto tsx para el mecanografiado Y debido a que también necesitamos CSS, podemos crear un nuevo archivo y llamarlo simplemente index dot CSS. Así que ahora en nuestra espalda a nuestro componente, el control de imagen TSX, necesitaremos crear nuestra plantilla Entonces para eso, primero, vamos a importar nuestro archivo CSS, así decimos import. Indexe CSS, y luego creamos nuestros componentes, así digamos costo. Y nuestro componente será solo control de imagen. Y como componente funcional, creamos la función R para ello, y luego simplemente devolvemos algo dentro, que por ahora puede ser solo un div. Entonces debido a que nuestro control de imagen aún no se usa, necesitamos exportarlo para que se use en UpttsX Digamos exportar control de imagen predeterminado. Yo lo guardaré. Y luego en nuestro PTSx a nuestro regreso, podemos usar el componente para crear digamos imagen Control. Y como puedes ver aquí, mi Visual Studio ya dice importar control de imagen para componentes, control de imagen. Y luego como puedes ver, acabas de importar el control de imagen de nuestra carpeta de componentes y de nuestro componente. Entonces las llamadas y app dot TSX se hace por ahora. Y podemos volver a nuestro componente principal porque si vas a volver al navegador, ves que está vacío porque aún no estamos renderizando nada. Así que una y otra vez, porque es un simple at app, solo voy a pegar algunos CSS para nuestra aplicación. Dejaré este archivo CSS en los recursos para que simplemente podamos copiarlo y pegarlo aquí. Así que solo CSS estándar para nuestros contenedores y nuestro contenedor de imágenes. Yo solo lo guardaré, y luego tenemos acceso a esas clases dentro de nuestro componente. Y primero, crearemos nuestros contenedores para que podamos empezar a ver algo en la app. Entonces usamos este DIF y porque vamos a usar más de un contenedor y más de un DV aquí en la plantilla, necesitamos un soporte. Entonces abre brankets y solo puedo cortar esto y copiarlo aquí, y este div tendrá el nombre de clase de container Entonces, desde nuestro archivo CSS, tenemos esta clase contenedora. Entonces continuando en ese div, tendremos otro div que es nuestro contenedor interno. Entonces nuestro nombre de clase será contenedor interno. Por ahora, sólo podemos salvarla. Tengo un errata aquí, entonces es contenedor. Si no, la clase no va a funcionar. Entonces aquí sólo puedo poner un simple Ptag para ver nuestra aplicación funcionando De vuelta a nuestro navegador, vemos ya corriendo aquí apareciendo en nuestra pantalla en nuestra aplicación, que significa que todo es correcto. 19. 19. Configuración de nuestras variables de estado: Entonces lo primero es lo primero, necesitamos establecer nuestras variables de estado para poder usarlas dentro de nuestra lógica dentro de nuestro componente. Entonces vamos a necesitar primero la variable de estado de la imagen, por lo que decir costo, imagen, y luego decir establecer imagen. Y esta imagen será de cadena. Entonces, viniendo de nuestro backend, solo tenemos cadena para imagen, y decimos use state y luego abrimos corchetes Ahora necesitamos importar estado de uso para que podamos usarlo. Entonces dejamos abajo el índice de importación ESS, y encima, decimos import, use state, y esto viene de react. Ahora podemos guardar, y necesitamos establecer el tipo de nuestra imagen. Entonces aquí por ahora, no tenemos ningún tipo para nuestra imagen, nada cuando arranca el componente. Entonces queremos que esta imagen sea string como un tipo O null porque al principio no tenemos imagen, así que puede ser nula y establecemos el estado inicial en null. También necesitamos tener una variable de estado para mantener el archivo que vamos a plod al front end y luego al back-end para que podamos obtener la predicción y los resultados Entonces nuevamente, costo y tenemos el archivo selectivo, y decimos conjunto seleccionado. Archivo. Y nuevamente, usa el estado. Y en este caso, necesitaremos un tipo especial que sea archivo que tenga todas las propiedades de los archivos. Y también queremos que sea nulo, o nulo. Entonces esto borra esto no necesitamos, y luego simplemente cerramos los corchetes y establecemos el estado inicial como nulo porque al principio no tenemos ningún archivo seleccionado. Y ahora para continuar en nuestro front end, también necesitamos establecer tres variables más que van a ser cambiadas posteriormente. Pero de todos modos, lo configuraremos ahora para que veas cómo funciona. Entonces en este caso, necesitaremos una predicción. Pero en este caso, no necesitamos ser variables de estado. Podemos simplemente establecer una predicción const say normal. Eso es un array y nos fijamos en array vacío. También necesitamos ese cargando. Entonces cuando nuestra aplicación se está cargando, y este caso es un lingote, y establecemos el verdadero falso Y el último será error. Entonces digamos error de costo, también booleano, así que a word false y luego también lo establecemos Entonces estas tres variables irán posteriormente a nuestro gancho donde vamos a debajo las solicitudes y se establecerán en la plantilla. Pero por ahora, simplemente lo configuraremos así para que pueda usarse en nuestra plantilla. 20. 20. Plantilla de cuadros de predicción e imagen: Continúa ahora creando nuestro front-end básico donde tenemos el botón para aplaudir la imagen, una caja donde la imagen se renderizará Y también el número de predicción, simplemente borraremos esta P aquí, y luego decimos llaves abiertas y decimos si no tenemos imagen Entonces, si la imagen es nula o indefinida o está vacía, solo decimos imagen. Y N, digamos, abre una B, y dices, por favor aplausos tu imagen Así que vamos a guardarlo y a ver qué pasa en el front end. Y tenemos un mensaje que dice: Por favor sube tu imagen. Hasta el momento tan bueno. Continúe aquí. Pero si tenemos una imagen, venimos aquí una y otra vez, llaves rizadas y decimos que la imagen existe, así que solo abrimos ahora llaves y un DIV y este Dv amaba el nombre de clase de contenedor de imagen de nuestro archivo CSS Y luego abrimos la etiqueta de imagen que la fuente de nuestra variable de imagen. Por lo que aquí se puede ver ya aparece resaltado. Entonces significa que está en uso. En solo podemos decir algo así como aplausos y el nombre de la clase será la imagen, nuestra clase CSS, y luego cerrar la etiqueta Y simplemente guardamos nada va a aparecer en el front end porque todavía no tenemos imagen. Entonces continuando dentro del mismo contenedor, vamos a tener nuestra pervición Entonces decimos, nuevamente, dice Curlbra, si la previción existe, tomaremos el primer ítem de nuestra matriz, y verás por qué más adelante, pero por eso lo configuramos como dice Curlbra, si la previción existe, tomaremos el primer ítem de nuestra matriz, y verás por qué más adelante, pero por eso lo configuramos como una matriz. En este caso, está vacío. Y nuevamente, abrimos ases y abrimos un div div con un nombre de clase de cuadro de predicción. Por lo que nuestro cuadro de predicción contendrá la información proveniente de la propia producción. Cerrar la Div y dentro, tenemos una PTA con un nombre de clase de texto de categoría va de nuevo y el texto de categoría tendrá el texto proveniente de la predicción, que en este caso, abrimos de nuevo las llaves, y esto vendrá del backend Entonces se renderizará en nuestro back-end en nuestra solicitud. Y tenemos la predicción desde el cero esto sigue siendo un error porque todavía no tenemos un tipo definido ahí, pero está bien. Categoría de predicción, y queremos todo en mayúsculas. Entonces dicen dos mayúsculas. Y para que N para que estos errores desaparezcan en tu aplicación, solo podemos volver a nuestro conjunto constante. Queremos una variedad de cualquiera. Por lo que cualquier tipo se utilizará aquí. Este es un error con DST B con una lenteja que no permite ningún tipo, pero esto se cambiará más adelante No importa para nulo. Y así, aquí no tenemos ningún error. Pero continuando año, nuevamente, abajo, abrimos otra PTA que tendrá el nombre de clase de precisión de categoría. Entonces será la precisión de la predicción. Eso es atacado con la imagen, y luego cerramos, y luego abajo otra vez, diremos Clibrass vuelve a abrir corchetes y decimos predicción Nuevamente, desde cero desde el primer elemento de nuestra matriz, queremos una puntuación. Veces uno y porque queremos crear como número porcentual, y luego decimos dos fijos uno. Entonces porque va a llegar un gran número y queremos convertirlo como un valor porcentual. Entonces fuera de las caribras decimos porcentaje, porcentaje, precisión Pero esto se mostrará más adelante cómo funciona exactamente. Entonces ahora te estás preguntando qué está pasando en nuestro front end. Así que vamos a ver. Entonces todavía nada porque no tenemos ninguna imagen que mostrar. Ahora estoy viendo que el contenedor está un poco a la derecha, y esto se debe a que establecemos el ancho para que podamos volver atrás. Y en nuestro índice CSS, solo eliminamos la w y la guardamos. Y ahora es exactamente en el medio. Así que volviendo a nuestro control de imagen, necesitamos establecer el contenedor para el error. Entonces después de este div, que nos nuestra predicción y las llaves rizadas también para nuestra predicción, damos algo de espacio aquí, y decimos error, de nuevo, llaves y luego error, P, y luego estas personas tendrán un nombre de clase de Y luego lo cerramos, y luego al interior, nos encanta el error que viene entonces de nuestra petición Por ahora, es simplemente falso. No debería ser falso, sino que debería ser una cadena en su lugar y dices, cadena diremos que no hay error. Sólo come en un poquito aquí. Después de eso, tendremos nuestro insumo para subir la imagen. 21. 21. Entrada de carga de imágenes: Así que ahora para nuestra entrada, donde subiremos la imagen directamente desde nuestro sistema a la aplicación. Después del error aquí, abriremos la etiqueta de entrada, por lo que la entrada. Y el tipo de esa entrada será un archivo porque vamos a subir un archivo del sistema. Entonces en este caso, archivo de imagen, y decimos sobre el cambio, eso tendrá el evento de cambio de nuestra entrada. Pero ahora, en este caso, acabamos de establecer la función vacía, así que no tenemos ningún error. Y entonces decimos aceptar la imagen. Imágenes en este caso, queremos todo tipo de imagen ahora. Entonces solo pon una estrella y se aceptarán todos los tipos de imagen. Y luego cerramos la etiqueta de entrada. Justo abajo, queremos botón donde procederemos con la inserción de la imagen. Entonces botón y decimos onClick. Y nuevamente, debido a que aún no tenemos la función para el clic, simplemente crearemos una función vacía y el decir luego lo deshabilitamos se deshabilitará este botón cuando no tengamos un archivo select. O si se está cargando. Entonces, si no tenemos ningún archivo de la solicitud de que se está cargando la aplicación, se deshabilitará el botón. Y luego cerramos el botón, y luego dentro del botón, tenemos el texto que necesitamos, y el texto cambiará dependiendo del estado de la aplicación y los aplausos de la imagen Entonces otra vez, caribrs decimos, si se está cargando, diremos aplausando Si no es una vestimenta y tenemos una imagen, queremos que el botón diga que esta identificando o identificando la imagen para que podamos tener la predicción. Pero si no, queremos que el botón diga un plosimage y las funciones serán distintas Entonces ahora si guardamos y vamos a nuestro navegador, decimos ya aquí que tenemos algo arriba en la pantalla. Entonces aquí tenemos el botón para elegir el archivo. Entonces nuestra entrada Y si haces clic, se abre una ventana donde podremos comprobar nuestras imágenes y el botón Blosimage está deshabilitado porque no tenemos ninguna Aquí no aparece ningún error porque lo configuramos como un error de lingotes que existe, y en nuestro caso, realmente existe Pero si pones, digamos, null da un error porque necesita ser string o null no aparecerá. 22. 22. Explicación de Tensorflow SSDMobileNetV2 y COCO DataSet: Ahora vamos a echar un breve vistazo a los paquetes o los modelos de aprendizaje que vamos a usar en el front-end. Entonces, antes que nada, flujo tensor es desarrollado por Google, y es una poderosa biblioteca de software de código abierto para el aprendizaje automático y la inteligencia artificial Es la base que permite a las computadoras aprender de los datos y tomar decisiones. ingenieros e investigadores utilizan el flujo tensor para construir y entrenar redes neuronales para tareas como el reconocimiento de imágenes, procesamiento del lenguaje natural y, en nuestro caso, la detección de objetos El SSTAm de A net versión dos para usar aquí es una arquitectura de red neuronal específica diseñada para la detección de objetos Es una ingeniosa combinación de dos conceptos. Así SSD, detector de disparo único y Red Móvil Versión dos. SSD permite que una red detecte múltiples objetos en una imagen y en un pase directo, haciéndolo rápido y eficiente. versión dos de Mobile Net es una estructura de red liviana que está optimizada para dispositivos móviles y navegadores, lo que garantiza que el modelo pueda ejecutarse rápidamente, incluso en teléfonos inteligentes, sistemas integrados y computadoras de almacenamiento. El coco, los objetos comunes en contexto, el dataset Coco es una gran colección de imágenes que sirve como libros de texto para entrenar modelos de detección de objetos Contiene más de 330,000 imágenes con más 2.5 millones de instancias etiquetadas de objetos en 80 categorías Estas categorías van desde artículos comunes como autos y perros hasta objetos más específicos como semáforos y raquetas de tenis Cuando se combinan, estos tres componentes crean un potente sistema para la detección de objetos del mundo real. TensorFlow proporciona las herramientas y el entorno para construir y entrenar el modelo de la versión dos de la red móvil SST utilizando el El resultado es un detector de objetos rápido y eficiente. Eso puede identificar y crear rápidamente múltiples objetos en imágenes o transmisiones de video, incluso en dispositivos móviles. Esta tecnología tiene numerosas aplicaciones prácticas. Se utiliza en vehículos autónomos para identificar señales viales y peatones y sistemas de seguridad para detectar objetos o comportamientos sospechosos En retail, para la gestión del entorno, e incluso en aplicaciones de realidad aumentada para reconocer e interactuar con objetos del mundo real La velocidad y la eficiencia de la reversión de la red SSD Mobile combinada con una capacitación integral del conjunto de datos Coco, hacen particularmente útil para aplicaciones en tiempo real donde la detección de objetos rápida y precisa es crucial 23. 23. Agregar el modelo de COCO de MobileNetV2 SSD: Así que ahora podemos comenzar a agregar el modelo de predicción y el conjunto de datos a nuestra aplicación. Así que vamos a utilizar este modelo de aprendizaje de flujo tensor con un conjunto de datos de Coco Entonces dejaré este enlace en la descripción. Simplemente necesitas navegar a esta página de Github, y luego vamos a usar este modelo exacto aquí. Así que el SSD, red móvil Vt Coco. Entonces vamos a simplemente hacer clic en el enlace, y luego probablemente tengas una advertencia de seguridad, pero solo continuarás al sitio. Entonces después de descargar el modelo, tienes un archivo zip como este. Nosotros sólo lo extraeremos. Y luego nos encanta la carpeta que queremos. Simplemente copie la carpeta a nuestro proyecto de servidor, así que en la carpeta del servidor que creamos antes para nuestro back end. Y luego aquí solo necesitamos editar el título y eliminar la fecha de creación y simplemente dejarla Coco al final. Así que ahora podemos ahorrar para luego volver a nuestra aplicación. Así que tenemos donde tenemos nuestro código para nuestro servidor funcionando, así nuestro back end. Y podemos ver aquí ya tenemos nuestro modelo integrado, y ahora todavía tenemos que pasarlo a nuestra aplicación. 24. 24. Carga de modelos preentrenados en una aplicación: Así que volviendo a nuestro código, lo primero que hacemos es simplemente eliminar alguna parte del código. Podemos simplemente dejar la ruta raíz solo para probar y eliminar todo lo demás y luego guardar, e iremos a importar el conjunto de datos que acabamos de agregar a nuestro proyecto. Entonces lo primero es lo primero, necesitamos crear el entorno para ello. Por lo que tendremos que importar sistema operativo para que podamos detectar nuestro sistema operativo y habilitar el acceso a todos los puntos. Entonces después de eso, solo hacemos el sistema operativo que importamos, luego dot environ Y luego aquí abriremos las llaves cuadradas y luego estableceremos nuestro flujo tensor para habilitar todo en mayúscula, así habilitaremos una D y N, óptimos Ds, y pondremos estas Entonces esto es para permitir que el ambiente ejecute el flujo del tensor más tarde Entonces entonces tenemos que importar el flujo del tensor también. Y para eso, lo haremos aquí arriba. Así que solo diremos import TensorFlow tiene flujo tensor. Recuerda que para instalar el flujo tensor antes y añadimos una explicación sobre el video anterior Entonces tenemos el flujo tensor importado. Necesitamos establecer las variables para poder usar este modelo en nuestro proyecto. Justo después de establecer nuestro entorno, tenemos que llamar primero a nuestro modelo. Así que solo creamos una variable de entorno en este caso, con mayúsculas, modelo ahí. Y aquí queremos llamar al modelo guardado y tamaño de nuestra carpeta de red móvil que antes estaba desamparada Entonces en este caso, solo abrimos cotizaciones y decimos SSD, y ella estaría en letra minúscula. Entonces solo decimos, SS D. Red móvil Versión dos, Coco salvó modelo. Por favor, asegúrate de que esta ruta sea exactamente como escribiste aquí porque recuerdas que acabamos de eliminar la fecha, pero si dejaste la fecha, necesitas agregar el resto aquí. Entonces necesitamos establecer el modelo del flujo del tensor. Entonces decimos modelo y luego TF guardó las cargas del modelo. Para ser una cuerda, y ahí vamos a perder nuestro hocico Entonces el directorio de nuestro modelo. Por lo que esto asegura que estamos ejecutando el modelo de producción. Así que nuestro modelo pre generado viene del flujo tensor y la red móvil V dos en esta variable Y entonces necesitamos firmar el modelo a inferir, que podamos tenerlo sirviendo como predeterminado en este caso, y hay muchas opciones, pero en este caso, vamos a hacerlo por defecto Entonces solo digamos inferir nuestra variable y luego modelar firmas de puntos y luego abrir corchetes, y decimos servir por defecto. Así que guárdala. Y ahora hemos perdido nuestro hocico en variable en nuestra aplicación, y a continuación vamos a ver cómo los vamos a usar. 25. 25. Función de inferencia de ejecución: Y ahora estamos listos para crear nuestra primera función, así que nuestra función de interferencia de ejecución. Y esta función está diseñada para realizar la detección de objetos en la imagen dada usando el flujo tensor de pre pérdida que agregamos aquí Esta función se encargará de preparar la imagen en el formato correcto para el modelo y luego ejecuta la interferencia y luego devuelve los resultados. Luego también devolvemos caja con ella que amamos los objetos como cajas delimitadoras, etiquetas de clase y la puntuación de confianza que vamos a usar en nuestro front-end Y luego estas funciones sirve puente entre la imagen en bruto que vamos a subir y el modelo de detección de objetos que agregamos aquí. Entonces para comenzar eso, solo comenzaremos creando una nueva función así que la función Python, usamos DF luego simplemente la llamaremos ejecutar inferencia o ejecutar inferencia Y vamos a tomar y esta función tomará una imagen como argumento. Y el tipo de esta imagen queremos que sea nPi. Y matriz D. Entonces ahora solo necesitamos importar el num Pi. Así que volvamos a nuestras importaciones, abrimos un nuevo vino y decimos import num Pi S&P Así que ahora el error aquí se ha ido. Así que ahora el error aquí se ha ido Tenemos el num Pi estamos diciendo todo sobre el NumPI incluso la docmuación si quieres más información Y esta función devolverá un diccionario de cadena, y luego simplemente haremos cualquiera por ahora. Entonces solo queremos un diccionario, abrir corchetes, y agregaremos la cadena como etiqueta o nombre, y luego simplemente agregaremos cualquiera en tamaño. Y luego simplemente cerramos la función. Y ahora ves aquí, tenemos estos dos errores porque ambos no están definidos, por lo que necesitamos volver a nuestras importaciones e importar la mecanografía. Entonces de escribir vamos a importar las excavaciones de diccionario y N. Y aquí tengo un error tipográfico No es escribir, sino escribir, así que ahora es correcto, y los errores aquí se han ido. Entonces continuando con nuestra función, entramos. Ten cuidado. Nuevamente, necesitamos esta identación en Piton y solo vamos a establecer nuestra primera variable, el tensor de entrada que toma un flujo de tensor y lo convertiremos en tensor Y esto tendrá que pasar nuestra imagen. Entonces esto es básicamente la preparación o la conversión de la matriz numpy Entonces esta imagen aquí, a un tensor de flujo tensor, que es una entrada requerida al modelo de datos de objeto que el flujo tensor requiere para detectar la Entonces, básicamente, estamos convirtiendo nuestra matriz NumPI en tensor de flujo tensor, entonces a tensor Y sin embargo me olvidé preguntar el error así que entré tensor. A continuación, asignaremos a nuestro tensor de entrada será nuestro tensor de entrada de antes. Entonces éste. Y volvimos a abrir los corchetes y dices flujo tensor, Nuevo eje Y luego se extendió y se hace nuestra segunda variable. ¿Y qué significa esto? Entonces esto agrega dimensión extra al tensor, así que a nuestro bastante bien Tensor creando un lote de tamaño uno. Muchos modelos esperan que las entradas estén en lotes, aunque sea solo una imagen. Entonces necesitamos crear estos lotes para pasar a la entrada de nuestro modelo. Y luego para la variable de detecciones, inferiremos el sensor de entrada que Entonces, ¿qué significa esto aquí? Entonces inferir que esta inferir viene de la firma de nuestro modelo, de nuestro modelo precargado y pre entrenado Y este modelo se ejecutará por sí mismo y procesará la imagen y devolverá sus detecciones. Entonces después de cuidar la imagen, manejarla correctamente, pasaremos a nuestro modelo que manejará la detección. Entonces aquí otra vez, olvidé las detecciones S y B porque es más de una Y luego básicamente solo necesitamos devolver estas detecciones. Entonces ahora estamos listos para usar esta función en la ruta. 26. 26. Predice la ruta: Entonces ahora estamos listos para crear nuestra ruta para obtener las predicciones en nuestro front end. Y para eso y porque va a ser una postsolicitud, tenemos que hacerlo justo después de nuestra app donde definimos nuestra app rápida API. Así que solo podemos decir al alza, así que desde la API rápida y luego publicar. Así será una postsolicitud. Y el nombre que tenemos para nuestra ruta puede ser solo predicho. Entonces se define la ruta. Ahora necesitamos la funcionalidad para sí mismo. Así que vamos a tener una función de sincronización para que sea sincrónica a lo largo del curso y profundidad para la función. Y entonces lo llamamos predecir. Y lo que nuestra función necesita tomar, qué tipo de archivos hay que tomar. Entonces necesitamos un archivo. Entonces la imagen que vamos a plod en el front-end y luego cual tipo este archivo debería ser Entonces en este caso, debería ser un BlothFle que sea igual a file con un spread, puede ser cualquier cosa dentro de él, y luego volveremos o quisiéramos regresar en Entonces devolveremos nuestra respuesta json luego podamos manejarla en el front end. Pero entonces otra vez, aquí vemos algunos errores, así que eso significa que aún no lo importamos, así que volvamos a la cima. Y desde nuestra API FAST, también necesitamos el archivo y el archivo de subida. Entonces ambos provienen de la rápida importación de API. Y entonces también necesitamos el JCNRSponse porque es el único año faltante que queremos regresar Y para eso, solo abrimos otra oreja de vino y decimos desde FAST API, y luego de las respuestas de FAST API, queremos importar JCNRSponse y eso es todo para Así que continuando con nuestra función, primero necesitamos crear una variable para esperar nuestra respuesta. Así que podemos simplemente llamar a la variable content o content porque va a ser más de un contenido, y luego vamos a decir, espera, y decimos archivo res. Así que la función python que va a res nuestro archivo, por lo que el tipo de archivo de subida. Y esto permite que el archivo sea subido y leído asincrónicamente Entonces necesitamos convertir los archivos que subimos en una imagen, como convertir de una matriz Numpi y luego a imagen RGB Entonces, ¿cómo hacemos eso? Primero, de nuevo, aquí abajo, solo lo llamamos imagen. Esa es mi nuestra variable, y será igual a la matriz Numpi entonces tenemos la SV dos El SV dos son los códigos para la imagen y luego decimos código EMD E. Por lo que el S V dos se utiliza principalmente a partir de carga de imagen o conversión de espacio de color y potencial redimensionamiento de la imagen. Entonces aquí estamos arrancando la imagen o convirtiendo la imagen, el tamaño exacto o el tipo exacto, tamaño, colores que queremos que se aplaudan Entonces en este caso, tenemos el C V dos, nuevamente, se le da un error. Tenemos que importarlo. Así que volvamos a la cima. Y vamos a darle una nueva línea aquí. Entonces decimos importar como lo hacemos nosotros. Y aquí tenemos que limpiar esto un poco. Demos las importaciones de juntos y las importaciones individuales juntas también. Así que vamos a limpiar esto. Para ser más limpio y específico. Lo mismo aquí con OS, y ahora tenemos un código limpio y más organizado. Entonces volviendo a nuestra función, nuevamente, el error se ha ido. Y dentro de nuestras decodificaciones de imagen EM, volvemos a abrir otros paréntesis, y nuevamente, desde nuestro numpi queremos de nuestro búfer, queremos convertir nuestro contenido a num pi entero o U entero ocho Entonces con ocho caracteres. Y luego continuando aquí, solo ponle un coma y otra vez, el SV dos, y decimos que la imagen era color para que podamos obtener el color también. Porque la imagen viene con colores y luego el modelo necesita los colores RGB exactos para facilitar la detección. Y con eso, vamos a volver a establecer esos colores. Entonces necesitamos convertir el BGR a colores RGB. Entonces podemos establecer una nueva variable aquí, así decimos imagen RGB. Eso es lo que queremos conseguir. De nuevo, de SV dos, y dices color SVT Entonces esta es una función o una clase proveniente del SV dos. Y luego pasamos nuestra imagen a la que convertimos aquí. Y luego decimos SV dos y yo digo, Color. Y porque viene como BGR, decimos BGR a RGB Por lo que nos estamos asegurando que los colores antes de enviar Imagen al modelo vienen como nuestro camino como RBG Entonces tenemos el conjunto de imágenes, los colores, todo convertido y listo para funcionar. Tenemos que pasar la detección. Así que solo creamos unas nuevas detecciones de variables. Y entonces aquí solo llamamos a la función que teníamos antes. Así que ejecuta inferencia que convertirá la imagen en tensor y obtendrá el resultado Así que ejecuta la inferencia, y luego pasamos nuestra imagen correctamente convertida Así imagen RGB. Entonces vamos a obtener los resultados. Entonces estos resultados de la detección que establecemos antes de esta variable aquí, pero aún necesitamos formatearlo correctamente y convertirlo en un objeto para que pueda enviar al front-end. Entonces en este caso, primero establecemos el número de detecciones. El número por supuesto, es un número entero, y decimos detecciones, pop número de detecciones Así que esto extrae una serie de detecciones, y luego convertimos el resultado de la detección en una matriz de árbitros que vamos a hacer ahora Entonces otra vez, detecciones. Entonces llamando a la misma variable, y aquí abrimos Brass rizado para objeto y cada objeto tendrá la clave y el valor. Entonces este valor, abrimos corchete y decimos que los iniciaremos con cero. Entonces una columna y luego decimos el número de detecciones. Éste está aquí. Podemos simplemente cerrar esto y un punto y luego seremos árbitros Y por cada clave y valor en detecciones. Es. Es. Entonces, ¿qué pasó aquí? Entonces aquí estamos configurando el objeto queremos que las detecciones pasen por a. entonces en este caso, decimos for, queremos establecer una clave y el valor como un numbi en todo el número de Entonces, para cada clave y cada valor en las detecciones en estas detecciones, queremos establecer una clave y un valor para ella en el objeto Bien. Entonces necesitamos crear una lista para regresar. Entonces tenemos estos valores aquí, así que una lista con todas estas claves que vienen de las detecciones, y necesitamos hacer un bucle para convertir los resultados de la detección en una lista Y para eso, solo decimos cuatro claves en detecciones. Nosotros decimos detecciones. Clave es igual a detecciones. Clave para enumerar. Después de revisar las claves en nuestras detecciones aquí, establecemos el índice de cada clave de detección de cada detección a la lista Entonces necesitamos mapear las clases detectadas a etiquetas legibles por humanos que vamos a usar con nuestro mapa de etiquetas de uso. Entonces, por ahora, solo podemos necesitar sumar los resultados. Ten cuidado con la atentación y luego solo necesitamos, nuevamente, los resultados y nuestros resultados serán devueltos como una matriz Así que dejémoslo vacío por ahora, y vamos a agregar mapas de etiquetas. 27. 27. Label_Map: No, vamos a necesitar un mapa de etiquetas en nuestro código para hacer las predicciones o nuestro modelo para obtener un ID, y el IT tendrá una etiqueta que tenga el nombre del objeto que se renderizará en el front-end. Y debido a que estamos usando el móvil SST y el dataset coco, ya nos proporcionan un mapa de etiquetas con un archivo PTN para que podamos agregar nuestra aplicación Entonces si vas entonces aquí a este RL, lo dejaré en los recursos, puedes ver que ya se proporciona un mapa de etiquetas con número de identificación y luego con un nombre, la etiqueta del propio objeto. Este mapa de etiquetas en particular puede ser bastante grande. Puedo tener cientos de miles de etiquetas, pero la acorto, y ahora podemos agregarla a nuestra aplicación Entonces podemos ir a nuestros códigos Visal Studio y ahí aquí en la carpeta principal, creamos un nuevo archivo y lo llamamos etiqueta Mapa punto pi. Y luego sólo voy a pegar el mapa de etiquetas. Dejaré este archivo también en la descripción, así que solo necesitas copiar y pegar, y luego tenemos nuestro mapa de etiquetas aquí. Pero luego para usarlo en nuestro archivo principal, necesitamos importarlo. Entonces subimos aquí otra vez y salvamos de hijo de importaciones parte, para decir de mapa de etiquetas, importamos mapa de etiquetas. Entonces básicamente lo que estamos haciendo aquí, estamos importando este objeto aquí a nuestra aplicación principal. Así que no es que tengamos nuestro mapa de etiquetas importado a nuestra carpeta principal, podemos continuar con nuestra ruta. 28. 28. Devolución de resultados de predicción de ruta: Ahora podemos continuar con nuestra ruta Pre vic. Así que nos detuvimos aquí cuando creamos nuestra matriz de resultados. Así que justo antes de la matriz de datos, vamos a recorrer el número de detecciones. Entonces podemos decir cuatro en el rango de número de detección. Entonces miramos a través del rango, rango completo de nuestro número de detecciones que obtendremos aquí Seguimos con la función y decimos, si nuestras detecciones, esta es obtener la detección puntuada porque si recuerdas eso vendrán varias detecciones de una imagen, y luego solo queremos aprovechar la detección de mayor valor que tenga una puntuación más alta porque es la más aproximada al objeto que queremos Entonces, si la detección puntuó uno en nuestra imagen de índice, queremos solo si es igual o superior a 0.5, ese es el que nos interesa. Entonces, si tenemos esa puntuación y esa detección, diremos que el ID de clase será un entero en este caso, y solo establecemos el mismo número del índice. Entonces las clases de clase de detección tendrán el número de nuestro índice, en nuestro aspecto, Así que básicamente, estamos convirtiendo nuestro ID de clase a un número a un entero. Y luego podemos establecer la categoría también. Y la categoría será así nuestro mapa de etiquetas. Necesitamos usar nuestras etiquetas del archivo que agregamos antes. Y dentro de nuestro mapa de etiquetas, vamos a obtener el ID de clase o desconocido. Desconocido. Entonces aquí, la categoría obtendrá el ID de clase de la detección que convertimos en entero y vamos a hacer coincidir uno de estos índices aquí. Entonces también necesitamos nuestra caja de detecciones. Nosotros decimos box, y decimos detecciones. Y aquí queremos obtener todos los puntajes de detección. Con una SA por cerca de 12 S aquí, así que por favor haga los puntajes de detección, y luego queremos el índice también. Y luego finalmente, podemos de nuestros resultados. Así que vamos a llamar a los resultados de matriz OR y anexar estos resultados Entonces podremos comprobar esta matriz y probarla y tener nuestros datos que necesitamos en el front-end. Pero aquí necesitamos abrir un objeto y tenemos la caja. Esa solo será la caja que creamos antes. También tendremos la categoría. Nuevamente, misma categoría de aquí, y luego la puntuación. Entonces necesitamos que la partitura para renderizar en el frente tendemos a anotar y anotar. Y como no teníamos el puntaje, necesitamos auditar aquí. Entonces el puntaje será tengo un error aquí y puedo ver ahora las casillas aquí en lugar de las casillas deberían ser anotadas las puntuaciones. Y luego aquí abrimos una nueva, y así encajamos las detecciones de nuevo abrimos corchetes, y decimos detección Cajas. Nuevamente, queremos índice. Entonces ahora todo debería estar bien con este bucle. Entonces queremos ver los resultados de alguna manera. Volvemos aquí, así que dos líneas atrás por la ditación y queremos imprimir Nuestros resultados Entonces decimos final, y decimos resultados con fines de prueba, para que podamos ver los resultados en nuestra consola, y luego necesitamos devolver los datos ya formateados para nuestro front-end. Entonces, debido a que la función debe devolver la respuesta adyacente, necesitamos devolverla también. Entonces decimos regreso. Y luego Jason respuesta, y nuestro contenido serán los resultados. Así que aquí, nuestra matriz que agregamos datos a través de estos métodos. Para que podamos guardarlo, y luego a continuación, podemos probarlo en nuestra consola. 29. 29. Prueba de nuestra ruta: Ahora podemos ir a probar nuestra ruta y nuestro servidor por ahora. Solo descargo como unas imágenes para que las probemos, y las dejaremos aquí sobre los recursos, y tenemos que ejecutar nuestra aplicación con UVcorn Pero ejecuto la aplicación con UVcorn y obtuve este error Si tienes este error, solo sigue estos métodos para resolverlo. Entonces necesitas instalar PIP multip para que puedas hacerlo. Pero primero, necesito detener esto otra vez y decir, P instalar Python multiparte Esto es porque nos requiere formulario porque estamos usando un formulario aquí, y luego podemos volver a usar el UVcorn Entonces decimos UVcorn colon principal arriba, y luego relos. Y ahora podemos comprobarlo en el navegador. Y si vamos a nuestro navegador, vamos a nuestra ruta a nuestro wirel teníamos aplicación y a la parte docs Entonces ahí ya podemos probar si nuestra ruta predictiva está funcionando o no. Así que sólo vamos a abrirlo aquí. Y entonces como se puede ver, es un formulario multip de datos. Por eso necesitábamos ejecutar esa instalación de PIP porque porque nuestra ruta no funcionaba solo por este método post Entonces solo decimos que pruébalo. Y aquí podemos elegir un archivo. Así que por favor elige el archivo de tu preferencia, pero ten en cuenta que tiene que estar en el mapa de etiquetas. Así que solo puedes usar las imágenes que quedan en los recursos. Nosotros solo vamos a usar imagen, digamos este barco, lo subimos, y luego decimos ejecutar. Y ahora la ejecución salió bien, todo funciona bien, y tenemos nuestra respuesta. Entonces como pueden ver, varias cajas, pero en este caso, vamos a sacar el máximo que tenga una puntuación. Por lo que esto identificó la categoría del equipo utiliza una embarcación como esperábamos y con 98% de precisión. Entonces esto en la parte delantera, sólo vamos a redondear hasta porcentaje. Pero aquí tenemos un número decimal que es 0.98, es decir 98% Podemos probar con otra imagen. Entonces solo lo reiniciamos digamos un gato dice ejecutar y nuestra predicción es un gato. También puedes ver los resultados aquí en tu consola, en tu terminal. Entonces los dos últimos que predijimos que son ambos y el gato uno con 99% anotado y el otro con 98, por lo que las imágenes son lo suficientemente claras para que nuestro modelo las detecte. 30. 30. Usa el gancho de carga de imágenes: Ahora que tenemos nuestro back end o nuestro servidor configurado, podemos volver a nuestro front-end y manejar esa conexión. Lo primero es lo primero, vamos a crear un gancho de reacción. Así que un gancho de reacción nos permite tener un fragmento de código o una función o cualquier dato en un solo archivo que se pueda usar o enganchar alrededor de nuestra aplicación. Entonces para crear eso, venimos aquí a nuestro sitio donde tenemos nuestros archivos y vamos a crear una nueva carpeta, y la llamaremos hooks. Y luego dentro de esta carpeta de gancho, crearemos un archivo y el archivo llamará uso. Así que los ganchos reaccionan siempre tienen que tener el prefijo usar y luego decir imagen aploshok Y este es un archivo Ts, entonces un archivo mecanografiado Ahora dentro de la reacción Hook, primero impartiremos lo que necesitamos, por lo que necesitaremos el estado de uso de react También necesitaremos Axios Por lo que Axios lo hará y todas nuestras solicitudes HCTP a través de la aplicación Si no sabes whatxus es justo y todo XTTP solicita obtener la fecha u obtener solicitudes de correos, y este es un paquete útil para Entonces entonces vamos a crear alook con Export para ser usado a lo largo de la aplicación y const, y lo llamamos use image up loads. Y los aplausos de imagen obtenemos un argumento, y este argumento va a ser la cadena o L que vamos a enviar desde donde queramos Y lo llamaremos solo aplausos WL, y el tipo es una cuerda Entonces solo podemos tener función de flecha y devolver todo aquí. Primero, lo que tenemos que hacer es tener algunos estados, que podamos crear el primero y lo llamamos predicción y la predicción es lo que vamos a volver a nuestro componente. Predicción. Estos resultados vendrán del back end, procesaremos aquí, y luego podremos usarlo en cualquier lugar. Decimos usar estado y solo causarlo. Entonces también necesitamos un indicador perdedor. Vamos a crear un volan llamadas se está cargando, y luego decimos set está perdiendo, y luego usamos estado de nuevo Y en este caso, queremos que sea un tipo de booleano, e iniciamos la aplicación como falsa Por lo que nuestro estado de carga será falso al principio. Luego volvió a costar, y también necesitamos una variable de estado para el error. Así decir error. Entonces esta aplicación tendrá algún error, solo la configuraremos aquí, y luego diremos error. Y aquí, porque va a ser un mensaje de error, tenemos que configurarlo como string. Pero si no tenemos ningún error, tenemos nulo. Entonces iniciamos el ciclo de vida de este gancho con este estado nulo, por lo que no hay error en el inicio. Entonces creamos nuestra función dentro de ti. Entonces necesitamos una función para subir nuestra imagen. Podemos simplemente decir Cost, aploimage que será una función de sincronización que tomará archivo como argumento Entonces aquí subimos nuestra imagen y el tipo será archivo. Y luego solo devolvemos algo dentro de aquí. Y dentro de aquí, primero necesitamos un formulario de datos porque vamos a actuar como formulario cuando subamos nuestra imagen como creamos antes, es un formulario, y tenemos que configurarlo como un nuevo formulario de datos. Y luego agregaremos esa imagen a los datos de nuestro formulario. Así que los datos de formulario anexan el archivo que pasamos como argumento. Así que archivo divertido. Bien, entonces porque nos estamos oponiendo a la imagen, necesitamos tener el perdedor como cierto. Entonces cuando estamos aplaudiendo la imagen, hemos tendido a tener que mostrar perder como verdadero, y luego creamos un giro o un indicador de pérdida a nuestra Entonces perder es cierto cuando estamos oponiéndonos a la imagen, y luego establecemos el error como nulo. Entonces todavía no tenemos ningún error aquí. Y luego tenemos un try and catch walk. Y primero con un try and catch walk, obtendremos o intentaremos obtener esa información que necesitamos, y cogemos cualquier error si existen. Entonces para crear un try and catch walk que es un try y luego de vuelta aquí atrapamos y pasaremos cualquier error si existe, así que cogeremos cualquier error y luego abriremos otro bloque. Pero nos faltan algunas partes aquí de nuestra aplicación, como, por ejemplo, tipos. Entonces queremos que nuestro gancho devuelva un tipo específico. También queremos que nuestra predicción sea de un tipo específico. Entonces para eso, primero tengo un error tipográfico aquí, entonces es predicción Entonces para eso, ahora vamos a crear nuestros tipos. 31. 31. Tipos de resultados: No, para nuestros tipos, podemos o crear los tipos aquí o para hacer que la aplicación sea más organizada. Vamos a crear una nueva carpeta, y la llamamos folers types Y luego dentro de los tipos de carpetas, creamos otro archivo llamado type dot Ts. Y aquí, podemos empezar a crear los tipos que queremos usar. Entonces primero, vamos a usar el tipo de producción que luego vamos a enviar a nuestro componente principal. Y para eso, decimos exportar, así podemos exportar este tipo, tipo, y lo tendremos en la predicción. Predicción es igual a llaves de rol abiertas, y luego decimos categoría que necesitamos una categoría Entonces la etiqueta, como recuerdas, y lo llaman cadena. Y luego también necesitamos mostrar la partitura. Entonces tenemos nuestro puntaje, y nuestro puntaje será un número si recuerdas ese 0.98 que vamos a mandar también nuestro show ahí Entonces después de eso, también necesitamos devolver algo de nuestra función. Entonces queremos los tipos exactos que queremos devolver de nuestra función, principalmente usamos el resultado de aplausos de imagen Y entonces podemos decir, nuevamente, exportar tipo, usar imagen, aplausos, luego resultado Y ese será el aplauso. Imagen que, en este caso, será una función como tenemos nuestra función que llamó archivo como archivo tipo, y luego simplemente devolveremos aquí la voz de promesa. Para que podamos devolver cualquier promesa ahí que queramos. Entonces también tenemos la predicción. Entonces, si recuerdas, esas predicciones venían como una matriz. Entonces para eso, aquí usaremos este tipo, y lo llamamos predicción. Pero debido a que es una matriz, queremos una matriz a partir de predicciones, pero también puede ser nula, tampoco puede tener nada si hay un error de si no hay coincidencias encontradas, así que tenemos que establecer así como null. Entonces tenemos, de nuevo, que está cargando que, en este caso, es un lingote, y luego el error y la flecha, si recuerdas la cuerda o no Entonces ahora, podemos volver a nuestro gancho y luego establecer lo que necesitamos aquí. Entonces aquí en la primera variable de estado, necesitamos establecerla como la predicción. Así que abre la etiqueta aquí, y luego decimos predicción y es una matriz de predicciones y también puede ser nulo. Y el primer estado cuando el componente hace que todos sean nulos. Entonces cuando el componente se renderiza, aún no tenemos nada, así que tenemos que establecer esto como nulo. Y ahora necesitamos importar nuestro tipo para que podamos usarlo en la aplicación. Entonces si vamos aquí a nuestra parte de importaciones, decimos import, luego abrir kern pass, e importaremos ambos de nuestros tipos Entonces es predicción y aplausos usan imagen, resultado de aplod. Y error lo importé a tiempo, así que solo borra este. Ahora aquí, donde queremos usar esto, queremos usar esto como el tipo de nuestra función o el resultado de nuestra función, lo que devolverán al final. Entonces usamos imagen, resultado aplaudido. Entonces ahora nos sale este error porque necesita devolver algo y todavía no estamos devolviendo nada. Entonces este error desaparecerá después de que completemos este bloque de código aquí. Continuaremos en el próximo. 32. 32. Devolución de datos de Hook: No, aquí en nuestro bloque try and catch, todavía necesitamos hacer algunas llamadas para poder tener los resultados exactos para luego usarlo en el componente principal. Entonces antes que nada, vamos a hacer la post request, luego con eje que importamos, y para eso, decimos costo, y esa será una respuesta igual. Y debido a que es una operación sincrónica, diremos esperar el resultado, y luego decimos axios post y queremos impulsar porque vamos a enviarlo a desde nuestro componente principal será predicción sobre matriz de predicciones Y luego aquí abrimos los frenillos y lo que vamos a enviar, qué tipo de información vamos a enviar Entonces primero, necesitamos el RL que aún no tenemos nuestro RL en la aplicación, pero lo configuraremos más adelante. Después los datos del formulario. Así forman los datos que establecemos aquí. Y otra vez, coma, y abrimos los ers con llaves rizadas. Entonces para los ers, primero decimos ers llaves rizadas y aquí solo establecemos el tipo de contenido Así que abre cotizaciones, tipo de contenido, y en este caso, si recuerdas, de nuestras pruebas en el servidor es un formulario multiparte de datos Entonces digamos datos de forma de múltiples partes. Bien, entonces yo comino aquí. Y lo primero que podemos hacer es después de la variable de respuesta o la solicitud de respuesta, damos otra línea aquí y podemos establecer primero el registro de la consola, para que podamos ver la respuesta. Decir respuesta del servidor porque si pasa algo y los datos no vienen, podemos verificar en la consola si realmente viene o no, luego datos de respuesta. Entonces tenemos que verificar si todo está bien. Entonces decimos si nuestra matriz por lo que nuestra matriz de predicciones es una matriz con datos de respuesta. Entonces si esto es una matriz, y la respuesta eso porque es un RA como una longitud. Y si esa longitud es mayor que cero, lo que significa que está poblada, podemos decir que los datos existen y establecemos la predicción a datos de respuesta. Si no, entonces, de lo contrario, establecemos el error. Entonces porque esto no corresponde a la verdad y no tenemos ningún dato, simplemente lanzamos un error, y así, tenemos que establecer el error y decir formato de respuesta inesperado desde el servidor. Entonces, significa que algo salió mal en el servidor. Si todo va correctamente, nuestra aplicación le enviaremos estos datos y nuestras predicciones se rellenan. Pero recuerden, aquí todavía estamos en estado perdedor porque es cierto, así que todavía nada, y nos pondremos más adelante para mostrar los datos. Entonces ahora, continuando con nuestra captura. Entonces, si tenemos un error, primero establecemos un error de consola. Y como digo, agregamos un error. Tuvimos un error de blosing la imagen y luego decimos qué tipo de error fue Entonces este error entonces también lo renderizaremos como un error de consola. Entonces otra vez, abrimos I. Y esto es porque estamos usando Axios, decimos Axios Yo es error axios. Entonces eje detectará esto en error y lo establecerá como un error de axios aquí Vamos a establecer un error diferente. Entonces aquí decimos, tal vez darle más espacio porque necesitamos aquí el espacio y decimos abrir un backtick Y entonces usted dice, así que vuelta garrapatas aquí diferentes diez citas, dicen fallido a los imagen. Entonces abre el signo de $1, carreras rizadas, y luego pasamos el mensaje de error o mensaje de punto de error que viene de aquí. Entonces podemos continuar aquí. Tenemos un punto y luego estado. Entonces esta es solo información útil en caso de errores. Decimos estado de respuesta de error. Podemos volver a cerrar las llaves, otro punto, otro signo de dólar, y decimos error Dot responde. Ponemos este signo de interrogación porque es un estado opcional. Para que permitir si no existe, no continúe y luego detalle o simplemente una cadena vacía. Entonces en nuestro bloque I, también necesitamos establecer s, y el s va a estar bien, solo establecemos un error diferente si alguno de esos errores es cierto, pero aun así tenemos un error. Sólo hay que decir que falló en soplar imagen. Por favor, inténtalo de nuevo. Entonces, si no hay error del servidor o ningún error de Axios, simplemente configuramos este mensaje de error Y luego queremos terminar el bloque y luego decimos aquí. Entonces a partir de nuestra captura y nuestro intento, necesitamos finalizar y luego decimos justo por fin si todo va correctamente, dijimos que set está perdiendo ante foss Entonces ahora ya no estamos perdiendo. O estamos mostrando un error o los datos reales. Guardar pero entonces ¿cómo extraemos? Tenemos que devolver algo. Entonces necesitamos devolver cada variable de estado que creamos. Entonces solo decimos volver a abrir llaves Carl, y devolvemos una imagen de trama Entonces para establecer la función desde el componente principal para enviarla aquí, la predicción que necesitamos enviar también, esta carga para que pueda verificar el estado de carga y luego error. Entonces ahora si guardamos, y todavía tenemos este error alrededor de error porque es tipo de desconocido, así que para arreglarlo fácilmente, solo necesitamos configurarlo como aquí, y el error desaparece. Pero tengo un error de cualquiera de aquí. Esto es sobre mi linting, porque idealmente en una aplicación grande en una producción aplicaciones, nunca debemos usar ninguno o solo casos muy específicos porque puede romper la aplicación y el largo plazo o el desarrollo continuo lo que suelo tratar de evitar el uso de cualquiera, pero en este caso, sólo podemos usarlo. Ahora, guárdala, y estamos listos para probar esta parte en nuestra aplicación. 33. Uso de Hook en el control de imágenes: Entonces, lo primero que debemos hacer es regresar. Podemos cerrar todo esto y volver a nuestro control de imagen punto TSX Y si recuerdas, creamos aquí estas variables que no necesitaríamos o no usaríamos, pero tenemos que cambiarlas ahora. Entonces lo primero, solo decimos costo. Y entonces queremos tener las mismas cosas que estamos regresando de nuestro gancho. Entonces tenemos la imagen cerrada. Vamos a necesitar una predicción. Está perdiendo y el error. Entonces esto eso es lo que vamos a usar ya están establecidos en nuestro front end año, y esto vendrá del gancho con los datos correctos. Y luego necesitamos usar el gancho, entonces decimos imagen, usa Imagen aplaudir Y si presiono solo una pestaña , me importará el gancho. Así que importa, usa imagen aplaudir de nuestra carpeta de gancho y el archivo correcto Ahora bien, porque aquí tengo un error y ¿por qué es eso? Porque si recuerdas, nuestro gancho que usa Image plus requiere de un argumento que sea un plus ganado, es decir, necesitamos pasar nuestra clave. Así que por ahora, solo establecemos como cadena vacía, pero aún necesitamos pedir la clave a nuestro servidor. 34. Clave de API: No, necesitamos la clave de nuestro servidor o la URL de nuestro servidor, para que podamos usarla aquí. Entonces para eso y los métodos de separar, así no vamos a ser visibles aquí, creamos una nueva carpeta llamada keys. Y dentro, creamos un nuevo archivo llamado APi kis dots. Tenga en cuenta que esta es una forma muy sencilla lo que las claves no deben mostrar aquí, pero por cuestión de seguridad, no debe usarla así si la usa ya sea en la variable de entorno o en un archivo de registro. Por lo que el usuario no tendrá acceso a él a través de herramientas de desarrollo o algún otro método. Entonces para eso, solo necesitamos crear una const primero para decir export, cost, y luego lo llamamos API key equals, y luego porque es una cadena, abrimos códigos Y si recuerdas es HTTP, barra diagonal 127.0 0.04 0.1, y estamos ejecutando el servidor en el puerto 800 Si cambia el puerto, por favor utilice el puerto que está utilizando. Así que solo necesitamos también establecer el tipo mecanografiado, y luego porque es una cadena, configuramos como una Y ahora podemos usar esta ApiKey en nuestra aplicación. Entonces volvemos a nuestro control de imagen, y primero, necesitamos importarlo. Así que de nuevo, aquí diremos importar llaves abiertas, e importamos nuestra clave API constante de nuestra carpeta kiss y APIs kiss Entonces entonces aquí cuando la imagen aplos, simplemente pasamos fácilmente lo que queremos Entonces primero, necesitamos abrir el Bectix. Entonces nuevamente, el ctix nos permite usar variables dentro de la cadena, y queremos abrir el signo de dólar y las razas rizadas, y luego tenemos nuestra clave APA Pero porque nuestra clave APA o la ruta que queremos utilizar simplemente no termina con un puerto. También necesitamos pasar nuestra barra, predecir porque es nuestro método post que creamos antes en nuestra aplicación Entonces ahora lo guardamos, y ahora podemos continuar con esto. 35. Manejar la carga y manejar imágenes: Ya podemos usar estos métodos disuasores desde nuestro ok, pero aún necesitamos crear funciones para manejar el cambio de imagen o la carga de la Entonces lo primero que vamos a hacer es tener una nueva función aquí, y la llamamos manejar cambio de imagen. Entonces el evento que vamos a usar para cambiar la imagen o para subir una nueva imagen, y el otro será un evento. Y este evento tendrá el tipo de evento de cambio. Entonces evento de entrada HTML porque estamos perdiendo o plosing una imagen de nuestro equipo a este método aquí Entonces lo llamamos change event, el tipo que viene de react, y luego abrimos las etiquetas, y dentro, tenemos el elemento de entrada HTML. Entonces, para usar este método aquí. Y debido a que estamos usando este tipo de react, necesitamos importarlo. Entonces después del estado de uso, decimos change event para importarlo a nuestro código aquí. Entonces el error se ha ido, y estamos listos para continuar con nuestra función. Entonces va a ser la función flecha y luego curibass. Y lo primero que vamos a hacer es establecer una variable para el archivo, así const file Y este es un evento el objetivo, los archivos que vamos a subir tiene opcional porque puede estar vacío, y queremos el primer elemento en esta matriz Entonces también podemos manejarlo para verificar si todo es correcto. Entonces si tenemos un archivo, abrimos de nuevo Carly llaves. Dijimos secc archivo seleccionado. Así que recuerda nuestra variable de estado aquí, ese es el archivo tipo. Entonces decimos secc seleccionado archivo a archivo. Entonces el que subimos, y luego configuramos la imagen a la URL. Entonces otra interfaz en este caso para la URL, y luego dices crear Objeto RL. Entonces, cuando aplosemos la imagen, este evento creará RL, para que podamos mostrarla de inmediato Entonces entonces guardamos y aquí tengo un error porque el RL es mayúsculas. Entonces entonces lo guardamos, así que nuestra imagen final cambia, está funcionando, pero necesitamos usarla en nuestra plantilla de vuelta aquí a nuestra entrada. Tenemos este método al método sin cambios, y solo necesitamos eliminar esta parte aquí y luego simplemente llamar a una función y Cambio de imagen. También señalando el error aquí, y esto es porque olvidé las llaves aquí porque el método de dos oper case es un método y necesita un frenillos Entonces solo agrega los frenillos aquí los relleno. Ahora tenemos que encargarnos de la subida. Entonces para eso, cuando queremos tener la subida para subirla a nuestro servidor, solo decimos Costo, manejamos subidas Igual a una función de flecha de sincronización nuevamente y luego decimos, hay un archivo seleccionado, esperamos la imagen de subida Para devolver algo con ese archivo seleccionado. Entonces la imagen de subida es la función que tenemos en nuestro gancho que creamos para manejar esa parte. Mientras esto está subiendo, podemos esperar si todo sale correcto, nos enviará la fecha De lo contrario, podemos simplemente establecer el error de la consola diciendo que ningún archivo es sólido. Así que ahora podemos ahorrar. Pero antes de probarlo, necesitamos agregar esta función en algún lugar de nuestra plantilla porque eso va a desencadenar el evento. Y si recuerdas, tenemos este botón con un click vacío aquí, y ahí es donde vamos a tener nuestra función. Entonces decimos endo aplausos. Así que ahora podemos guardarlo y podemos probar nuestra aplicación. 36. Prueba de la carga de imágenes: Entonces en nuestra aplicación, si no tienes la aplicación ejecutándose, solo necesitamos que NPM ejecute Def para iniciar nuestra aplicación it, luego ir al host local, y luego a nuestro host local, hay un error Y esto es porque no instalamos Axios. Entonces detengamos nuestro servidor, y luego decimos NPM instalar Axios Bien. Así que ahora podemos volver a intentarlo y PM en dev volver a nuestro navegador y todo es correcto. Ahora ya podemos subir la imagen. Así que solo elige archivo aquí. Y tenemos nuestras imágenes dobladas y solo podemos abrir esta, el evento cambiante cambia la imagen correctamente aquí, y luego solo podemos presionar identificar imagen, y tenemos error de red. Y por qué tenemos el error de red porque estas aplicaciones terminan con HTTP, y necesitamos establecer o endle las solicitudes de origen cruzado para que sean aceptadas en la Entonces hagámoslo a continuación. 37. Permitir CORS: A nuestro servidor en nuestro archivo PTN principal, necesitamos agregar algo más para manejar los orígenes cruzados de nuestra aplicación Entonces primero, necesitamos importar algunas partes que vamos a necesitar para usarla. Así que aquí de vuelta en las importaciones de decimos desde FAST API middleware dot course for cross origin, importamos curso Luego volvemos después de nuestra API arriba rápida, abrimos algunas líneas y decimos arriba. Así que de FAST API como desgaste medio y tirantes abiertos. Y luego llamamos a través la guerra intermedia y luego decimos permitir orígenes Y todo origen va a ser array. Entonces en la siguiente línea, decimos permitir que las credenciales sean verdaderas. Y decimos permitir, luego decimos permitir métodos. Y estos métodos van a ser de nuevo una matriz. Pero en este caso, abrimos citas y decimos estrella para permitirles a todos, luego otra vez, coma y luego decimos permitir Es, lo mismo Entonces array, cotizaciones y permitir de. Entonces solo necesitamos agregar comas aquí, y debería estar listo para funcionar Aquí en el LoiGin, vamos a establecer las cadenas de nuestro front-end de nuestras URL que estamos usando, y podremos usar varias para que podamos usar el, por ejemplo, el host local HCTP porque nuestras aplicaciones se están ejecutando en host local, podemos configurar, por ejemplo, este host local, este host local, o incluso podemos usar múltiples hosts locales aquí, por ejemplo, nuevamente, comillas y digamos, HCTB host local y luego 42. Entonces, por ejemplo, tenemos una aplicación react aquí y la aplicación angular aquí que podemos usar, y el host local estará disponible y los orígenes ya no causarán problemas. Entonces si lo guardo, y entonces podremos probarlo de nuevo. 38. Cómo llevar los resultados a la pantalla: No, de vuelta a nuestro front-end, solo podemos actualizar la página y volver a intentarlo. Así que abre de nuevo las imágenes. Permítanme avión aplous otra vez, y luego nosotros sólo para identificar imagen Y como se puede ver, un ploding. Y aquí tenemos la etiqueta que detectó como avión y el porcentaje. Entonces el porcentaje, lo fijamos aquí. Si recuerdas antes ese extraño número, ese número largo con decimos, lo estamos manejando aquí para que se fije como un número porcentual. Entonces podemos intentar otro decir Zebra, y ves que la imagen cambió, pero aún necesitamos identificarnos. Entonces aquí, Zebra es en realidad una imagen muy fácil de identificar debido a las rayas. Y entonces podemos probar más, por ejemplo, un autobús, más 98% de precisión. Así que ahora, siéntete libre de en ambas más imágenes e inténtalo. tener en cuenta que modelar sigue aprendiendo y nos equivocamos. Vamos a diferentes etiquetas y precisión o incluso diciendo que la imagen no existe. Siéntase libre de intentar hacer una aplicación más compleja ya sea en el back end o incluso tratar mejorar este front-end para que pueda adaptarse a sus propias necesidades. 39. Dividir en componentes más pequeños: Ve de reaccionar es su base de componentes. Entonces todo debe estar en componentes más pequeños para mantener limpio el código, el proyecto más comprensible, y luego los componentes también pueden ser reutilizables en otros componentes. Entonces aquí cómo hacemos esto. Primero, lo que vamos a hacer es dividir estos dos componentes en componentes más pequeños. Entonces podemos iniciar componente de imagen, y para eso, vamos de nuevo a nuestra carpeta de componentes y creamos un nuevo archivo, y lo llamamos componente de imagen punto DSX Entonces aquí podemos simplemente establecer const, llamar componente de imagen. Es un componente funcional, entonces nuestra función, y luego aquí solo devolvemos algo, y luego exportamos el componente de imagen predeterminado. Entonces simplemente necesitamos copiar este div y todo lo que hay dentro de él, cortarlo. Y dentro del regreso, pegamos el contenido de la imagen. Aquí tenemos un error, y luego lo veremos más adelante, cómo evitar este error y también pasaremos props Así podemos guardarla por ahora. Y entonces aquí podemos importar nuestro componente recién creado. Entonces solo decimos imagen. Componente y cerrar la cubierta. Así que vamos a ver aquí. Entonces, como puede ver, importamos este componente de imagen desde el componente de imagen. También podemos dividir estas cajas de predicción donde tenemos nuestra cicatriz y categorías en otro componente. Entonces nuevamente, venimos aquí y decimos componente de predicción punto TSX Y luego simplemente lo mismo por lo que el componente de predicción de costos. Nuevamente, componente funcional. Y luego volvemos lo que hay dentro de esta predicción, la caja aquí. Copiar Div y todo dentro de él, Scut it, ir a un componente de predicción Aún tengo el error. Mírelo más tarde, como mencioné, y luego tendremos que exportar por defecto. Componente de predicción para guardar. Y luego en nuestro control de imagen, volvemos a llamar al componente. Entonces en este caso, es ese componente de predicción a partir del componente de predicción. No olvides importarlo aquí. Y ahora para deshacernos de estos errores, tenemos que pasar accesorios, y vamos a echar un vistazo a eso a continuación 40. Accesorios de React: Entonces aquí vemos ambos errores que ocurren en nuestro componente, y eso es porque no tenemos props o este objeto aquí no existe Y para arreglarlo, necesitamos sencillo pasar los apoyos, como ya mencioné Entonces props es una forma de pasar datos de padre a hijo. Entonces, qué componentes pasarán datos a otro componente, para que pueda renderizar dinámico. Depende de si quieres reutilizar el componente o no, puedes pasar diferentes datos a ese componente. Y aquí, ¿cómo podemos hacer eso? Primero, convertiremos este componente en un componente funcional. Entonces aquí tenemos una columna y luego FC para componente funcional y abrimos este texto aquí. Entonces esta etiqueta tenemos que pasar nuestro tipo. Entonces si recuerdas, en nuestro tipo, tenemos este tipo de predicción que contiene puntaje de categoría N que usamos para renderizar en la pantalla. Entonces aquí solo podemos importar ese tipo de predicción. Así que importa la predicción de los tipos. Y este error también se debe a que necesitamos importar el componente funcional de la biblioteca react. Así dicen importar calibraciones abiertas FC de reacciona. Y como pueden ver los errores son v. Ahora necesitamos tener también nuestros apoyos que vamos a utilizar como argumento Y para eso, podemos abrir calibraciones. Y recuerda, tenemos en lugar de escribir la categoría y DS core y solo podemos decir tu categoría y puntuación. Entonces así, el error se habrá ido. Pero por ahora, todavía está aquí, solo necesitamos eliminar esta predicción aquí que no usamos para simplemente usar categoría y puntaje. Entonces todos los errores se han ido, lo guardamos, y luego para ser utilizados en nuestro control de imagen, como puedes ver aquí, inmediatamente mostramos un error, y eso porque le faltan esos tipos. Lo que necesitamos aquí, primero, necesitamos una categoría, y abrimos una llave y pasamos la predicción. Primer elemento de la matriz y categoría. Y también tenemos que hacer lo mismo para el marcador. Así que de nuevo, llaves rizadas, predicción, y cicatriz Entonces, si simplemente pasamos así, da un error porque espera un número. Entonces la cicatriz es un número, todos los errores se han ido. Ahora, hagamos lo mismo para el componente de imagen y el componente de imagen. Y porque no tenemos el tipo en este caso, lo haremos de otra manera. Entonces primero, nuevamente, crear un componente funcional. Vamos a impartir desde la biblioteca de reaccionar. Y luego aquí, si recuerdas que esta imagen es una cadena, solo podemos pasar si no tenemos un tipo para pasarla directamente aquí. Así que rizado sube y decimos imagen RL, eso es una cadena. Entonces estamos esperando una cadena. Y luego pasarlo aquí como argumento también. Entonces también necesitamos cambiar el nivel a imagen o, y todos los errores se han ido. Entonces en nuestro componente de imagen, nuevamente, tenemos el mismo problema y necesitamos pasar esta imagen que estamos manejando nuestra lógica al componente de imagen. Así decir imagen RL, es igual a imagen. Entonces todos los errores se han ido, y ahora podemos probarlo en nuestra aplicación. Así que de vuelta a nuestra aplicación, sólo podemos elegir archivo. Yo solo baja imagen aquí, y podemos intentar así que no hay errores. Todo está funcionando como se esperaba, y ahí lo tenemos. Entonces así es como pasamos datos de componente padre a hijo y reaccionamos aplicación. 41. Casos de uso y limitaciones: En el mundo actual, las aplicaciones de reconocimiento de objetos se han convertido en herramientas increíblemente útiles, transformando la forma en que interactuamos con nuestro entorno. Así que imagina caminar por un teléfono inteligente de calle concurrida al final con un escaneo rápido, tu dispositivo puede identificar peligros potenciales, ayudándote a navegar de manera segura. O imagínate en un supermercado donde la misma app ayuda a administrar el inventario, haciendo que la repoblación sea una brisa para los dueños de tiendas Sin embargo, estas aplicaciones no son solo para negocios. Están abriendo nuevos mundos para las personas con discapacidad visual, describiendo el entorno en tiempo real. Los entusiastas de la naturaleza los encuentran invaluables para identificar la Fada y la fauna en su s. En las aulas, estas aplicaciones están haciendo que el aprendizaje sea más interactivo, convirtiendo los objetos cotidianos en oportunidades educativas. Pero no todo es una navegación suave. Si bien estas aplicaciones son inteligentes, no son infalibles En un día nublado o en una habitación con poca luz, podrían tener dificultades para identificar con precisión los objetos. Y si bien son excelentes para reconocer elementos comunes, podrían rascarse la cabeza digital en objetos más oscuros o especializados También está la cuestión de la duración de la batería en el caso de los dispositivos móviles, ejecutar estas aplicaciones puede drenar continuamente tu teléfono más rápido de lo que cabría esperar, potencialmente dejándote con una batería agotada en un momento oportuno, o incluso agotar la batería de tu computadora Y en nuestro mundo consciente de la privacidad, el uso constante de cámaras levanta algunas cejas. La gente puede sentirse incómoda sabiendo su entorno está siendo analizado constantemente. Además, estos ven objetos, pero no los entienden completamente. Te pueden decir que hay una parte en una t, pero no van a entender eso juntos, hacen un juego de comedor. Son como un turista en una tierra extranjera, reconociendo las palabras vid pero faltando el contexto completo de la conversación. A medida que continuamos integrando estas aplicaciones en nuestra vida diaria, estamos descubriendo tanto su potencial como sus limitaciones. Son herramientas increíblemente útiles, pero no sin sus peculiaridades y desafíos A medida que la tecnología evoluciona, estamos aprendiendo a equilibrar sus beneficios con sus inconvenientes, encontrando el lugar adecuado para estos se digitalicen en nuestro mundo analógico Entonces con eso dicho, no puedo esperar a ver qué se te ocurra o tus ideas para crear este tipo de aplicaciones.