fullseye

Vollständiger Leitfaden zu Fullseye Studio

日本語 · English · 简体中文 · 繁體中文 · 한국어 · Deutsch

Fullseye Studio ist eine visuelle Pipeline-Werkbank im Stil von HDevelop. Man sucht Operatoren, ordnet sie an, dreht an zwei Reglern per Schieberegler, verfolgt Zwischenergebnisse mit Zoom/Pan Stufe für Stufe und exportiert die fertige Pipeline am Ende als --ops-String / Python / JSON. Technisch ist es ein schmales GUI-Frontend über der fullseye-API — die Pipeline-Logik (PipelineModel), der Inspector (inspect_result) und die Beispielsammlung (recipes) sind allesamt unabhängig von Qt und einzeln mit Unit-Tests versehen.

Dieser Leitfaden listet die Funktionen so auf, wie sie durch Abgleich von studio.py (build_window) mit dem tatsächlichen Code ermittelt wurden. Die Absicht hinter UX/Design steht in STUDIO_UX.md, der Hintergrund der Wahrnehmungspanels aus v14 in V14.md / PERCEPTION.md.


Starten

Die GUI-Extras (PySide6) werden benötigt (pip install -e ".[gui]").

py -3.11 studio.py          # direkt aus dem Repository-Wurzelverzeichnis
fullseye-studio             # bei bereits erfolgtem pip install -e . über das Konsolen-Skript

Beim Start öffnet sich ein Hauptfenster mit 1320×860 (Titel: Fullseye Studio). Existiert assets/fullseye.ico, wird es als Fenster-/Taskleistensymbol verwendet. Im Ausgangszustand ist bereits ein synthetisches Demobild geladen (demo_image, 256×256 mit Kanten, Blobs und Farbverlauf).


Bildschirmaufbau (3 Bereiche)

Oben befinden sich die Menüleiste (File / Edit / View / Run / Help) und eine Marken-Werkzeugleiste, unten die Statusleiste (Koordinaten + Pixelwert beim Überfahren mit der Maus, temporäre Meldungen von flash()). In der Mitte liegen drei links-rechts geteilte Bereiche.

Bereich Abschnitte (QGroupBox) Aufgabe
Links SAMPLE PIPELINES / OPERATORS Beispiele laden, Operatoren durchsuchen
Mitte PIPELINE / SELECTED STAGE · KNOBS / EXPORT & I/O Pipeline aufbauen, Regler einstellen, exportieren
Rechts IMAGE / DISPLAY & PERCEPTION (v14) / ANALYSIS Ergebnisanzeige, Farbabbildung/Wahrnehmung, Histogramm/Inspector

Die anfängliche Aufteilungsbreite beträgt 340 / 360 / 640 px, der rechte Bereich ist elastisch.


Linker Bereich: Operators-Browser

Beispielpipelines (SAMPLE PIPELINES)

Wählt man aus dem Dropdown eines der 20 fertigen Rezepte (recipes.py), wird die Pipeline durch dieses Rezept ersetzt. Beispiele: “Edge — Sobel + Otsu”, “Denoise — bilateral + unsharp”, “Segment — blob / coin”, “Count — blobs”, “Texture — Gabor” und mehr. Ein bequemer Ausgangspunkt, um erst einmal etwas laufen zu sehen und den Inhalt zu studieren.

Operator-Browser (OPERATORS)

Die Einfügeposition ist “direkt nach der ausgewählten Stufe”. Ist keine Stufe ausgewählt, wird am Ende angehängt.


Mittlerer Bereich: Pipeline aufbauen und schrittweise ausführen

PIPELINE (Stufenliste)

Jede Zeile hat die Form N. op (a=…, b=…) -> Ergebniszusammenfassung; der Ergebnisstatus bis zu dieser Stufe (image/region/feature usw.) erscheint rechts.

Wählt man eine Stufe aus, wird das Zwischenergebnis bis zu dieser Stufe im rechten IMAGE-Bereich dargestellt, und auch die ANALYSIS darunter (Histogramm / Inspector) wird synchron aktualisiert. Das entspricht einem “Schritt-für-Schritt-Debugger”.

SELECTED STAGE · KNOBS (Reglereinstellung)

Zeigt die Details der ausgewählten Stufe (op_detail: Name · sort von in → out · Kategorie · HALCON-Alias) und erlaubt die Einstellung über zwei Schieberegler a / b (0,00 bis 1,00). Bewegt man den Wert, wird das Ergebnis sofort neu berechnet. Ist keine Stufe ausgewählt, sind die Schieberegler deaktiviert (ein bewusstes Design, das einen bedeutungslosen Regler nicht in einem toten Zustand belässt).

