Ich versuche, einen Multi-Objekt-Tracker auf einem Einzel-Objekt-Tracking-Benchmark auf Python zu bewerten. Mein Ansatz besteht darin, die Ziel -ID aus dem Begrenzungsfeld im ersten Frame auszuwählen, der am besten mit dem anfänglichen Begrenzungsfeld im ersten Frame übereinstimmt. Ich verwende dafür eine Get_Best_Match () -Funktion. Da Yolo möglicherweise mit kleinen oder nicht lernenden Objekten zu kämpfen hat, teste ich speziell auf Videosequenzen, in denen YOLO das Ziel erfasst.
import numpy as np
import vot
import sys
import cv2
from ultralytics import YOLO
def iou(box_a, box_b):
# Compute intersection-over-union for two boxes [x1, y1, x2, y2]
x_a = max(box_a[0], box_b[0])
y_a = max(box_a[1], box_b[1])
x_b = min(box_a[2], box_b[2])
y_b = min(box_a[3], box_b[3])
interArea = max(0, x_b - x_a) * max(0, y_b - y_a)
boxAArea = (box_a[2] - box_a[0]) * (box_a[3] - box_a[1])
boxBArea = (box_b[2] - box_b[0]) * (box_b[3] - box_b[1])
IoU = interArea / float(boxAArea + boxBArea - interArea)
return IoU
def get_best_match(selection_box, boxes):
# selection_box: [x1, y1, x2, y2]
# boxes: iterable of box objects with .xyxy attribute
max_iou = 0
best_id = None
best_box = None
for box in boxes:
box_xyxy = box.xyxy.cpu().numpy().tolist()[0]
iou_score = iou(selection_box, box_xyxy)
if iou_score > max_iou:
max_iou = iou_score
best_id = int(box.id.item()) if box.id is not None else None
best_box = box
if max_iou == 0 and len(boxes) > 0:
# Fallback: pick closest box by center
sel_cx = (selection_box[0] + selection_box[2]) / 2
sel_cy = (selection_box[1] + selection_box[3]) / 2
min_dist = float('inf')
for box in boxes:
box_xyxy = box.xyxy.cpu().numpy().tolist()[0]
bx = (box_xyxy[0] + box_xyxy[2]) / 2
by = (box_xyxy[1] + box_xyxy[3]) / 2
dist = (sel_cx - bx) ** 2 + (sel_cy - by) ** 2
if dist < min_dist:
min_dist = dist
best_id = int(box.id.item()) if box.id is not None else None
best_box = box
return best_id, best_box
detector = YOLO('/home/uuu/jupyter_projects/MyProjects/baka/yolo11n.pt')
handle = vot.VOT("rectangle")
selection = handle.region()
selection_box = [selection.x, selection.y, selection.x + selection.width, selection.y + selection.height]
max_iou = 0
target_id = None
score = 0
x1, y1, x2, y2 = 0, 0, 0, 0
results = detector.track(handle.frame(), tracker='botsort.yaml', stream=True, persist=True)
for result in results:
boxes = result.boxes
try:
if target_id is None:
for box in boxes:
target_id, _ = get_best_match(selection_box, boxes)
if target_id is None:
print("Target ID not found -_-")
handle.report(vot.Rectangle(0, 0, 0, 0), 0.0)
found = False
for box in boxes:
curr_id = int(box.id.item()) if box.id is not None else None
if curr_id == target_id:
box_xyxy = box.xyxy.cpu().numpy().tolist()[0]
x1, y1, x2, y2 = map(int, box_xyxy)
score = float(box.conf.item())
found = True
break
if found:
handle.report(vot.Rectangle(x1, y1, x2 - x1, y2 - y1), score)
else:
handle.report(vot.Rectangle(0, 0, 0, 0), 0.0)
except Exception as e:
# Always respond, even if something goes wrong
handle.report(vot.Rectangle(0, 0, 0, 0), 0.0)
print(f"Error: {e}", file=sys.stderr)
Die Ausgabe:
Ideen, wie ich herausfinden kann, warum mein Code nach dem zweiten Rahmen stoppt? Oder wenn Sie offensichtliche Fehler in meinem Code sehen, lassen Sie es mich bitte wissen. Das Problem, mit dem ich konfrontiert war, war zu verstehen>
Ich versuche, einen Multi-Objekt-Tracker auf einem Einzel-Objekt-Tracking-Benchmark auf Python zu bewerten. Mein Ansatz besteht darin, die Ziel -ID aus dem Begrenzungsfeld im ersten Frame auszuwählen, der am besten mit dem anfänglichen Begrenzungsfeld im ersten Frame übereinstimmt. Ich verwende dafür eine Get_Best_Match () -Funktion. Da Yolo möglicherweise mit kleinen oder nicht lernenden Objekten zu kämpfen hat, teste ich speziell auf Videosequenzen, in denen YOLO das Ziel erfasst.[code]import numpy as np
for result in results: boxes = result.boxes try: if target_id is None: for box in boxes: target_id, _ = get_best_match(selection_box, boxes) if target_id is None: print("Target ID not found -_-") handle.report(vot.Rectangle(0, 0, 0, 0), 0.0)
found = False for box in boxes: curr_id = int(box.id.item()) if box.id is not None else None if curr_id == target_id: box_xyxy = box.xyxy.cpu().numpy().tolist()[0] x1, y1, x2, y2 = map(int, box_xyxy) score = float(box.conf.item()) found = True break
except Exception as e: # Always respond, even if something goes wrong handle.report(vot.Rectangle(0, 0, 0, 0), 0.0) print(f"Error: {e}", file=sys.stderr) [/code] Die Ausgabe:
Ideen, wie ich herausfinden kann, warum mein Code nach dem zweiten Rahmen stoppt? Oder wenn Sie offensichtliche Fehler in meinem Code sehen, lassen Sie es mich bitte wissen. Das Problem, mit dem ich konfrontiert war, war zu verstehen>
Ich versuche, mit Selenium etwas Einfaches zu bauen, schaffe es aber überhaupt nicht
Ich habe den folgenden Code:
from selenium import webdriver
from selenium.webdriver.chrome.service import...
Ich wollte, dass der Bot zu einer bestimmten Koordinate geht, die ich im Minecraft-Chat eingegeben habe, etwa in der Art von „gehe zu x, y, z“ und er geht zu den besagten x-, y- und z-Koordinaten. Es...
Ziel dieser Forschung ist es, die Leistungsunterschiede zwischen JIT- (Just-in-Time-Kompilierung) und AOT-Strategien (Ahead-of-Time-Kompilierung) zu untersuchen und ihre jeweiligen Vor- und Nachteile...
Ziel dieser Forschung ist es, die Leistungsunterschiede zwischen JIT- (Just-in-Time-Kompilierung) und AOT-Strategien (Ahead-of-Time-Kompilierung) zu untersuchen und ihre jeweiligen Vor- und Nachteile...
Ich verwende .NET 5.0 und habe ein Paket von Telegram.Bot v17.0.0-alpha.3 installiert.
Als ich es versucht habe Schreiben Sie ein Argument vom Typ MessageEventArgs. Ich konnte diese Klasse nicht...