# arifcandemirci/vision_from_scratch architecture

> Architecture diagram of the GitHub repository arifcandemirci/vision_from_scratch, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/arifcandemirci/vision_from_scratch
- Repository: https://github.com/arifcandemirci/vision_from_scratch

## Overview

Vision From Scratch is a staged computer-vision project, progressing from live color segmentation through contour tracking to a multithreaded C++ camera pipeline. The workflow acquires camera frames, segments a color target, selects and smooths detections, then displays annotated video; the final stage also transports frames through bounded queues and reports timing and drop metrics. The graph distinguishes the standalone learning stages from Stage 04’s capture, processing, and display workers. Stage README capabilities are included, but only sampled source supports detailed Stage 04 wiring.

Main entry points: [`stage04_realtime_pipeline/pipeline.hpp`](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/pipeline.hpp) (Pipeline Orchestrator), [`stage04_realtime_pipeline/main.cpp`](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/main.cpp) (Pipeline Entry), [`stage04_realtime_pipeline/frame_queue.hpp`](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/frame_queue.hpp) (Capture Queue), [`stage01_color_segmentation/color_segmentation.py`](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage01_color_segmentation/color_segmentation.py) (Color Segmentation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_python_basics["Python Vision"]
  node_py_seg["Color Segmentation"]
  node_py_track["Contour Tracking<br/>[color_tracking.py]"]
end

subgraph group_cpp_seg["C++ Segmentation"]
  node_cpp_segmentation["ROI Segmentation"]
end

subgraph group_realtime["Realtime Pipeline"]
  node_entry["Pipeline Entry<br/>[main.cpp]"]
  node_pipeline["Pipeline Orchestrator<br/>[pipeline.hpp]"]
  node_tracker["Color Tracker<br/>[color_tracker.cpp]"]
  node_display["Overlay and Display<br/>[pipeline.hpp]"]
end

subgraph group_runtime_state["Pipeline State"]
  node_capture_queue["Capture Queue<br/>[frame_queue.hpp]"]
  node_display_queue["Display Queue<br/>[frame_queue.hpp]"]
  node_packet["Frame Metadata<br/>[frame_packet.hpp]"]
end

node_user(("Operator"))
node_camera(("Camera"))

node_user -->|"starts"| node_py_seg
node_camera -->|"supplies frames"| node_py_seg
node_user -->|"starts"| node_py_track
node_camera -->|"supplies frames"| node_py_track
node_user -->|"starts"| node_cpp_segmentation
node_camera -->|"supplies frames"| node_cpp_segmentation
node_user -->|"starts and stops"| node_entry
node_entry -->|"starts and stops"| node_pipeline
node_camera -->|"supplies frames"| node_pipeline
node_pipeline -->|"pushes frames"| node_capture_queue
node_capture_queue -->|"provides frames"| node_pipeline
node_pipeline -->|"processes frame"| node_tracker
node_pipeline -->|"pushes processed frames"| node_display_queue
node_display_queue -->|"provides frames"| node_pipeline
node_pipeline -->|"draws and displays"| node_display
node_pipeline -->|"records frame timing"| node_packet
node_display -->|"shows video and metrics"| node_user

click node_py_seg "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage01_color_segmentation/color_segmentation.py"
click node_py_track "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage02_tracking/color_tracking.py"
click node_cpp_segmentation "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage03_cpp_segmentation/cpp_segmentation.cpp"
click node_entry "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/main.cpp"
click node_pipeline "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/pipeline.hpp"
click node_tracker "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/color_tracker.cpp"
click node_capture_queue "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/frame_queue.hpp"
click node_display_queue "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/frame_queue.hpp"
click node_packet "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/frame_packet.hpp"
click node_display "https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/pipeline.hpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_py_seg,node_py_track toneBlue
class node_cpp_segmentation toneAmber
class node_entry,node_pipeline,node_tracker,node_display toneMint
class node_capture_queue,node_display_queue,node_packet toneRose
class node_user,node_camera toneIndigo
```

## Components

### Python Vision

- [Color Segmentation](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage01_color_segmentation/color_segmentation.py): `stage01_color_segmentation/color_segmentation.py`
- [Contour Tracking](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage02_tracking/color_tracking.py): `stage02_tracking/color_tracking.py`

### C++ Segmentation

- [ROI Segmentation](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage03_cpp_segmentation/cpp_segmentation.cpp): `stage03_cpp_segmentation/cpp_segmentation.cpp`

### Realtime Pipeline

- [Pipeline Entry](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/main.cpp): `stage04_realtime_pipeline/main.cpp`
- [Pipeline Orchestrator](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/pipeline.hpp): `stage04_realtime_pipeline/pipeline.hpp`
- [Color Tracker](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/color_tracker.cpp): `stage04_realtime_pipeline/color_tracker.cpp`
- [Overlay and Display](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/pipeline.hpp): `stage04_realtime_pipeline/pipeline.hpp`

### Pipeline State

- [Capture Queue](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/frame_queue.hpp): `stage04_realtime_pipeline/frame_queue.hpp`
- [Display Queue](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/frame_queue.hpp): `stage04_realtime_pipeline/frame_queue.hpp`
- [Frame Metadata](https://github.com/arifcandemirci/vision_from_scratch/blob/main/stage04_realtime_pipeline/frame_packet.hpp): `stage04_realtime_pipeline/frame_packet.hpp`

### Other components

- **Operator**
- **Camera**

## Connections

- Operator → Color Segmentation: starts
- Camera → Color Segmentation: supplies frames
- Operator → Contour Tracking: starts
- Camera → Contour Tracking: supplies frames
- Operator → ROI Segmentation: starts
- Camera → ROI Segmentation: supplies frames
- Operator → Pipeline Entry: starts and stops
- Pipeline Entry → Pipeline Orchestrator: starts and stops
- Camera → Pipeline Orchestrator: supplies frames
- Pipeline Orchestrator → Capture Queue: pushes frames
- Capture Queue → Pipeline Orchestrator: provides frames
- Pipeline Orchestrator → Color Tracker: processes frame
- Pipeline Orchestrator → Display Queue: pushes processed frames
- Display Queue → Pipeline Orchestrator: provides frames
- Pipeline Orchestrator → Overlay and Display: draws and displays
- Pipeline Orchestrator → Frame Metadata: records frame timing
- Overlay and Display → Operator: shows video and metrics