Die Bedeutung der Regler unterscheidet sich je nach Operator (Radius / Schwellwert / σ / Richtung usw.). Was gerade eingestellt wird, lässt sich am Detail-Label der Stufe und am Tooltip ablesen.

EXPORT & I/O


Rechter Bereich: Anzeige, Wahrnehmung, Analyse

IMAGE (Ergebnisansicht)

DISPLAY & PERCEPTION (v14)

ANALYSIS


Command Palette (Strg+P)

Strg+P öffnet einen Fuzzy-Search-Dialog, mit dem sich jede Aktion oder jeder Operator per Namen ausführen lässt. Das Ranking erfolgt in der Reihenfolge Präfix-Treffer > Wortpräfix-Treffer > Teilstring-Treffer (palette_filter, unabhängig von Qt und mit Unit-Tests versehen). Aktionen (z. B. ▸ Open image) stehen zuerst, danach folgen alle Operatoren (z. B. op: gaussian); Enter führt aus. Damit lässt sich sogar das Einfügen von Operatoren allein über die Tastatur erledigen.


Tastenkürzel

In der Anwendung zeigt Help ▸ Keyboard shortcuts (F1) die vollständige Liste als Tabelle (selbstdokumentierend). Die wichtigsten (aus den act_*-Definitionen in studio.py):

Aktion Tastenkürzel Aktion Tastenkürzel
Open image Ctrl+O Remove stage Del
Synthetic demo Ctrl+D Move stage up / down Ctrl+↑ / Ctrl+↓
Save result Ctrl+S Clear pipeline Ctrl+Shift+Backspace
Open pipeline Ctrl+Shift+O Zoom in / out Ctrl+= / Ctrl+-
Save pipeline Ctrl+Shift+S Fit / Actual size (1:1) Ctrl+0 / Ctrl+1
Export Ctrl+E 3D surface Ctrl+3
Quit Ctrl+Q Reset to start Home
Command palette Ctrl+P Step forward Ctrl+→
Keyboard shortcuts F1 Run all Ctrl+Enter

Jede Aktion ruft, egal ob über Menü, Werkzeugleiste oder Schaltfläche ausgelöst, denselben Handler auf (eine Aktion, mehrere Zugänge).


HDevelop-Direktiven dev_* zur Anzeigesteuerung

Wie in HDevelop lässt sich das Anzeigeverhalten aus dem Programm heraus steuern. Schreibt man im Program-Fenster eine dev_*-Zeile, wird sie nicht als Bildverarbeitungsstufe, sondern als Anzeigedirektive interpretiert und bei Apply angewendet (docs/HDEVELOP_DEV_OPS.md erfasst alle 43 dev_* vollständig).

Direktive Wirkung Entsprechende UI
dev_update_window ('off'|'on') Schaltet die automatische Aktualisierung des Grafikfensters View ▸ Display updates ▸ Graphics window
dev_update_var ('off'|'on') Schaltet die automatische Aktualisierung des Variablenfensters dasselbe, Variable window
dev_update_pc ('off'|'on') Schaltet die Aktualisierung des Ausführungscursors dasselbe, Program counter
dev_update_time ('off'|'on') Schaltet die Anzeige der Verarbeitungszeit pro Zeile dasselbe, Operator timings
dev_update_off () / dev_update_on () Schaltet alles Obige gebündelt aus / ein Umschalter Auto-update in der Werkzeugleiste
dev_set_part (Row1, Col1, Row2, Col2) Legt den Anzeigebereich (Zoom/Pan) fest · negativ = Gesamtbild zusammen mit Mausrad/Fit
dev_set_lut ('gray'|'jet'|'viridis'…) Wechselt die Farbabbildung (LUT) View ▸ Display mode
dev_clear_window () Leert das aktuelle Fenster
set_system ('thread_num', N) Legt die Anzahl der OpenCV-Worker-Threads fest (0 = Standard/alle) Tools ▸ System settings
set_system ('operator_timeout', ms) Weiches Operator-Timeout (warnt bei langsamen Stufen im Run status) dasselbe
dev_set_draw ('fill'|'margin') Wechselt zwischen Füllung (fill) und Kontur (margin) beim region-Overlay View ▸ Display mode = region overlay
dev_set_color ('red'|'green'…) Farbe des region-Overlays dasselbe
dev_set_line_width (N) Konturbreite für margin (px) dasselbe
dev_disp_text ('label', Row, Col) Textannotation über dem Ergebnis (verschwindet bei der nächsten Zeichnung/dev_clear_window)
dev_open_window (Row, Col, W, H) Öffnet und platziert ein Grafikfenster und macht es aktuell (erneutes Apply platziert dasselbe Fenster neu = keine Vermehrung) Strg+G / Window ▸ Graphics
dev_set_window (Handle) Wechselt das aktuelle Fenster über sein Handle Klick auf ein Fenster
dev_set_window_extents (Row, Col, W, H) Position · Größe des aktuellen Fensters (-1 = unverändert lassen) Fenster ziehen
dev_close_window () Schließt das aktuelle Fenster (das dauerhafte Hauptfenster ist geschützt) × des Fensters
set_system ('max_graphics_windows', N) Obergrenze der Fensteranzahl (Standard 256 · auf allen Pfaden fail-closed) Tools ▸ System settings ▸ Windows

