Visão computacional: detecção em tempo real com YOLOv8 e Streamlit

Rocketseat

Rocketseat

5 min de leitura
https://prod-files-secure.s3.us-west-2.amazonaws.com/08f749ff-d06d-49a8-a488-9846e081b224/e3477aa9-4b02-4274-8b38-5bdf682ad563/saida.webp?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466VNKMUJRQ%2F20260512%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260512T055350Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEF0aCXVzLXdlc3QtMiJGMEQCICv3NkS2oCuwbzbIqxV1E98MMFtWF0k8zawRhxWAuMdoAiBsF3H43COYt6aCPAui0iuKLunyG51Wp2SQMnV6tv718Cr%2FAwgmEAAaDDYzNzQyMzE4MzgwNSIMJv00hXKtmwv9FyxCKtwDE2%2F2LUPjATfAgp9DaEDnCFA6EIMR6tk2G35TfXFnsFWwp0PNjfjSs2PK%2BKIAVcRlPUlfLB6MKll9sZXOu33xe8Jkpd9LKJk2dxU91HOo7xM7qLuv1ilhEtKTqwrgoz5dbjI5WXoj%2B6gLNjdsu6CNjWNp7o1LH%2FsbOpL574A%2FRlhlrDHdO%2FS7Tg5xxeyygwT3adYnVXQdvveXYUgkyjS%2FpBLklPTAqRhOk9NNzF7MXfRL3LkqJE1GaYbfVt%2F%2BZcwSVMD35O2qOiM6jbE0Z4Oziz8i46kYHcjd9d50jepjXe5JkShe8%2BIiOlf0Tqgjilqe4QrhZRCEftrU0YN0mWrcHusrDpZ9YESmtWaTtU8mX86f%2BKAVmIdfwXvlfyTHxSEgoWyTNpa84LkX89T7FuoVzVH1jl%2FK9FFlveacVirb3TanIkOauohh3jxwcu%2FRMuJH7K9516kFi6QXg1D4tcOYVnt4kl4CYQMhYblwXmUwaJ1ItZVNVxrShyw2MvedA0JKQ1krVpYWdb9f7nPyq3qagpgjyXDqaG44Moksm16C6rt83lkKV76T%2Fk5AIetlgRNFG87TPBxtw2qt0%2FOIECTqUdG5Q0aynB2FWN8RstSAi%2Fj4vcphwIAmuN59rJMwxOiK0AY6pgGnbtHf%2FbcHWIpivwNOtwYT97glX5M%2Bgb53cvbCY3q3rtnt5QrOUsfS6udjz%2FHmoIIeCN%2FGuO0KMj8xlKEDn3rptBJa8wwJ3UCrmxLYPCOmSsl3Hpfsdls29UV6kG%2Bf%2FhNjLHVRX9zluvVPe7tD9zeQHxvvdGjVxNkRI6muL166L7M9lFe5GV%2F2HeSMCZ8uHHXPY32vXsWKL%2Fegn0xO0RhC%2FpLbfD3O&X-Amz-Signature=53e7e1c577c597cda39bb4516c2c0b5739f808c1238b2bcd56260b6b43b7efc5&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject
Fala, dev! Quando falamos de Visão Computacional em tempo real, o maior inimigo não é a precisão do modelo, mas sim a latência e a experiência do usuário (UX). Construir um pipeline de detecção de objetos que processa frames da webcam exige uma arquitetura que não desperdice recursos e uma interface que apresente dados de forma limpa.
Hoje, vamos fugir do básico. Vamos entender como construir uma aplicação de Visão Computacional de elite usando YOLOv8, otimizando o tamanho do processamento para garantir FPS alto e renderizando tudo em um dashboard responsivo e elegante.

A Stack de processamento

Para garantir inferência de baixa latência e uma UI ágil, nossa fundação será:
  • YOLOv8 (Ultralytics): O estado da arte em velocidade. Usaremos a versão Nano, que é extremamente leve e eficiente para CPUs.
  • OpenCV: O motor para captura e redimensionamento inteligente de frames.
  • Streamlit: A camada de apresentação, permitindo criar interfaces web reativas para dados usando apenas Python.
  • Google Antigravity: Nossa IDE e ambiente de execução. Ela elimina a barreira entre o código local e o deploy, oferecendo um ambiente pré-configurado com aceleração de hardware que garante que o processamento do YOLO não "engasgue" o navegador.

Pré-requisitos e instalação

Antes de mergulharmos no código, precisamos garantir que seu ambiente esteja isolado e com as ferramentas corretas.

