fullseye

Fullseye Studio 完全指南

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

Fullseye Studio 是一个类似 HDevelop 的可视化流水线工作台。你可以搜索并排列算子,用两个旋钮滑块调节参数,一边缩放/平移查看中间结果一边逐段执行,最终把搭建好的流水线导出为 --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) 调节。拖动数值会立即重新计算结果。未选中任何阶段时,滑块会被禁用(不让”无意义的旋钮”处于可用状态的设计)。

旋钮的含义因算子而异(半径 / 阈值 / σ / 方向等)。要调节的是什么,可通过阶段详情标签和工具提示确认。

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

每个操作无论从菜单、工具栏还是按钮触发,都会调用同一个处理函数(一个动作、多个入口)。


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 () 一次性将以上全部关闭 / 打开 工具栏 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) 软性算子超时(在 Run status 中警告执行慢的阶段) 同上
dev_set_draw ('fill'|'margin') 切换 region 叠加层的填充(fill)/ 轮廓(margin) View ▸ Display mode = region overlay
dev_set_color ('red'|'green'…) region 叠加层的颜色 同上
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 的性能技巧相同)。更新处于 关闭状态时,状态栏右侧会显示 updates off: …,因此冻结状态不会看起来”像是坏了”。 工具栏的 Auto-update 开关也能实现同样的切换。

注意(如实说明): 与流水线阶段不同,dev_* 不遵循 if/for,会无条件应用 (即使写在分支内部也会触发)。请写在顶层。未支持的 dev_* 会报错。

动手看看: 通过 File ▸ dev_* visualization demo,可以加载并执行一个实际使用 coins 图像 + 上述 dev_* 的 HDevelop 程序(分割→用青色轮廓+标签显示区域)。用于练习的示例图像位于 File ▸ Sample images(共 8 张,来源见 studio_assets/sample_images/manifest.json。 合成图像 = 自制作品/coins·camera 等 = 来自 skimage.data 的 BSD/公有领域素材。可用 tools/gen_sample_images.py 重新生成)。


多语言支持(en / ja / zh,表驱动)

界面语言可通过 Tools ▸ Language / 言語 / 语言 切换(会被记住)。译文统一存放在 studio_assets/i18n.json 这张表中,无需修改代码即可增加语言:

算子帮助如果存在 op_help/<name>.<lang>.html 就会按语言显示。如实说明: 运行中变化的状态文字(running… / PASS 等)以及算子备注正文目前 不在翻译范围内(算子备注的英文化是与 docstring 双语化配套的未来课题)。

Python 编辑器与 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


相关文档