Paradise151 commited on
Commit
5aad3df
·
verified ·
1 Parent(s): f13ebf6

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +86 -0
app.py ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ !pip install ultralytics
2
+ import gradio as gr
3
+ import cv2
4
+ from ultralytics import YOLO
5
+ import torch
6
+ import os
7
+ import numpy as np
8
+
9
+
10
+ loaded_model = YOLO('best.pt')
11
+
12
+ # Проверка устройства
13
+ device = 'cuda' if torch.cuda.is_available() else 'cpu'
14
+ print(f'Используется устройство: {device}')
15
+ loaded_model.to(device)
16
+
17
+
18
+ # # --- Глобальные переменные для оптимизации ---
19
+ # # Пропуск кадров для увеличения производительности
20
+ # FRAME_SKIP = 2 # Обрабатывать каждый 2-й кадр
21
+ # frame_counter = 0
22
+ # last_annotated_frame = None # Храним последний обработанный кадр
23
+
24
+
25
+ # --- Функция для обработки веб-камеры ---
26
+ def predict_webcam(img, conf_threshold, iou_threshold):
27
+ # global frame_counter, last_annotated_frame
28
+
29
+ if img is None:
30
+ return last_annotated_frame # Возвращаем последний кадр, если новый не пришел
31
+
32
+ # Исправляем зеркальное отражение
33
+ img = cv2.flip(img, 1)
34
+
35
+ # frame_counter += 1
36
+ # if frame_counter % FRAME_SKIP != 0 and last_annotated_frame is not None:
37
+ # # Если пропускаем кадр, возвращаем предыдущий результат, чтобы не было "замирания"
38
+ # return last_annotated_frame
39
+
40
+ # Пропускаем кадр через модель
41
+ results = loaded_model.track( # ИЗМЕНЕНО: .predict() на .track() для стабильности
42
+ source=img,
43
+ conf=conf_threshold,
44
+ iou=iou_threshold,
45
+ imgsz=640,
46
+ verbose=False,
47
+ persist=True, # ВАЖНО для трекера: сохранять треки между кадрами
48
+ tracker='botsort.yaml' # Включаем трекер
49
+ )
50
+
51
+ # results - это список, содержащий один объект Results
52
+ # plot() возвращает аннотированное изображение в формате numpy array (BGR)
53
+ annotated_frame = results[0].plot()
54
+
55
+ # Преобразование цвета из BGR (OpenCV) в RGB (Gradio)
56
+ annotated_frame_rgb = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)
57
+
58
+ # Сохраняем последний успешно обработанный кадр
59
+ last_annotated_frame = annotated_frame_rgb
60
+
61
+ return annotated_frame_rgb
62
+
63
+
64
+ # --- Определение интерфейса Gradio ---
65
+ iface = gr.Interface(
66
+ fn=predict_webcam,
67
+ inputs=[
68
+ gr.Image(type="numpy", label="Webcam Feed", streaming=True),
69
+ gr.Slider(minimum=0, maximum=1, value=0.25, label="Confidence threshold"),
70
+ gr.Slider(minimum=0, maximum=1, value=0.45, label="IoU threshold"),
71
+ ],
72
+ outputs=gr.Image(type="numpy", label="Result"),
73
+ live=True,
74
+ title="Impurity Detection (Webcam)",
75
+ description="Real-time impurity detection using your webcam. Adjust confidence and IoU thresholds below.",
76
+ )
77
+
78
+ # # --- Запуск интерфейса Gradio ---
79
+ # if __name__ == "__main__":
80
+ # # РЕШЕНИЕ №4 (дополнительно): .queue() для более отзывчивого интерфейса
81
+ # iface.queue().launch(share=True, debug=True)
82
+
83
+
84
+ if __name__ == "__main__":
85
+ print("\nЗапуск Gradio интерфейса. Ожидайте появления публичной ссылки...")
86
+ iface.launch(share=True) # Устанавливаем share=True для запуска в Colab