Detección y conteo de objetos con Yolov5 | Python | PyTorch | OpenCV

Sdílet
Vložit
  • čas přidán 6. 09. 2024
  • En este video implementamos Yolov5 para el conteo de automoviles en una autopista.
    00:00:35 Qué vamos a hacer
    00:05:55 Cargar, desplegar video
    00:06:45 Cargar Yolov5, predicciones
    00:09:07 Filtrar predicciones
    00:15:45 Definición de zona (polígono)
    00:20:25 Visualización zona y predicciones
    00:22:37 Obtención de centro de bbox
    00:24:34 Visualización de centro de bbox
    00:26:05 Validación de detección
    00:30:30 Visualización final
    🙏🏼 Donaciones: www.paypal.com...
    GitHub: github.com/Fer...
    LeetCode: leetcode.com/f...
    Instagram: @ferneutronn
    Twitter: @ferneutronn
    Yolov5 PyTorch: pytorch.org/hu...
    Yolo paper: arxiv.org/pdf/...
    Yolo blog: pjreddie.com/d...

Komentáře • 60

  • @jirivchi
    @jirivchi Před rokem +4

    Espero que puedas hacer videos donde podamos entrenar con nuestras propias imágenes. He visto muchos videos pero sin duda los tuyos son los mejores con diferencia. Un saludo.

    • @ferneutron
      @ferneutron  Před rokem +2

      ¡Gracias!
      Por supuesto, ¡próximamente estaré subiendo material al respecto!

  • @JoseFernandoGarciaV
    @JoseFernandoGarciaV Před 4 měsíci

    Muchas Gracias, @Ferneutron, brutal. Bendiciones

  • @AlfredoGonzalez-qj4ng
    @AlfredoGonzalez-qj4ng Před rokem +2

    Excelente contenido!! vas a llegar muy lejos con esta calidad sigue así! en mi caso yo necesito hacer tracking de objetos y contarlos (sin que se recuente el mismo como a veces pasaba en este video que perdía la referencia y luego la volvía a tomar el mismo objeto pero se pudo haber contado como nuevo objeto) se me ocurre contarlos si solo duran unos 2 segundos con la referencia para que no cuente las pequeñas intermitencias

    • @ferneutron
      @ferneutron  Před rokem

      ¡Muchas gracias Alfredo!
      Si, justo uno de los puntos importantes a considerar cuando se hace tracking es el switch-id y/o re-id. Esto lo puedes reducir con los siguientes consejos:
      - Ajusta el max_age de SORT (para que si pierde la detección, pueda volver a asignarlos después de "k" frames perdidos)
      - Cambia el tracker (e.g. DeepSORT y/o ByteTrack). Ambos tienen pros y cons, lo interesante de DeepSORT es que usa embeddings, por tanto "con base en el embedding y propiedades de SORT per se, asigna, mantiene o cambia el id". Ten en cuenta que DeepSORT es mas lento que SORT.
      - Agregar heurísticos arriba de tu aplicación. Justo como comentas, validadores de tiempo podría ser una opción.
      ¡Mas adelante vendrá contenido de trackers!

    • @AlfredoGonzalez-qj4ng
      @AlfredoGonzalez-qj4ng Před rokem

      @@ferneutron gracias!

  • @josealbertohernandezaguila1871

    Muchas gracias, muy buena explicación y muy útil el codigo que nos compartes. Ya lo probé y funciona correctamente. Ya me suscribí a tu canal.

  • @maayamarketplace6159
    @maayamarketplace6159 Před 2 měsíci

    Excelente explicación 🎉

  • @luisvillegas1746
    @luisvillegas1746 Před 3 měsíci

    excelente instructor

  • @karterokiller
    @karterokiller Před 10 měsíci

    excelente. habria que ver una variación de contar autos unicos a travez de todo el video.

  • @javierdepaz4105
    @javierdepaz4105 Před 4 měsíci

    que tal estimado muy bueno, también realizas proyectos ya que requiero para conteo de objetos

  • @josephparedes9023
    @josephparedes9023 Před rokem +2

    Buen video me a ayudado mucho. Si conoces alguna manera de poder determinar el tamaño de lo objetos seria genial con yolov5. Exitos..!!

    • @ferneutron
      @ferneutron  Před rokem +1

      ¡Muchas gracias!
      Cierto, una aplicación interesante es determinar las dimensiones de un objeto. Lo agrego a mi backlog para tan pronto como sea posible, lanzar un video sobre este tema.
      ¡Saludos!

  • @ErickHaroldoSanabriaSalazar
    @ErickHaroldoSanabriaSalazar Před 3 měsíci

    Lo haces ver muy facil!! y es el único que me ha funcionado.. oye y si yolo no tiene los objetos que quiero detectar como puedo hacer para entrenarlo que los detecte , es decir agregarla a su base de conocimiento mas objetos?

  • @josemanuelrojascarrasco8573

    excelente video, gracias

  • @victorhuertas5159
    @victorhuertas5159 Před rokem +1

    Nuevo sub... contenido muy bien explicado!!!!

    • @ferneutron
      @ferneutron  Před rokem +1

      ¡Gracias!
      Sigo trabajando en generar mas contenido que les pueda ayudar/servir/gustar.
      ¡Saludos!

    • @victorhuertas5159
      @victorhuertas5159 Před rokem +1

      @@ferneutron (Espero me leas :c ) tengo un problema que me está superando en conocimiento a cerca de YoloV5... me contacté contigo por Instagram ya que estoy buscando ayuda y aún no encuentro a alguien o algo que me pueda ayudar...
      No sé será posible que me puedas ayudar con esto ya que estoy casi desesperado con solucionar mi problema, he buscado mucha info, pero no logro encontrar algo en concreto de como solucionarlo...
      Muchas gracias por ello en caso sea posible y si no de igual manera por subir buen contenido :D

    • @ferneutron
      @ferneutron  Před rokem +1

      @@victorhuertas5159 ¡Hola Victor! Claro, justo ya te he respondido por allá :)

  • @XoyTech
    @XoyTech Před rokem

    Hola, buen video y buena didatica te felicito...!!! Podrias hacer un tercer video para llevar un conteo general de autos que pasan dentro del poligono. gracias...!!! ya tienes mi 👍 Saludos...!!!

    • @ferneutron
      @ferneutron  Před rokem +1

      ¡Gracias!
      Claro, con todo gusto. Si entiendo correctamente, lo que sugieres sería contar todos los autos que ya han pasado por el polígono, cierto? De ser así, solo bastaría con inicializar el contador fuera del ciclo -while- y con esto, estaríamos teniendo el acumulado de todos los autos.

  • @gerardoduarte4226
    @gerardoduarte4226 Před 2 měsíci

    Excelente video. Una consulta, puedes hacer un ejemplo para hacerlo contando personas?

  • @user-zt3mn2ue1l
    @user-zt3mn2ue1l Před 8 měsíci

    Eso es util para controlar la velocidad de los vehiculos

  • @maki36194
    @maki36194 Před 4 měsíci

    Hola ! soy nueva en esto, me gustaria que el control de cuantas personas hay en un auto puedan verlo los pasajeros, pero no encuentro como visualizarlo en una aplicación, que lenguajes de programación o recursos deba utilizar para conectar esa información :c

  • @yormanlopez8553
    @yormanlopez8553 Před 3 měsíci

    Hola buenas tardes, veo que es muy atento con las inquietudes de las personas. Pregunta... Hiciste fine tuning con tu dataset personalizado o estas usando directamente el modelo? Aunque imagino que por defecto coco tiene categorías de carros cierto. Porfa espero su respuesta 👊👊

    • @ferneutron
      @ferneutron  Před 26 dny

      Que tal bro!
      No hice fine tune, estoy utilizando Yolo tal cual está (con las clases de coco)
      Saludos!

  • @marcoquispe9784
    @marcoquispe9784 Před 7 měsíci

    gracias me ayudaste un monton pero el codigo esta en el otro video esta invertido!!! para los curiosos

  • @iam.p3p0
    @iam.p3p0 Před 4 měsíci

    Hola amigo, ya no está disponible el repositorio del ejemplo... Por favor podrías actualizarlo a YoloV8 ?

  • @cristiandanielaldanaparra2315

    Hola, excelente video Ferneutron, una pregunta, si ya tengo el modelo preentrenado pero en Yolov5 este código que muestras en el video funcionaría igualmente? Tendría que hacer algunos ajustes? O cambia totalmente? Siendo así, donde podría encontrar una guía para hacerlo? Gracias!!

  • @germancruz6618
    @germancruz6618 Před rokem

    Buen video estimado Fernando. Interesante la aplicación que muestras.
    Seria muy importante además de detectar el vehículo y el tipo (moto, auto, bus, camión etc), tambien el tiempo ( hora/min/seg) para luego registrarlo en un csv. Eso permitiria luego agrupar por hora, la cantidad de vehículo y la clasificación por tipo. Es posible que el video con los autos se procese más rápido o es una limitación de cómputo ?

    • @ferneutron
      @ferneutron  Před rokem

      Por supuesto. Las aplicaciones basadas en vision por computadora, particularmente la detección y segmentación de objetos, se prestan muy bien para la extracción de métricas la cuales, puedes gestionar como lo necesites. Un ejemplo sería lo que comentas, guardar en archivos. Otra opción sería enviar esa info a una base de datos en tiempo real cuando el video es en stream.
      Y si, el procesamiento esta sujeto al poder de computo. No obstante, hay algunas técnicas que podemos utilizar para mejorar el performance de la aplicación. Una muy común es hacer un "resize", que básicamente sería reducir el tamaño de los frames tanto como sea necesario pero sin degradar demasiado la detección.

  • @user-ce7ny2ex5o
    @user-ce7ny2ex5o Před rokem

    bro this opening was an absolute jumpscare

  • @natarenas7964
    @natarenas7964 Před 5 měsíci

    Este mismo procedimiento lo puedo usar para cualquier objeto que quiera detectar?

  • @jonathanmarimancarrera3445
    @jonathanmarimancarrera3445 Před 9 měsíci

    en mi trabajo me encargaron revisar videos de descarga de salmones. son videos estaticos solo van pasando salmones, y derrepente aparecen uno que otro sujeto. podria hacerlo con esto cierto? mi pc es igual al que estas ocupando

    • @ferneutron
      @ferneutron  Před 9 měsíci

      Hola!
      Es correcto. Yolo podría detectar el sujeto y con base en esta detección, contar. Si lo que pretendes es contar salmones, ahí tendrías que customizar Yolo o buscar algún modelo pre entrenado que detecte peces.

  • @julioalvarez8532
    @julioalvarez8532 Před rokem +1

    excelente explicacion... nuevo sub !.. en su github como encuentro este proyecto ?

    • @ferneutron
      @ferneutron  Před rokem

      ¡Gracias!
      Si, ahí encuentras varios de los proyectos de los videos

  • @oberpolinard8407
    @oberpolinard8407 Před 11 měsíci

    Hola, excelente video Ferneutron . ¿Como puedo hacer para poder detectar los colores de los vehículos en tiempo real(de cualquier color y tipo de vehículo)?

    • @ferneutron
      @ferneutron  Před 9 měsíci

      Que tal @oberpolinard8407 !
      Para detectar el color, con opencv pudes extraer el equivalente RGB (0-255, 0-255, 0-255).
      Échale un ojo a: pyimagesearch.com/2014/08/04/opencv-python-color-detection/

  • @joseluisrodriguez4947

    Buenas noches, excelente video muchas gracias por compartir. Disculpa, como podría definir una región de interés para que solo cuente los objetos que estén dentro, pero que sea sobre una imagen. Preguntarte, si el código lo puedes compartir...Saludos!

    • @ferneutron
      @ferneutron  Před rokem +1

      ¡Hola Jose Luis!
      Claro, con gusto te comparto el script que uso en el video: github.com/FernandoLpz/CZcams/blob/main/CountCars/coordinates.py

  • @StonedBored
    @StonedBored Před rokem +1

    Si no quiero ver el video en tiempo real y solo guardarlo, hace que el procesamiento sea mas rapido? Por ejemplo, si tengo 1 video de 24 horas.

    • @ferneutron
      @ferneutron  Před rokem +2

      ¡Hola @StonedBored!
      Así es. Todo aquello que puedas optimizar (el heurístico, leer/escribir, etc), tendrá impacto directo en la latencia. Por tanto, si lo guardas la latencia seguro se beneficiará.
      Otro consejo que también te podría servir es que hagas un resize del video (a una tamaño más pequeño) y yo que el video que guardes también sea de una dimension menor.
      También, si el video está a 20 FPS, podrías guardarlo a 10, esto hará que también vaya más rápido.
      ¡Saludos!

    • @StonedBored
      @StonedBored Před rokem

      @@ferneutron Gracias por responder! Amigo la ultima pregunta, si quiero usar google colab (por el hecho de puedo usar su GPU) como puedo correr el codigo pero no usando VideoCapture? Entiendo que con colab es complicado correr un video. Pero desde que quiero solo guardar el video no necesito verlo en tiempo real. Hay alguna alternativa para VideoCapture? Exactamente en esa linea se cae.

    • @ferneutron
      @ferneutron  Před rokem +1

      @@StonedBored hay varias formas de hacerlo, una forma práctica es:
      1) Sube el video directo a colab o importalo desde drive.
      2) Para cargar el video, usamos cv2, entonces tendrías que agregar una línea que sea: cap = cv2.VideoCapture("video.mp4")
      Ahora, si lo que quieres es omitir el uso de VideoCapture(), entonces asumo que por alguna razón no usarás cv2. Por tanto, otra alterativa es usar moviepy, de esta forma:
      ```
      from moviepy.editor import VideoFileClip
      # Open video file
      video_path = "video.mp4"
      clip = VideoFileClip(video_path)
      ```
      ¡Espero te funcione, saludos!

  • @theworldofmadafaka8845
    @theworldofmadafaka8845 Před 11 měsíci

    hola, excelente video, una pregunta, si quisiera utilizar multiples camaras en este script es posible, y de ser asi como podria agregarlas ?

    • @ferneutron
      @ferneutron  Před 9 měsíci

      Que tal @theworldofmadafaka8845 !
      Es posible agregar multiples cámaras. No obstante, esta implementación tendría que ser refactorizada para poder abordar tal comportamiento.
      Cuando utilizas multiples cámaras, tienes que asegurar la sincronización entre estas. Tendrías que crear una estructura de datos (queue) que controle este comportamiento.

  • @santiagosuarez4274
    @santiagosuarez4274 Před rokem

    Hola, una pregunta, como solucionas el cargar el modelo de Yolov5n? Me aparecen los errores pero no sé como solucionarlos, muchas gracias!

    • @ferneutron
      @ferneutron  Před rokem

      ¡Hola @santiagosuarez4274!
      Uno de los errores comunes es que el archivo .pt no se haya descargado o que el path que no este seteado correctamente. Igual si compartes el error, podríamos ver un poco más del detalle :)
      ¡Saludos!

    • @santiagosuarez4274
      @santiagosuarez4274 Před rokem +1

      @@ferneutron Gracias, hoy volví a intentar y funcionó correctamente :)

  • @dzulgonzalezmarcosadalbert6511

    buen video, pero tengo un modelo en yolov8 en formato .pt,me pregunto si funcionará en este código o solo es para versiones yolov5

    • @ferneutron
      @ferneutron  Před rokem +2

      ¡Muchas gracias!
      Este código tal cual está, solo funciona para yolov5. No obstante, puedes bajar yolov8.pt desde ultralytics y también, con la misma librería de ultralytics, cargar el modelo. Te paso este link en donde se explica a detalle: docs.ultralytics.com/modes/predict/

    • @dzulgonzalezmarcosadalbert6511
      @dzulgonzalezmarcosadalbert6511 Před rokem

      @@ferneutron muchas graciasss, nuevo suscriptor:))))

    • @dzulgonzalezmarcosadalbert6511
      @dzulgonzalezmarcosadalbert6511 Před rokem

      @@ferneutron disculpa la molestia amigo, alguna recomendación para entrenar modelos de redes neuronales pero en lugar de imágenes sean audios, es decir, en lugar que sea detectar objetos, sea detectar sonido de aves en una selva, por decir un ejemplo

    • @ferneutron
      @ferneutron  Před rokem +1

      ¡Que tal!
      Claro, existe una gran variedad de modelos que puedes utilizar para audio dependiendo de la tarea que vayas a resolver (por ejemplo, clasificación de audio, etc). Puedes echarle un ojo a Wav2Vec, aquí te dejo un link con un buen tutorial sobre como entrenar un modelo para clasificación de audio con un dataset custom: huggingface.co/docs/transformers/tasks/audio_classification
      Espero te funcione! :)

    • @dzulgonzalezmarcosadalbert6511
      @dzulgonzalezmarcosadalbert6511 Před rokem

      @@ferneutron muchas gracias de nuevo, pero, me refería ha que si se pudiera hacer la detección de sonido directo en python, así como mostraste en tus videos, solo en cuestión de cargar el modelo y empezar la deteccion

  • @kamrangul2876
    @kamrangul2876 Před rokem

    English please

    • @ferneutron
      @ferneutron  Před rokem

      Hey @kamrangul2876!
      Thanks for your comment. Will try in the future to create some content in english. For the mean time, I have some blogs in english: ferneutron.medium.com/ .