fullseye

Fullseye Studio 完全ガイド

目的を検索すると、候補は現在の入力に使えるもの、前処理が必要なもの、その他に分かれます。候補は処理列へ追加せず一度だけ試せます。実行に失敗したときはProblems欄に原因・場所・次の操作が表示され、入力の選び直し、前後比較、詳細ログ、つまみ編集、候補段の検索へ進めます。

重い処理は画面を止めずに実行されます。下部には実行中の段と進捗が表示され、停止要求は現在の段が終わった境界で受理されます。実行中に設定を変えた場合は、表示結果の世代と現在設定の違いを示し、完了した旧設定の結果を見るか、現在設定で実行し直すかを選べます。

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

このガイドは studio.py(build_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)

ドロップダウンから 25 個の既製レシピ(recipes.py)を選ぶと、パイプラインがそのレシピに置き換わります。例: 「Edge — Sobel + Otsu」「Denoise — bilateral + unsharp」「Segment — blob / coin」「Count — blobs」「Texture — Gabor」など。まず動かして中身を見る出発点に便利です。「FA — 」で始まる 5 個は外観検査用で、それぞれ対になるサンプル画像(下記)で欠陥を拾えることをテストで確かめてあります。

オペレータ・ブラウザ(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.py の act_* 定義より):

操作 ショートカット 操作 ショートカット
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
Image Viewer Ctrl+Shift+I Run a ledger op Ctrl+Shift+L
Pipeline as code → editor Ctrl+Shift+E    

