gabrielnkl commited on
Commit
f0249a9
·
verified ·
1 Parent(s): e9fe4b9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +44 -5
app.py CHANGED
@@ -1,7 +1,20 @@
1
  import gradio as gr
 
 
 
 
 
 
 
 
 
2
 
3
  def process_video(video_file):
4
- # Código de detecção e rastreamento adaptado para trabalhar com o vídeo enviado pelo usuário
 
 
 
 
5
  video_path = video_file.name
6
  cap = cv2.VideoCapture(video_path)
7
  fourcc = cv2.VideoWriter_fourcc(*'mp4v')
@@ -15,17 +28,17 @@ def process_video(video_file):
15
  # Detecção com YOLOv8
16
  results = model(frame)[0]
17
 
18
- # Converter detecções para o formato do rastreador
19
  detections = Detections(
20
  xyxy=results.boxes.xyxy.cpu().numpy(),
21
  confidence=results.boxes.conf.cpu().numpy(),
22
  class_id=results.boxes.cls.cpu().numpy().astype(int)
23
  )
24
 
25
- # Aplicar rastreamento
26
  tracks = tracker.update_with_detections(detections)
27
 
28
- # Desenhar detecções e rastreamento
29
  for track in tracks:
30
  box = track[0]
31
  x1, y1, x2, y2 = box
@@ -33,6 +46,7 @@ def process_video(video_file):
33
  class_id = track[3]
34
  label = f"{model.names[class_id]} {track_id}"
35
 
 
36
  cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
37
  cv2.putText(frame, label, (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
38
 
@@ -40,7 +54,32 @@ def process_video(video_file):
40
 
41
  cap.release()
42
  out.release()
 
43
  return "output.mp4"
44
 
45
- iface = gr.Interface(fn=process_video, inputs=gr.Video(), outputs="video")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  iface.launch()
 
1
  import gradio as gr
2
+ import cv2
3
+ from ultralytics import YOLO
4
+ from supervision import Detections, ByteTrack
5
+
6
+ # Carregar o modelo YOLOv8 pré-treinado
7
+ model = YOLO("yolov8n.pt")
8
+
9
+ # Inicializar o rastreador ByteTrack
10
+ tracker = ByteTrack()
11
 
12
  def process_video(video_file):
13
+ """
14
+ Função que processa um vídeo, realizando a detecção de objetos com YOLOv8
15
+ e rastreamento com ByteTrack. O vídeo é então retornado com as detecções e
16
+ IDs dos objetos desenhados nas caixas delimitadoras.
17
+ """
18
  video_path = video_file.name
19
  cap = cv2.VideoCapture(video_path)
20
  fourcc = cv2.VideoWriter_fourcc(*'mp4v')
 
28
  # Detecção com YOLOv8
29
  results = model(frame)[0]
30
 
31
+ # Converter as detecções para o formato necessário para o rastreador
32
  detections = Detections(
33
  xyxy=results.boxes.xyxy.cpu().numpy(),
34
  confidence=results.boxes.conf.cpu().numpy(),
35
  class_id=results.boxes.cls.cpu().numpy().astype(int)
36
  )
37
 
38
+ # Aplicar rastreamento com ByteTrack
39
  tracks = tracker.update_with_detections(detections)
40
 
41
+ # Desenhar as caixas de detecção e os IDs de rastreamento
42
  for track in tracks:
43
  box = track[0]
44
  x1, y1, x2, y2 = box
 
46
  class_id = track[3]
47
  label = f"{model.names[class_id]} {track_id}"
48
 
49
+ # Desenhar a caixa delimitadora e o ID do rastreamento
50
  cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
51
  cv2.putText(frame, label, (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
52
 
 
54
 
55
  cap.release()
56
  out.release()
57
+
58
  return "output.mp4"
59
 
60
+ # Criando uma interface de usuário com Gradio
61
+ iface = gr.Interface(
62
+ fn=process_video,
63
+ inputs=gr.Video(label="Envie um vídeo para rastreamento"),
64
+ outputs="video",
65
+ title="Aplicação de Rastreamento de Objetos com YOLOv8 e ByteTrack",
66
+ description="""
67
+ Este aplicativo utiliza um modelo YOLOv8 para detectar objetos em vídeos e
68
+ um rastreador ByteTrack para acompanhar o movimento dos objetos ao longo do tempo.
69
+ A cada quadro do vídeo, as detecções de objetos são desenhadas com caixas delimitadoras
70
+ e IDs de rastreamento.
71
+
72
+ **Como funciona:**
73
+ 1. Envie um vídeo.
74
+ 2. O modelo YOLOv8 detecta objetos em cada quadro.
75
+ 3. O rastreador ByteTrack segue os objetos detectados.
76
+ 4. O vídeo de saída é gerado com as caixas delimitadoras e os IDs de rastreamento desenhados.
77
+
78
+ **Exemplo:**
79
+ Veja o exemplo de como o sistema funciona no GIF abaixo!
80
+ """,
81
+ examples=["example.gif"], # Adicionando um GIF de exemplo
82
+ )
83
+
84
+ # Executar a interface
85
  iface.launch()