Instruments für die Datenvisualisierung und Erkundung haben es mir ermöglicht, meine Pc Imaginative and prescient -Projekte schneller zu iterieren, insbesondere wenn die Probleme, mit denen ich konfrontiert bin Treffen Sie Algorithmus oder Entwurfsentscheidungen, die auf dynamischen zeitvariablen Signalen basieren. Diese Signale können häufig eine analysierende Analyse sein, indem Sie sich nur schnell ändernde Zahlen, die auf dem Bildschirm aufgezeichnet wurden, oder in einer Tabelle gespeichert werden.

Während ich an einigen dieser Probleme arbeitete, untersuchte ich die eingebauten interaktiven Elemente von OpenCVAber abgesehen von einigen Schiebereglern sind die Optionen dort sehr begrenzt, insbesondere wenn man versucht, einige animierte Handlungen zu integrieren. Es gibt einige hacky Möglichkeiten, dynamische Diagramme aus zu erhalten matplotlib hinein OpenCVwas ich darin erforscht habe Publish.
Ich habe auch verschiedene UI -Frameworks erforscht wie tkinterwas ich in meinem verwendet habe Letztes Projekt Für eine Visualisierung der Stimmungsanalyse. Ich habe eine benutzerdefinierte Komponente erstellt, mit der ich dynamische Rahmen anzeigen konnte. Es fühlte sich jedoch immer noch nicht wirklich wie das richtige Werkzeug für die Aufgabe an, insbesondere wenn es versucht, mit interaktiven Handlungen zu arbeiten.
Und dann stolperte ich über Wiederholung. Hin und wieder entdecke ich ein Werkzeug oder ein Rahmen, das mich wirklich erregt, und dies struggle genau eine dieser Zeiten. RERUN ist ein Open-Supply-Device zur Visualisierung von Daten, die typischerweise in der Robotik-Domäne enthalten sind, die von einfachen Zeitreihendaten und statischen Bildern bis hin zu komplexen 3D-Punktwolken, Videoströmen oder anderen Arten von Multimodaldaten reichen. Die Demos sehen sehr beeindruckend aus und die Setup- und Code -Samples sind so einfach, dass ich sofort begeistert struggle.

Deshalb habe ich mich entschlossen, meine Ball -Monitoring -Demo aus einem früheren Projekt zu überarbeiten und die Daten mit Rerun zu zeichnen. Lassen Sie mich Ihnen zeigen, wie einfach es ist, interaktive Anwendungen zu verwenden und zu erstellen!
QuickStart
Sie können Rerun in einem Ihrer Python -Projekte mit PIP oder UV installieren:
pip set up rerun-sdk
uv add rerun-sdk
Sie können den Betrachter nach der Set up des SDK starten, indem Sie ihn einfach aus der Befehlszeile ausführen:
rerun
Der Betrachter ist Ihr Hauptfenster, in dem Ihre Experimente angezeigt werden. Sie können es offen lassen oder zwischen Ihren Experimenten schließen.

Um einen Wiederholungsbetrieb aus einem Python -Skript zu instanziieren, müssen Sie eine Instanz mit einem Experimentnamen hervorbringen:
import rerun as rr
rr.init("ball_tracking", spawn=True)
Ballverfolgungsdemo
Experimentierungen erneut ausführen können auf und geladen werden .rrd Aufzeichnungsdateien. Sie können die Aufzeichnungsdatei für die Ball -Monitoring -Demo herunterladen Hier. Drücken Ctrl + O oder auswählen Open... Im Menü oben hyperlinks vom Wiederholungsbetrieb und laden Sie die heruntergeladene Aufzeichnungsdatei.

Sie werden die Ball -Monitoring -Demo -Wiedergabe einmal sehen und dann stoppt das Video. Am Ende des Betrachters haben Sie die Zeitleiste. Sie können durch die Zeitleiste schrubben, indem Sie auf den Griff klicken und ziehen.

Diese Aufzeichnungsdateien enthalten nur die Daten des Experiments, einschließlich des Movies, der Anmerkungen und der Zeitreihen der Monitoring. Das Structure des Betrachters wird separat in a gespeichert .rbl Blaupausedatei. Laden Sie die Blueprint -Datei für die Demo herunter Hier und öffnen Sie es oben in der vorhandenen Datendatei.

Jetzt haben wir einen etwas besseren Überblick über die Place der Place, die Geschwindigkeit und die Beschleunigung, die sich getrennt haben und das Video distinguished zentriert.
Im Videoband können Sie auf die Anmerkungen und hyperlinks klicken Blueprint Panel Sie können sie einzeln verbergen oder anzeigen.

Zeitreihendiagramme
Um ein bestimmtes Diagramm zu analysieren, können Sie oben rechts in jedem Fenster auf die Schaltfläche Ansicht erweitern, z. B. das Positionsdiagramm.

