fullseye

Fullseye Studio 完全ガイド

Fullseye Studio は、HDevelop 風のビジュアル・パイプライン・ワークベンチです。オペレータを検索して並べ、2 つのつまみをスライダーで回し、途中結果をズーム/パンで見ながら 1 段ずつ実行し、組み上がったパイプラインを --ops 文字列 / Python / JSON として書き出せます。実体は fullseye API の薄い GUI フロントで、パイプラインのロジック(PipelineModel)・Inspector(inspect_result)・サンプル集(recipes)はいずれも Qt 非依存で単体テストされています。

このガイドは studio.pybuild_window)を実コードに突き合わせて機能を列挙したものです。UX/デザインの意図は STUDIO_UX.md に、v14 の知覚パネルの背景は V14.md / PERCEPTION.md にあります。


起動方法

GUI extras(PySide6)が必要です(pip install -e ".[gui]")。

py -3.11 studio.py          # リポジトリ直下から直接
fullseye-studio             # pip install -e . 済みなら、コンソールスクリプトで

起動すると 1320×860 のメインウィンドウが開きます(タイトル: Fullseye Studio)。assets/fullseye.ico があればウィンドウ/タスクバーアイコンとして付きます。初期状態では合成デモ画像(demo_image、エッジ・ブロブ・グラデーションを含む 256×256)が読み込まれています。


画面構成(3 パネル)

上部に メニューバー(File / Edit / View / Run / Help)とブランドツールバー、下部に ステータスバー(ホバー時の座標+画素値、flash() の一時メッセージ)。中央は左右分割の 3 パネルです。

パネル セクション(QGroupBox) 役割
SAMPLE PIPELINES / OPERATORS サンプル読み込みとオペレータ・ブラウザ
中央 PIPELINE / SELECTED STAGE · KNOBS / EXPORT & I/O パイプライン構築・つまみ調整・書き出し
IMAGE / DISPLAY & PERCEPTION (v14) / ANALYSIS 結果表示・カラーマップ/知覚・ヒストグラム/Inspector

初期の分割幅は 340 / 360 / 640 px で、右パネルが伸縮します。


左パネル: Operators ブラウザ

サンプルパイプライン(SAMPLE PIPELINES)

ドロップダウンから 20 個の既製レシピ(recipes.py)を選ぶと、パイプラインがそのレシピに置き換わります。例: 「Edge — Sobel + Otsu」「Denoise — bilateral + unsharp」「Segment — blob / coin」「Count — blobs」「Texture — Gabor」など。まず動かして中身を見る出発点に便利です。

オペレータ・ブラウザ(OPERATORS)

挿入位置は「選択中の段の直後」。段を選んでいなければ末尾に追加されます。


中央パネル: パイプライン構築とステップ実行

PIPELINE(段の一覧)

各行は N. op (a=…, b=…) -> 結果の要約 の形で、その段まで実行した結果の状態(image/region/feature など)が右側に出ます。

段を選ぶと、その段までの途中結果が右の IMAGE パネルに描画され、下の ANALYSIS(ヒストグラム / Inspector)も同期します。これが「ステップスルー・デバッガ」に相当します。

SELECTED STAGE · KNOBS(つまみ調整)

選択中の段の詳細(op_detail: 名前・in → out sort・カテゴリ・HALCON エイリアス)を表示し、2 本のスライダー a / b(0.00〜1.00) で調整します。値を動かすと即座に結果が再計算されます。段を選んでいないときはスライダーは無効化されます(意味のないつまみは死んだ状態にしない設計)。

つまみの意味はオペレータごとに異なります(半径 / しきい値 / σ / 方向など)。何を調整しているかは段の詳細ラベルと tooltip で確認できます。

EXPORT & I/O


右パネル: 表示・知覚・解析

IMAGE(結果ビュー)

DISPLAY & PERCEPTION (v14)

ANALYSIS


Command palette(Ctrl+P)

Ctrl+P で、任意のアクションや任意のオペレータを名前で実行できるファジー検索ダイアログが開きます。先頭一致 > 単語先頭一致 > 部分一致の順にランク付け(palette_filter、Qt 非依存で単体テスト済み)。アクション(▸ Open image など)が先、続いて全オペレータ(op: gaussian など)が並び、Enter で実行します。キーボードだけでオペレータ挿入まで完結します。


キーボードショートカット

アプリ内では Help ▸ Keyboard shortcuts(F1) で全一覧が表で出ます(自己文書化)。主なもの(studio.pyact_* 定義より):

操作 ショートカット 操作 ショートカット
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

各アクションはメニュー・ツールバー・ボタンのいずれからも同じハンドラで呼ばれます(1 動作・複数入口)。


HDevelop dev_* 描画制御ディレクティブ

