AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A web page for trying out and comparing computer vision models right in the browser.
On the same screen you can choose "run in the browser" (WebGPU / WASM on your device) or "run on the server", and see inference time, fps, and a per-stage breakdown. That makes it easy to check how far a model actually goes on a phone or a laptop.
Open it at https://yoshiri.github.io/cv-playground/ (no server; browser-only models; works on phones).README 전문 보기 ↗English | 日本語
A web page for trying out and comparing computer vision models right in the browser. On the same screen you can choose "run in the browser" (WebGPU / WASM on your device) or "run on the server", and see inference time, fps, and a per-stage breakdown. That makes it easy to check how far a model actually goes on a phone or a laptop.
Open it at https://yoshiri.github.io/cv-playground/ (no server; browser-only models; works on phones).
The UI is in English or Japanese: it follows your browser's language, and the button at the top switches it (remembered per browser; ?lang=en / ?lang=ja in the URL also works). The developer docs under docs/ are in Japanese.
| Human pose + tracking (YOLO26n-pose + ByteTrack, with IDs and trails) | Object detection (YOLO26n) | Hands and eyes (PINTO's DEIMv2 + OCEC eye open/closed) |
| Semantic segmentation (EoMT DINOv3, ADE20K) | Panoptic segmentation (EoMT DINOv3, COCO; each chair and desk separately) | Promptable segmentation (SAM 2.1, clicked person) |
| Segment everything (EdgeTAM, from a 144-point grid) | Depth estimation (Depth Anything 3, also estimates the field of view) | Text-prompted object detection (Grounding DINO, "orange, lemon") |
| Zero-shot classification (SigLIP2) | Background removal (BiRefNet lite) | Faces + expressions (YuNet + HSEmotion; expression, valence V and arousal A) |
| Template matching (XFeat + RANSAC; the shelf cut from an earlier frame, found again with people in front) | Go / stop (detection + depth + scene judgment; stops with the reason) |
The demo frames come from intel-iot-devkit/sample-videos (CC BY 4.0).
| Category | Tab | What it does |
|---|---|---|
| Detection & tracking | Object detection | 80 COCO classes (YOLO26, RF-DETR), with tracking on video and camera |
| Human pose | 17 keypoints, with tracking | |
| Face | YuNet with 5 landmarks; cropped faces classified by HSEmotion into 8 expressions plus valence and arousal | |
| Hands & eyes (PINTO) | PINTO's ultra-light models: body, head, face, eyes, hands, plus eye open/closed, pointing and waving | |
| Gestures (pose + PINTO) | Both run on each frame: hand raised, face direction, eyes closed, pointing, per person | |
| Text-prompted detection | Grounding DINO with English nouns | |
| Template matching | Drag a box (or pick an image) and find it with XFeat keypoint matches and a homography; matches can be drawn as lines | |
| Video stabilization | Frame-to-frame motion from XFeat, re-rendered along a smoothed (or locked) camera path; jitter before and after as numbers and a graph | |
| Segmentation | Promptable (SAM) | SAM 2.1 / SAM 3 / EdgeTAM: click points, or segment everything from a grid |
| Semantic / Panoptic | SegFormer / EoMT (ADE20K), DETR / EoMT (COCO panoptic, each object separately) | |
| Background removal | BiRefNet | |
| Depth & 3D | Depth estimation | Depth Anything V2 / 3 |
| Approach / recede | Detection + depth: a small Kalman filter per track classifies approaching or receding, estimates time to contact and counts per class | |
| 3D pose | Pose + depth: a rotating skeleton with depth | |
| Go / stop | Detection, depth and a scene judgment on the same frame; stops when something is ahead, approaching, too close, or the scene is judged blocked, and shows why | |
| Vision & language | Zero-shot classification | SigLIP2; also yes/no judgments (see below) |
| Captioning & VQA | SmolVLM / Qwen3-VL, or any image-capable model on Ollama (server) |
| Layer | What it does |
|---|---|
| Judgments | Yes/no phrases such as Passable | Blocked or Safe | Dangerous in the zero-shot tab are overlaid on the image; on video they are smoothed over time (with hysteresis) and changes are logged. Go / stop combines them with detection and depth |
| Applications | Add-ons for any tab that returns boxes: counting per class (current count and, with tracking, a cumulative count of IDs), and line crossing (draw a line on the image; counts how many tracks cross it, per direction and class, and streams each crossing as an event). ?apps=count,line turns them on from the start |
| Interaction | Streams results out in a fixed frame format: to other tabs (BroadcastChannel) or over WebSocket (the server relays it at /ws; see tools/ws_receiver.py), so other tools can use the page as a browser-based vision sensor. web/receiver.html shows the incoming frames, and a Live2D-style character that follows the largest person serves as a visual check. ?interact=broadcast,websocket,puppet turns them on from the start |
?profile=1 also gives per-operator GPU time for generic ONNX models (see docs/NOTES.md)models/mirror/, so other devices on the same tailnet/LAN, or a device whose cache was cleared, load them from the server instead of the internet (?mirror=0 turns this off). The result panel shows where the model was loaded from (browser cache, server, or download)web/)| Form | What it is | Differences |
|---|---|---|
| Server | server.py serves web/ plus the API | Server-side models (on a Mac, etc.) are also available. COOP/COEP headers enable multi-threaded WASM |
| Static | GitHub Pages or any static host serves web/ as is | The API is unreachable, so only browser models. Multi-threaded WASM is enabled by the bundled coi-serviceworker |
| Single file | dist/cv-playground.html, built by python3 build.py | Just open the file (works from file://). Browser models only; single-threaded WASM |
The page detects at runtime whether a server is present (whether api/models responds).
uv venv --python 3.12 .venv && uv pip install --python .venv/bin/python -r requirements.txt
cp .env.example .env # per-environment settings (optional; .env is not committed)
scripts/serve.sh # http://127.0.0.1:8010 (--bg to run in the background)
tailscale serve --bg --https=8443 http://127.0.0.1:8010tools/export_yolo26_dynamic.py (the weights are AGPL, so they are not in the repo and only the server serves them)Environment variables (.env)
| Variable | Meaning | Default |
|---|---|---|
CVPG_PORT | Port to listen on | 8010 |
CVPG_MAX_LOADED | Number of server models kept loaded at once | 3 |
CVPG_OLLAMA_MODEL | Model used by the "Ollama VLM" entry | qwen3-vl:8b |
OLLAMA_HOST_URL | Ollama URL | http://127.0.0.1:11434 |
CVPG_GPU_LOCK | If this file exists, the page shows "GPU is in use by another process" (optional) | none |
| What you want to do | Docs (Japanese) |
|---|---|
| Add a model (browser / server) | docs/ADDING_MODELS.md |
| Add tabs, settings fields, or result views | docs/ADDING_UI.md |
| How it works, measurements, findings | docs/NOTES.md |
| Future work | docs/TODO.md |
In most cases, adding one entry to web/models.json is enough (for plain ONNX models, even pre/post-processing is composed in JSON).
| File | Role |
|---|---|
web/models.json | Definitions of tabs (tasks) and models, shared by browser and server |
web/app.js | UI, continuous video/camera runs, wiring for tracking and cascades, run history, benchmark |
web/renderers.js | How each result kind is shown (boxes, masks, depth, segment maps, labels, text) |
web/judge.js | Judgments: yes/no from zero-shot scores, smoothing and hysteresis over time, and the go / stop conditions |
web/i18n.js, web/i18n_en.js | UI language. Japanese is the source text; English comes from a dictionary (exact strings, patterns with numbers, and phrases) applied to the page as it changes, plus *_en fields in models.json |
web/apps.js | Applications added on top of a tab's results (stateful aggregation across frames and its overlay, e.g. counting) |
web/interact.js | Interaction layer: the fixed frame format, outputs (BroadcastChannel, WebSocket) and the Live2D-style character |
web/receiver.html | A receiver page that shows the streamed frames (debugging) |
web/export.js | Image saving, result data, run-record export (CSV / JSON / Markdown), device info, statistics |
web/worker.js | Browser-side adapters (Web Workers; separate workers for onnxruntime-web and transformers.js) |
web/onnx_generic.js | Browser-side generic ONNX (pre/post-processing blocks) |
web/tracker.js | ByteTrack / BoT-SORT (+ ReID) |
adapters.py | Server-side adapters (the generic ONNX blocks mirror onnx_generic.js) |
server.py | FastAPI. Serves web/, /api/run, /api/status, /api/unload, /local-models/, /mirror/ (a disk cache of model files and sample videos) and /ws (the WebSocket relay for Interaction) |
build.py | Builds the single-file version (a stale build is caught by ) |
The code is under the MIT License (LICENSE). Model weights are generally not bundled; they are fetched from each distributor at runtime. Check each model's license with its distributor (e.g., YOLO26 is AGPL-3.0 from Ultralytics).
The exception is web/pinto/, which bundles models from PINTO_model_zoo (MIT) with attribution. Sample images (street, soccer, person, face, airport) are loaded at runtime from Xenova/transformers.js-docs on Hugging Face, and sample videos (corridor, parking lot, walking faces, store aisle, classroom) from intel-iot-devkit/sample-videos (CC BY 4.0, credited on the page); neither is stored in the repo. The README demo images are frames from intel-iot-devkit/sample-videos (CC BY 4.0) with results overlaid.
.github/workflows/check-dist.ymlweb/pinto/ | Bundled models from PINTO_model_zoo (MIT) |
web/stabilize.js | Video stabilization on the page side (camera path, smoothing, cropping, jitter metrics) |
web/xfeat_gpu.js | XFeat post-processing on the GPU (WebGPU compute shaders reading the model's output buffers directly) |
web/xfeat.js | XFeat post-processing and template matching (keypoints, descriptors, mutual nearest neighbours, homography; same steps as adapters.py on the server) |
tools/ | Tracker comparison against Ultralytics, YOLO26 export, fetching model file SHA-256 hashes, XFeat comparison against kornia and OpenCV (xfeat_check.py, needs requirements-dev.txt) |