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=ASIAZI2LB466Y2LGVNDC%2F20260512%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260512T150525Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEGcaCXVzLXdlc3QtMiJIMEYCIQCBVQPgDlps6pm4bhdBS4PZCpSA9lLUbpGCEgXYRGv9jAIhAKZ8H4PWpZ3MpWr0xZ8C8kbjMLRO3Jmhs8bjiMLpO8T7Kv8DCDAQABoMNjM3NDIzMTgzODA1IgywpcYOGAxPrpFVeOsq3ANEqkfgpQ16ZOJCRz10Z2dcis621vxZaw1okqt1JXy3z1RtgawGhuoD7Svlwaf1KjUV%2BfpQc64ULuLYaqtTPtL4eYkLmxWBkAbeC6TSh0%2F8oAL2ueqVIB2849IOTNxinw2XCkblhHGwUVv07hl7gJK6UJJ%2B%2FrX9Oc%2Be7Q7um%2FV7s0SEKM0PsIYyNw%2FpCny7XRv3%2BNf3sO4TZaIYwuovhWSMulF912TdeGl%2FTTQKnmpIjavx8PloZJAEtTUh7Af8mcqpkc3THtOtaFIHsjHiAD1nJOAkGfAzuAUSDSW%2BQO6nGbzhp5FL%2F%2FQVEYwGjB9df7Agih888GgmMEWujpm13GWW%2FhV%2F%2Bqx3ocDrCduiDmPLwbNwl2k8Ovk91yu3bj0XM610MOPBIbfGDOIWFybACK5uXK66R4Sci4iVJLF4jVS8QVFbVz1TnoCPBsRuyJV1kcrJ%2BQg0sddGn%2FRDtXSR4x4NOdS2udJinC7CL%2BhssAWMaltqFGx0ym3ehNk2V13tziKNEJNGEaNoqpUxQHoasE7DKsgYs6mOJ2N70WFT4CUMXsJyJ%2BbuOkhrcj3ZXrMeWuYYJzQOECkFxFnk1chHO5R8i%2Ft%2FgHwy9oX61fVaZFAjjkFBeFk%2BuVH7nriSBTDwgY3QBjqkAbcjcsur64IX%2Bmlv6V6XixE3iJREAbbQN4S5t%2FA7A10RZJyY0R23er%2F2n5Ej00XiFgtdtqlHRZ6miWxAAvXBON2bC0ZFCBtOvUPcNEgVcV6a8NmtHcfx23YdxpWdj7QJsfZ93v17jk86ryzoNQyEl%2BOhFfkgJILxhkAP%2FVaq474YmC040a3m7O4klHK26P3GptOyYQd1CR2ochqcIOVUaIxISmh8&X-Amz-Signature=d342dc45c4a51ef08e71208a662a7cc37172d92b308c6a984c6c584fbf6d655f&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