HDevelop と同様に、描画の挙動をプログラムから制御できます。Program ウィンドウの スクリプトに dev_* 行を書くと、画像ステージではなく表示ディレクティブとして解釈され、 Apply 時に適用されます(docs/HDEVELOP_DEV_OPS.md に全 43 dev_* の網羅把握)。

ディレクティブ 効果 対応 UI
dev_update_window ('off'|'on') グラフィクス窓の自動更新を切替 View ▸ Display updates ▸ Graphics window
dev_update_var ('off'|'on') 変数窓の自動更新を切替 〃 Variable window
dev_update_pc ('off'|'on') 実行カーソルの更新を切替 〃 Program counter
dev_update_time ('off'|'on') 行ごとの処理時間表示を切替 〃 Operator timings
dev_update_off () / dev_update_on () 上記すべてを一括で off / on ツールバー Auto-update トグル
dev_set_part (Row1, Col1, Row2, Col2) 表示範囲(ズーム/パン)を設定・負値=全体 マウスホイール/Fit と併用
dev_set_lut ('gray'|'jet'|'viridis'…) カラーマップ(LUT)を切替 View ▸ Display mode
dev_clear_window () カレント窓をクリア
set_system ('thread_num', N) OpenCV ワーカースレッド数(0=既定/全)を設定 Tools ▸ System settings
set_system ('operator_timeout', ms) ソフト operator タイムアウト(遅い段を Run status で警告)
dev_set_draw ('fill'|'margin') region overlay の塗り(fill)/ 輪郭(margin)切替 View ▸ Display mode = region overlay
dev_set_color ('red'|'green'…) region overlay の色
dev_set_line_width (N) margin の輪郭幅(px)
dev_disp_text ('label', Row, Col) 結果の上にテキスト注釈(次の描画/dev_clear_window で消える)
dev_open_window (Row, Col, W, H) グラフィクス窓を開いて配置しカレント化(再 Apply は同じ窓を再配置=増殖しない) Ctrl+G / Window ▸ Graphics
dev_set_window (Handle) カレント窓をハンドルで切替 窓クリック
dev_set_window_extents (Row, Col, W, H) カレント窓の位置・サイズ(-1=現状維持) 窓ドラッグ
dev_close_window () カレント窓を閉じる(常駐の主窓は保護) 窓の ×
set_system ('max_graphics_windows', N) 窓数の上限(既定 256・全経路 fail-closed) Tools ▸ System settings ▸ Windows

用途: dev_update_off () を先頭に置くと、重い処理や多数の編集を描画コストなしで行え、 dev_update_on () で現状態へ一括更新できます(HDevelop の性能テクニックと同じ)。更新が off の間はステータスバー右に updates off: … が出るため、凍結状態が「壊れて見える」ことは ありません。ツールバーの Auto-update トグルでも同じ切替ができます。

注意(honest): dev_* はパイプライン段と違い if/for に従わず無条件に適用されます (分岐内に置いても発火)。トップレベルに書いてください。未対応の dev_* はエラーになります。

動かして見る: File ▸ dev_* visualization demo で、coins 画像 + 上記 dev_* を実際に使う HDevelop プログラム(区分→領域を cyan の輪郭 + ラベルで表示)が読み込まれ適用されます。作業用の サンプル画像は File ▸ Sample images(8 枚・provenance は studio_assets/sample_images/manifest.json。 合成 = own work / coinscamera 等 = skimage.data の BSD/public-domain。tools/gen_sample_images.py で再生成)。


多言語対応(en / ja / zh、テーブル駆動)

UI の言語は Tools ▸ Language / 言語 / 语言 で切替(記憶されます)。対訳は studio_assets/i18n.json に一元化されたテーブルで、コード変更なしで追加できます:

op ヘルプは op_help/<name>.<lang>.html があれば言語別に出ます。honest 開示: 実行中に変化するステータス文言(running… / PASS 等)と op ノート本文は現状 翻訳対象外です(op ノートの英語化は docstring 二言語化とセットの将来課題)。

Python Editor と IDE 機能(2026-08-30)

Studio は「パイプラインからしかコードを呼べない」段階を越えて、Python 開発環境としても使えます。

Export と Save/Open の関係

Studio で組んだパイプラインは 3 つの形で持ち出せます。

形式 出し方 使いどころ
--ops 文字列 Export(Ctrl+E) CLI の imgevolve.py pipeline --ops "…" / run "…" に貼る
Python 関数 Export(Ctrl+E) 自分のコードに fullseye.run_pipeline(...) として埋め込む
JSON Save pipeline(Ctrl+Shift+S) FullseyeEngine.load(...) / imgevolve.py run pipeline.json で実行

設計は Studio、実行はコード/CLI という HDevelop→HDevEngine 相当の流れは、JSON を介して行います。JSON を受け取って実行する側は ENGINE.md を参照してください。


関連ドキュメント