teslatony commited on
Commit
cf36d6c
·
verified ·
1 Parent(s): 702f71e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +19 -62
app.py CHANGED
@@ -1,77 +1,34 @@
1
  """
2
- Реальное время: распознавание объектов с веб-камеры через Gradio и YOLOv8.
3
- Работает с Gradio 3.49.3
4
  """
5
 
6
  import numpy as np
7
  from PIL import Image
8
  import gradio as gr
 
9
 
10
- try:
11
- from ultralytics import YOLO
12
- except Exception as e:
13
- YOLO = None
14
- print("Ultralytics import failed:", e)
15
 
16
- # Кэширование модели
17
- _MODEL = {"obj": None}
18
-
19
- def load_model(model_name: str = "yolov8n.pt"):
20
- """Загружает YOLO-модель"""
21
- if YOLO is None:
22
- raise RuntimeError("Пакет ultralytics не найден. Проверь requirements.txt.")
23
- if _MODEL["obj"] is None:
24
- _MODEL["obj"] = YOLO(model_name)
25
- return _MODEL["obj"]
26
-
27
- def annotate_frame(frame: np.ndarray, conf: float = 0.25):
28
- """Выполняет детекцию и возвращает кадр с аннотациями"""
29
  if frame is None:
30
  return None
31
- model = load_model()
32
- results = model.predict(source=frame, imgsz=640, conf=conf, verbose=False)
33
  annotated = results[0].plot()
34
- return np.array(annotated)
35
-
36
- def detect_live(image, conf):
37
- """Обработчик Gradio для стриминга с веб-камеры"""
38
- if image is None:
39
- return None
40
- annotated = annotate_frame(image, conf)
41
- return Image.fromarray(annotated)
42
-
43
- def main():
44
- title = "🎥 Реальное время: распознавание объектов (YOLOv8)"
45
- description = "Потоковое детектирование объектов с веб-камеры. Используется модель `yolov8n.pt`."
46
-
47
- with gr.Blocks() as demo:
48
- gr.Markdown(f"# {title}\n\n{description}")
49
-
50
- with gr.Row():
51
- with gr.Column(scale=2):
52
- # Для Gradio 3.49.3 — рабочий способ захвата веб-камеры
53
- webcam = gr.Image(source="webcam", streaming=True, label="Веб-камера")
54
- conf = gr.Slider(0.0, 1.0, value=0.25, step=0.01, label="Порог достоверности")
55
- model_path = gr.Textbox(value="yolov8n.pt", label="Модель", visible=False)
56
-
57
- with gr.Column(scale=1):
58
- output = gr.Image(label="Результат детекции", interactive=False)
59
- start_btn = gr.Button("Загрузить модель")
60
- status = gr.Textbox(value="Модель не загружена", label="Статус", interactive=False)
61
-
62
- # Кнопка загрузки модели
63
- def load_event(spec):
64
- try:
65
- load_model(spec)
66
- return f"Модель загружена: {spec}"
67
- except Exception as e:
68
- return f"Ошибка: {e}"
69
 
70
- start_btn.click(load_event, inputs=[model_path], outputs=[status])
71
- webcam.change(detect_live, inputs=[webcam, conf], outputs=[output])
72
 
73
- demo.launch()
 
 
74
 
75
- if __name__ == "__main__":
76
- main()
77
 
 
 
1
  """
2
+ Реальное время: распознавание объектов с веб-камеры через Gradio 5.x и YOLOv8.
3
+ Работает на Hugging Face Spaces без проблем с версией Gradio.
4
  """
5
 
6
  import numpy as np
7
  from PIL import Image
8
  import gradio as gr
9
+ from ultralytics import YOLO
10
 
11
+ # Загружаем YOLO модель (лучше легкую для портфолио)
12
+ model = YOLO("yolov8n.pt")
 
 
 
13
 
14
+ def detect(frame: np.ndarray):
15
+ """
16
+ Получает кадр с веб-камеры, выполняет детекцию YOLOv8 и возвращает аннотированный кадр.
17
+ """
 
 
 
 
 
 
 
 
 
18
  if frame is None:
19
  return None
20
+ results = model.predict(source=frame, imgsz=640, conf=0.25, verbose=False)
 
21
  annotated = results[0].plot()
22
+ return annotated
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
 
24
+ with gr.Blocks() as demo:
25
+ gr.Markdown("### 🎥 YOLOv8: Распознавание объектов с веб-камеры в реальном времени")
26
 
27
+ with gr.Row():
28
+ webrtc = gr.Video(label="Веб-камера", source="webcam", streaming=True)
29
+ output = gr.Image(label="Результат детекции")
30
 
31
+ # Подключаем обработчик
32
+ webrtc.change(detect, inputs=[webrtc], outputs=[output])
33
 
34
+ demo.launch()