Dies ist a TimeSeriesView. Diese Ansicht kann verwendet werden, um Daten in einem 2D-Diagramm mit der x-Achse zu zeichnen, die die Zeitdomäne darstellt, in unserem Fall den diskreten Body-Index des Movies. In dieser Ball -Monitoring -Demo iterieren wir über die Videorahmen in einer Schleife, in der wir den Body -Index unserer Zeitleiste explizit festlegen können.
frame_index = 0
whereas True:
ret, body = cap.learn()
if not ret:
break
frame_index += 1
if frame_index >= num_frames:
break
rr.set_time("frame_idx", sequence=frame_index)
Um das Diagramm für die Place zu erstellen, müssen Sie einen skalaren Wert für die Place des verfolgten Balls bei jedem Body -Index protokollieren. In diesem Fall, nachdem wir die Place berechnet haben, können wir sie einfach als Wiederholung protokollieren:
rr.log("ball/position_y", rr.Scalars(pos))
Um den Stil dieses Handels zu konfigurieren, müssen wir auch etwas auf demselben Entitätspfad protokollieren (ball/position_y), aber da sich der Stil nicht ändert, können wir ihn einmal vor der Schleife protokollieren und ein statisches Argument liefern.
rr.log(
"ball/position_y",
rr.SeriesLines(colours=(0, 128, 255), names="pos y"),
static=True,
)
Um den Achsenbereich zu definieren, der professional Commonplace sichtbar ist, müssen wir eine Layoutkomponente angeben.
view_pos = rrb.TimeSeriesView(
origin="ball/position_y",
axis_y=rrb.ScalarAxis(vary=(0, 700)),
)
format = rrb.Blueprint(view_pos)
rr.send_blueprint(format)
Video Stream
In ähnlicher Weise können wir eine Ansicht für die Videorahmen erstellen, indem wir das Bild für die Wiederholung protokollieren. Da RERUN ein RGB -Bilder erwartet, aber opencv ues BGR für seine Farbkanal -Bestellung, müssen wir die Frames von BGR in RGB konvertieren, bevor wir sie zum Wiederaufbau angeben.
frame_rgb: np.ndarray = cv2.cvtColor(body, cv2.COLOR_BGR2RGB)
rr.log("body", rr.Picture(frame_rgb))
Um der Bildansicht Anmerkungen hinzuzufügen, müssen wir räumliche Elemente auf einem Subpfad des angegebenen Entitätspfads protokollieren. Zum Beispiel können wir die Mitte des verfolgten Balls zeichnen:
rr.log(
"body/factors",
rr.Points2D(
positions=(heart),
colours=(0, 0, 255),
radii=4.0,
),
)
Um die Video -Body -Ansicht in das Structure aufzunehmen, können wir a verwenden Spatial2DView Knoten:
view_frame = rrb.Spatial2DView(origin="body")
Dann können wir die Handlung vor vertikal mit der Rahmenansicht mit a stapeln Vertical Layoutkomponente:
format = rrb.Blueprint(
rrb.Vertical(
view_pos,
view_frame,
row_shares=(0.33),
),
)
rr.send_blueprint(format)
Die Zeilenaktien geben an, wie stark jede der Zeilen in Prozent einnimmt. Wir können die zweite Zeile -Aktieneintrag für die Body -Ansicht weglassen, da die Aktien bis zu 1 hinzufügen müssen.

Einschränkungen
Während der Arbeit an diesem Projekt struggle ich auf einige Einschränkungen des Wiederholungsunternehmens teilgenommen. Im ursprünglichen Projekt habe ich eine Vorhersage der Flugbahn zu jedem Zeitschritt vorgestellt, dies ist jedoch in einer Zeitreihenansicht derzeit nicht möglich. Auch die Layouts und die Konfiguration der auf den Aufzeichnungsdaten begrenzten Daten sind begrenzt, beispielsweise gibt es keinen integrierten Weg, um einen Kreis ohne Füllung zu zeichnen. Da das Projekt jedoch sehr aktiv entwickelt wird, besteht eine gute Probability, dass einige davon in Zukunft möglich sind.
Abschluss
Die Entwicklererfahrung mit diesem Device als Pc Imaginative and prescient Engineer ist extrem nett, die Benutzeroberfläche lädt quick sofort und das Timeline -Scrubbing kann unglaublich hilfreich sein, um Signale in Zeitreihenplots oder in Movies zu verstehen oder zu debuggen. Ich werde dieses Projekt auf jeden Fall weiter verwenden und erkunden und Sie nur empfehlen, es selbst auszuprobieren!
Weitere Informationen und die vollständige Implementierung finden Sie im Quellcode dieses Projekts unter src/ball_tracking/trajectory_rerun.py.
https://github.com/trflorian/ball-tracking-live-plot
Alle Visualisierungen in diesem Beitrag wurden vom Autor erstellt.