1. Requisitos de sistema

  • Python 3.8 ou superior.
  • Webcam: integrada ou USB (certifique-se de que outros aplicativos de vídeo estejam fechados).

2. Criando o ambiente virtual

No seu terminal, execute os comandos abaixo para isolar as dependências do projeto:
# Criação do ambiente python3 -m venv venv # Ativação (Linux/macOS) source venv/bin/activate # Ativação (Windows) .\venv\Scripts\activate

3. Instalando as bibliotecas

Com o ambiente ativo, instale os pacotes necessários:
pip install --upgrade pip pip install streamlit ultralytics opencv-python-headless

Otimização de performance e interface

O grande erro de iniciantes é tentar processar e exibir o vídeo na resolução nativa da webcam. Isso reduz drasticamente o FPS. Nossa estratégia foca em dois pilares:
  1. Redimensionamento nativo: reduzimos o frame para 640x360 via OpenCV antes da inferência. Menos pixels para a IA analisar significa muito mais velocidade.
  1. Layout por colunas: usamos o sistema de grades do Streamlit para limitar o tamanho visual da câmera, criando um painel lateral dedicado para métricas e controles.

Implementação Core: app.py

Aqui está a implementação do pipeline otimizado:
import streamlit as st import cv2 from ultralytics import YOLO import time # 1. Configuração da Interface st.set_page_config(page_title="AI Sentinel", layout="wide") st.markdown(""" <style> .stMetric { background-color: #161b22; border: 1px solid #30363d; padding: 10px; border-radius: 10px; } </style> """, unsafe_allow_html=True) @st.cache_resource def load_model(): return YOLO('yolov8n.pt') # Modelo Nano: apenas 6MB model = load_model() # 2. Estrutura de Colunas (Controlando o tamanho da imagem) st.title("🛡️ AI Sentinel: Real-Time Monitor") st.divider() col_cam, col_stats = st.columns([2, 1]) # Proporção 2:1 para o vídeo não dominar a tela with col_cam: frame_placeholder = st.empty() with col_stats: st.subheader("Métricas do Sistema") fps_metric = st.metric("Velocidade", "0 FPS") obj_metric = st.metric("Objetos", "0") st.divider() conf_level = st.slider("Confiança", 0.3, 1.0, 0.5) stop_btn = st.button("Interromper Sistema") # 3. Loop de Captura e Inferência cap = cv2.VideoCapture(0) prev_time = 0 while cap.isOpened() and not stop_btn: ret, frame = cap.read() if not ret: break # Otimização crucial: Diminuindo a imagem para ganhar FPS frame_small = cv2.resize(frame, (640, 360)) # Inferência YOLOv8 results = model(frame_small, stream=True, conf=conf_level, verbose=False) for r in results: # Plotando as detecções e convertendo para RGB annotated_frame = r.plot() annotated_frame = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB) # Cálculo de FPS curr_time = time.time() fps = 1 / (curr_time - prev_time) prev_time = curr_time # Renderização controlada pela largura da coluna frame_placeholder.image(annotated_frame, use_container_width=True) # Atualização da GUI fps_metric.metric("Velocidade", f"{fps:.1f} FPS") obj_metric.metric("Objetos", len(r.boxes)) cap.release()
 

O diferencial tecnológico

Repare nas otimizações que elevam esse projeto ao nível Sênior:
  • use_container_width=True: garante que a imagem se ajuste perfeitamente à coluna do Streamlit, impedindo que ela estoure o layout.
  • model(stream=True): utiliza geradores do Python para processar os resultados, economizando memória RAM e evitando gargalos em fluxos contínuos de vídeo.
  • Redimensionamento prévio: ao reduzir a imagem no OpenCV antes de entregá-la ao YOLO, reduzimos o custo computacional exponencialmente.

Construa um projeto real com Inteligência Artificial e descubra, na prática, o poder do Desenvolvimento Agêntico.

Seja você iniciante ou dev experiente, essa é sua oportunidade de evoluir construindo um projeto que acompanha a nova era do desenvolvimento.
Bora codar o seu futuro? 🚀

Conheça o Rocketseat Para Empresas

Oferecemos soluções personalizadas para empresas de todos os portes.

Rocketseat

Rocketseat

Ecossistema de educação contínua referência em programação e Inteligência Artificial.

Artigos_

Explore conteúdos relacionados

Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.

Imagem contendo uma carta e um símbolo de check
NewsletterReceba conteúdos inéditos e novidades gratuitamente