fullseye

Fullseye Studio 완전 가이드

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

Fullseye Studio는 HDevelop풍의 시각적 파이프라인 워크벤치입니다. 연산자를 검색해 배치하고, 2개의 다이얼을 슬라이더로 돌리고, 중간 결과를 확대/축소·패닝하며 한 단계씩 실행하고, 완성된 파이프라인을 --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)

드롭다운에서 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 () 위 항목 전체를 일괄 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) 소프트 연산자 타임아웃(느린 단계를 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, 표 기반)

UI 언어는 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를 참조하세요.


관련 문서