Spaces:
Build error
Build error
| import cv2 | |
| from ultralytics import YOLO | |
| model = YOLO("C:\\Users\\PC\\Desktop\\GazCounter\\best (10).pt") | |
| cap = cv2.VideoCapture("C:\\Users\\PC\\Desktop\\GazCounter\\WhatsApp Video 2025-10-02 at 11.29.10 (2).mp4") | |
| count_per_brand = {} | |
| detected_ids = set() | |
| while True: | |
| ret, frame = cap.read() | |
| if not ret: | |
| break | |
| results = model.track(frame, persist=True, conf=0.4) | |
| for r in results: | |
| if r.boxes is None: | |
| continue | |
| for box in r.boxes: | |
| # Vérifier que l'ID du tracker existe | |
| if box.id is None: | |
| continue | |
| track_id = int(box.id[0]) # Convertir tensor → int | |
| cls_id = int(box.cls[0]) | |
| cls_name = r.names[cls_id] | |
| conf = float(box.conf[0]) | |
| # Dessiner la bounding box | |
| x1, y1, x2, y2 = map(int, box.xyxy[0].cpu().numpy()) | |
| cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) | |
| cv2.putText( | |
| frame, | |
| f"{cls_name} #{track_id} ({conf:.0%})", | |
| (x1, y1 - 10), | |
| cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2 | |
| ) | |
| # Comptage UNIQUE par ID de tracking | |
| if track_id not in detected_ids: | |
| detected_ids.add(track_id) | |
| count_per_brand[cls_name] = count_per_brand.get(cls_name, 0) + 1 | |
| overlay = frame.copy() | |
| cv2.rectangle(overlay, (5, 5), (300, 30 + len(count_per_brand) * 28), (0, 0, 0), -1) | |
| cv2.addWeighted(overlay, 0.4, frame, 0.6, 0, frame) # fond semi-transparent | |
| for i, (brand, count) in enumerate(sorted(count_per_brand.items())): | |
| cv2.putText( | |
| frame, | |
| f"{brand}: {count}", | |
| (10, 28 + i * 28), | |
| cv2.FONT_HERSHEY_SIMPLEX, 0.65, (0, 255, 255), 2 | |
| ) | |
| total = sum(count_per_brand.values()) | |
| cv2.putText( | |
| frame, | |
| f"TOTAL: {total} bouteilles", | |
| (10, frame.shape[0] - 10), | |
| cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 255), 2 | |
| ) | |
| cv2.imshow("GazCounter", frame) | |
| if cv2.waitKey(1) & 0xFF == ord('q'): | |
| break | |
| cap.release() | |
| cv2.destroyAllWindows() | |
| for brand, count in sorted(count_per_brand.items()): | |
| print(f" {brand}: {count} bouteille(s)") | |
| print(f" TOTAL: {sum(count_per_brand.values())} bouteilles") |