Verwendung: Setzt man dev_update_off () an den Anfang, lassen sich aufwendige Verarbeitungen oder viele Änderungen ohne Zeichenaufwand durchführen; mit dev_update_on () wird anschließend auf einmal auf den aktuellen Zustand aktualisiert (dieselbe Performance-Technik wie in HDevelop). Solange Aktualisierungen aus sind, erscheint rechts in der Statusleiste updates off: …, sodass der eingefrorene Zustand nicht wie “kaputt” aussieht. Derselbe Wechsel ist auch über den Umschalter Auto-update in der Werkzeugleiste möglich.

Hinweis (ehrlich gesagt): Anders als Pipelinestufen folgt dev_* nicht if/for und wird bedingungslos angewendet (löst auch innerhalb eines Zweigs aus). Schreiben Sie es auf oberster Ebene. Nicht unterstützte dev_* führen zu einem Fehler.

Zum Ausprobieren: Über File ▸ dev_* visualization demo lässt sich ein HDevelop-Programm laden und ausführen, das tatsächlich das coins-Bild sowie die obigen dev_* verwendet (Segmentierung → Regionen mit cyanfarbener Kontur + Beschriftung dargestellt). Die Beispielbilder dafür liegen unter File ▸ Sample images (8 Stück, Herkunft siehe studio_assets/sample_images/manifest.json. Synthetische Bilder = eigene Arbeit / coins · camera usw. = BSD-/Public-Domain-Material aus skimage.data. Mit tools/gen_sample_images.py neu erzeugbar).


Mehrsprachigkeit (en / ja / zh, tabellengesteuert)

Die Oberflächensprache lässt sich über Tools ▸ Language / 言語 / 语言 umschalten (wird gespeichert). Die Übersetzungen sind zentral in studio_assets/i18n.json als Tabelle abgelegt und können ohne Codeänderung erweitert werden:

Die Operatorhilfe wird sprachspezifisch angezeigt, sofern op_help/<name>.<lang>.html existiert. Ehrlich gesagt: Zur Laufzeit wechselnde Statustexte (running… / PASS usw.) sowie der Fließtext der Operator-Hinweise sind derzeit nicht Teil der Übersetzung (die Übersetzung der Operator-Hinweise ins Englische ist eine künftige Aufgabe, gekoppelt an eine zweisprachige Version der Docstrings).

Python-Editor und IDE-Funktionen (2026-08-30)

Studio geht über die Phase hinaus, in der “Code nur aus der Pipeline heraus aufgerufen werden kann”, und lässt sich auch als Python-Entwicklungsumgebung nutzen.

Zusammenhang zwischen Export und Save/Open

Eine in Studio aufgebaute Pipeline lässt sich in 3 Formen mitnehmen.

Form Ausgabe über Einsatz
--ops-String Export (Strg+E) zum Einfügen in imgevolve.py pipeline --ops "…" / run "…" der CLI
Python-Funktion Export (Strg+E) zum Einbetten als fullseye.run_pipeline(...) im eigenen Code
JSON Save pipeline (Strg+Umschalt+S) zur Ausführung mit FullseyeEngine.load(...) / imgevolve.py run pipeline.json

Der zu HDevelop→HDevEngine äquivalente Ablauf “Entwurf in Studio, Ausführung in Code/CLI” läuft über das JSON. Für die Seite, die das JSON entgegennimmt und ausführt, siehe ENGINE.md.


Verwandte Dokumente