各アクションはメニュー・ツールバー・ボタンのいずれからも同じハンドラで呼ばれます(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(16 枚・provenance は studio_assets/sample_images/manifest.json。 合成 = own work / coins・camera 等 = skimage.data の BSD/public-domain。tools/gen_sample_images.py で再生成)。うち 5 枚は外観検査(FA)用で、写真ではなく照明と反射の物理計算(illumdesign)と PoC の撮像モデルで作ったもの: ヘアライン金属の傷・樹脂の打痕と異物・刻印ロット番号・バックライトの穴あき プレート・溶接の X 線気孔。欠陥の真値マスク(<名前>.truth.png)と「何が写っているか」を manifest に 記録してあり、tools/gen_fa_samples.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 開発環境としても使えます。

ドラッグ・アンド・ドロップで開けるもの(2026-10-03)

ファイルやフォルダをメイン画面に落とすと、種類に合う窓が開きます(複数まとめて落とせば複数の窓)。 全種類の一覧は Help ▸ 開けるファイル(ドラッグ・アンド・ドロップ)… にあります。その表は Studio が 実際に使う拡張子の定数から作るので、この節より新しいことがあります。

落とすもの 開く先 補足
画像(png / jpg / tif / webp / pgm / pfm / jp2 …)・フォルダ 画像ビューア 一覧・拡大・画素値・ヒストグラム・「パイプラインの入力にする」。フォルダは直下の画像
.py Python エディタ(1 ファイル 1 タブ)  
.json パイプライン  
点群・メッシュ(PLY / STL / PCD / OBJ / OFF / XYZ) 3-D ビューア ASCII とバイナリの両方(PLY はリトル・ビッグエンディアンとも、PCD は binary_compressed も)
3DGS(.ply / .splat) 3-D ビューア 色は球面調和の DC 項、不透明度 0.05 未満は隠す
医用ボリューム(NIfTI / NRRD / MHA / DICOM) 3-D ビューア SimpleITK などが要る
glTF(.glb / .gltf)・LiDAR(.las / .laz) 3-D ビューア pygltflib / laspy が要る
ロボット(MJCF / URDF) 3-D ビューア .xml は根の要素が <mujoco> か <robot> の時だけ。mujoco が要る
モーションキャプチャ(.bvh)・神経細胞の形(.swc) 3-D ビューア BVH は関節の軌跡を時刻で色分け
動画・アニメーション GIF・HDF5 動画の立方体  
イベントカメラの (x, y, t, p)(txt / csv / npy / npz) 動画の立方体 中身で見分けて極性つきのコマに
.npy 形で振り分け 2-D → 入力画像、(N, 3 / 6) → 点群、3-D → ボリューム
Markdown・SVG 文書ビューア  
音声(wav / mp3 / flac / ogg …) 音声の窓 波形・スペクトログラム・再生。WAV 以外は soundfile
ロボットのモデル + qpos の .npy (T, nq) を一緒に ロボットの再生 スライダと再生ボタン

台帳の op を押して試す(Tools ▸ 台帳の op を実行…、Ctrl+Shift+L)(2026-10-03)

型つき台帳の op(PIV・数学・運転・3-D など ~1,700 本)を、引数の型に合った入力欄で走らせる窓です。 左の検索欄に名前か言葉(和文も可)を入れて op を選ぶと、右に引数のフォームが出ます。

見本で走らない op もあります(op ごとの見本の作り方の限界で、2026-10-03 の実測では 60 本中 27 本が見本のまま走る)。 窓の側が失敗を増やしていないことは、「見本を直接 op に渡した結果と一致する」門で確かめています。

CSV の列を表 op の入力へ割り当てる

型付き入力が table の op は、既存の台帳ランナーで CSV ファイル… を選べる。各役割は自由入力ではなく実在する列から選び、 ゲージ R&R では part / 部品 ID、operator / 測定者、value / 測定値 を割り当てる。行数、キーの種類数、欠測、反復数を確認し、 反復数が不均衡なら該当する組を名前つきで実行前に拒否する。自動補修はしない。割り当ては op とヘッダー署名(ソート済み列名と列数) ごとに保存するため、同じ形式だけで再利用する。CSV 自体は変更も改名もしない。

結果ビューの見せ方

画素にならない結果も、形に合わせて見せます(右パネルと上の窓で共通)。

結果 見せ方
flow2d (2, h, w) 色相 = 向き・明るさ = 速さの色相図の上に矢印図(最長の矢印 = 間隔の 0.9 倍)
1-D の数列 折れ線(MATLAB の plot(y))
表(dict) 同じ長さの数値の欄を重ねて折れ線。横軸は t / x / freq … の欄があればそれ
(h, w, 4) / (h, w, 1) / 複素数 白地に合成した RGB / 濃淡 / 絶対値 |z|
空の配列・4 次元以上 形と値域を文字で(先頭の 1 値を「スカラー」と見せない)

結果のキャッシュ・要確認の印・入力画像の参照(2026-10-19)

フォルダへ同じ処理を適用

Run ▸ この処理をフォルダに適用… では、入力フォルダと対象パターンを選び、先頭・中央・末尾または任意の1枚で結果を確認してから全件を実行できます。実行開始時に入力と処理列を一度だけ固定するため、途中でつまみを変更しても同じバッチの条件は変わりません。

同名ファイルは「上書きしない」「上書き」「連番を付ける」から選び、サブフォルダを対象にした場合は出力側にも同じ階層を作ります。summary.csv にはファイル名、状態、処理時間、数値出力、エラー理由が入ります。1枚の読込や処理に失敗しても残りは続行し、終了後に失敗したファイルと理由を一覧で確認できます。停止要求は現在の1枚が終わる境界で受理され、実際に止まるまでは「停止済み」と表示しません。

作業モードとパネル

上部の「処理を組む」「結果を比べる」「数値を調べる」「コードにする」を選ぶと、その作業に必要なパネルが大きく表示され、ほかは畳まれます。Ctrl+1~4でも切り替えられます。入力、処理手順、計算済みの結果は変わらず、各モードで手動調整したパネル配置も保たれます。F11の「画像だけ大きく」は一時表示で、Escを押すと直前の配置へ正確に戻ります。「パネルを探す…」では、日本語名や英語の別名から隠れたパネルを呼び出せます。

表示レンジと元データ

「各画像で自動」は画像ごと、「比較画像で共通」は A/B 全体、「手動」は入力した上下限を、値域を使う表示モードに適用します。値域を使わない「region overlay」では、その旨をラベルに表示します。「表示処理のみ」の注記どおり元データは変わりません。NaN と Inf はマゼンタ、範囲外は端の色で表示して画素数を警告します。保存時は「元の数値」「現在の表示画像」「両方」から選び、既定は元の数値です。

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 を参照してください。


関連ドキュメント