# captainaai/grpcclientapp architecture

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

- Interactive diagram: https://gitdiagram.com/captainaai/grpcclientapp
- Repository: https://github.com/captainaai/grpcclientapp

## Overview

VisionClientApp is a Qt desktop camera-and-object-detection client. The principal workflow is: select a Triton server and ready model, capture a camera frame, prepare it for the model, run remote inference, post-process detections, and display the result. The sampled code shows the Qt/Python/OpenCV integration; some implementation details are omitted, so only documented and visible call relationships are drawn.

Main entry points: [`mainvision.cpp`](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp) (Main window), [`mainvision.ui`](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.ui) (Qt interface), [`main.cpp`](https://github.com/captainaai/grpcclientapp/blob/main/main.cpp) (Application startup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop application"]
  node_ui["Qt interface<br/>[mainvision.ui]"]
  node_entry["Application startup<br/>[main.cpp]"]
  node_window["Main window<br/>[mainvision.cpp]"]
end

subgraph group_vision["Vision workflow"]
  node_camera["Camera capture<br/>[mainvision.cpp]"]
  node_frame_prep["Frame preparation<br/>[mainvision.cpp]"]
  node_display["Frame display<br/>[mainvision.cpp]"]
  node_postprocess["Detection post-processing<br/>[mainvision.cpp]"]
  node_result["Detection result<br/>[mainvision.cpp]"]
end

subgraph group_remote["Remote inference"]
  node_python["Embedded Python<br/>[mainvision.cpp]"]
  node_server_select["Server connection<br/>[mainvision.cpp]"]
  node_model_select["Model selection<br/>[mainvision.cpp]"]
  node_triton_client["Triton client<br/>[mainvision.cpp]"]
  node_model_repo["Model repository<br/>[mainvision.cpp]"]
  node_infer["Inference request<br/>[mainvision.cpp]"]
end

node_user(("User"))
node_camera_device(("Camera device"))
node_triton(("Triton server"))

node_user -->|"operates"| node_ui
node_entry -->|"creates"| node_window
node_window -->|"sets up"| node_ui
node_window -->|"initializes"| node_python
node_window -->|"opens"| node_camera
node_camera -->|"reads frames"| node_camera_device
node_window -->|"updates"| node_camera
node_window -->|"handles selection"| node_server_select
node_server_select -->|"calls connect"| node_python
node_python -->|"uses"| node_triton_client
node_triton_client -->|"connects"| node_triton
node_python -->|"queries"| node_model_repo
node_model_repo -->|"reads model status"| node_triton
node_window -->|"handles selection"| node_model_select
node_model_select -->|"calls select_model"| node_python
node_python -->|"checks readiness and metadata"| node_triton
node_window -->|"prepares captured frame"| node_frame_prep
node_frame_prep -->|"passes model input"| node_infer
node_window -->|"calls runInference"| node_infer
node_infer -->|"calls infer"| node_python
node_python -->|"sends inference"| node_triton
node_python -->|"decodes predictions"| node_postprocess
node_postprocess -->|"produces detections"| node_result
node_window -->|"shows frames and results"| node_display
node_display -->|"updates viewer"| node_ui

click node_ui "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.ui"
click node_entry "https://github.com/captainaai/grpcclientapp/blob/main/main.cpp"
click node_window "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_camera "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_frame_prep "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_display "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_python "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_server_select "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_model_select "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_triton_client "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_model_repo "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_infer "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_postprocess "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"
click node_result "https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp"

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_ui,node_entry,node_window,node_user toneBlue
class node_camera,node_frame_prep,node_display,node_postprocess,node_result toneAmber
class node_python,node_server_select,node_model_select,node_triton_client,node_model_repo,node_infer,node_triton toneMint
class node_camera_device toneIndigo
```

## Components

### Desktop application

- [Qt interface](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.ui): `mainvision.ui`
- [Application startup](https://github.com/captainaai/grpcclientapp/blob/main/main.cpp): `main.cpp`
- [Main window](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`

### Vision workflow

- [Camera capture](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Frame preparation](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Frame display](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Detection post-processing](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Detection result](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`

### Remote inference

- [Embedded Python](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Server connection](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Model selection](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Triton client](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Model repository](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`
- [Inference request](https://github.com/captainaai/grpcclientapp/blob/main/mainvision.cpp): `mainvision.cpp`

### Other components

- **User**
- **Camera device**
- **Triton server**

## Connections

- User → Qt interface: operates
- Application startup → Main window: creates
- Main window → Qt interface: sets up
- Main window → Embedded Python: initializes
- Main window → Camera capture: opens
- Camera capture → Camera device: reads frames
- Main window → Camera capture: updates
- Main window → Server connection: handles selection
- Server connection → Embedded Python: calls connect
- Embedded Python → Triton client: uses
- Triton client → Triton server: connects
- Embedded Python → Model repository: queries
- Model repository → Triton server: reads model status
- Main window → Model selection: handles selection
- Model selection → Embedded Python: calls select_model
- Embedded Python → Triton server: checks readiness and metadata
- Main window → Frame preparation: prepares captured frame
- Frame preparation → Inference request: passes model input
- Main window → Inference request: calls runInference
- Inference request → Embedded Python: calls infer
- Embedded Python → Triton server: sends inference
- Embedded Python → Detection post-processing: decodes predictions
- Detection post-processing → Detection result: produces detections
- Main window → Frame display: shows frames and results
- Frame display → Qt interface: updates viewer
