# katekateline/yolo-car architecture

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

- Interactive diagram: https://gitdiagram.com/katekateline/yolo-car
- Repository: https://github.com/katekateline/yolo-car

## Overview

This Flask service accepts image uploads from Laravel and returns vehicle, color, plate, or QR results. The main workflow is upload and decode, then either QR scanning or vehicle detection with color analysis; vehicle crops may also be sent asynchronously to PlateRecognizer. Results are logged locally and can be posted back to Laravel. The README documents an optional Laravel callback and webcam capture mode. Source excerpts are partial, so uncertain internal steps are omitted.

Main entry points: [`yolo-service/app.py`](https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py) (Flask service), [`yolo-service/detector.py`](https://github.com/katekateline/yolo-car/blob/main/yolo-service/detector.py) (Vehicle detection), [`yolo-service/color_detector.py`](https://github.com/katekateline/yolo-car/blob/main/yolo-service/color_detector.py) (Color analysis), [`yolo-service/model_utils.py`](https://github.com/katekateline/yolo-car/blob/main/yolo-service/model_utils.py) (Model resolution)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API workflow"]
  node_flask["Flask service<br/>[app.py]"]
  node_image_decode["Upload decoding<br/>[app.py]"]
  node_response["JSON response<br/>[app.py]"]
end

subgraph group_analysis["Image analysis"]
  node_vehicle["Vehicle detection<br/>[detector.py]"]
  node_color["Color analysis<br/>[color_detector.py]"]
  node_qr["QR scanning<br/>[app.py]"]
  node_plate["Plate recognition<br/>[app.py]"]
  node_model_path["Model resolution<br/>[model_utils.py]"]
end

subgraph group_integrations["External integrations"]
  node_plate_api["PlateRecognizer"]
  node_callback["Laravel callback<br/>[app.py]"]
end

subgraph group_state["Runtime state"]
  node_analysis_log[("Analysis history")]
  node_latest[("Latest analysis")]
end

node_laravel(("Laravel app"))
node_webcam(("IP webcam"))

node_laravel -->|"uploads image"| node_flask
node_flask -->|"decodes upload"| node_image_decode
node_image_decode -->|"vehicle scan"| node_vehicle
node_image_decode -->|"QR scan"| node_qr
node_flask -->|"resolves model"| node_model_path
node_flask -->|"initializes detector"| node_vehicle
node_vehicle -->|"analyzes crop"| node_color
node_flask -->|"sends vehicle crop"| node_plate
node_plate -->|"recognizes plate"| node_plate_api
node_flask -->|"appends results"| node_analysis_log
node_flask -->|"updates results"| node_latest
node_flask -->|"builds result"| node_response
node_response -->|"returns JSON"| node_laravel
node_flask -.->|"dispatches optionally"| node_callback
node_callback -.->|"posts results"| node_laravel
node_webcam -.->|"provides frames"| node_flask

click node_flask "https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py"
click node_image_decode "https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py"
click node_response "https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py"
click node_vehicle "https://github.com/katekateline/yolo-car/blob/main/yolo-service/detector.py"
click node_color "https://github.com/katekateline/yolo-car/blob/main/yolo-service/color_detector.py"
click node_qr "https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py"
click node_plate "https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py"
click node_model_path "https://github.com/katekateline/yolo-car/blob/main/yolo-service/model_utils.py"
click node_callback "https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py"
click node_analysis_log "https://github.com/katekateline/yolo-car/blob/main/yolo-service/frame_analysis.jsonl"
click node_latest "https://github.com/katekateline/yolo-car/blob/main/yolo-service/latest_analysis.json"

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_flask,node_image_decode,node_response toneBlue
class node_vehicle,node_color,node_qr,node_plate,node_model_path toneAmber
class node_plate_api,node_callback toneMint
class node_analysis_log,node_latest toneRose
class node_laravel,node_webcam toneIndigo
```

## Components

### API workflow

- [Flask service](https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py): `yolo-service/app.py`
- [Upload decoding](https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py): `yolo-service/app.py`
- [JSON response](https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py): `yolo-service/app.py`

### Image analysis

- [Vehicle detection](https://github.com/katekateline/yolo-car/blob/main/yolo-service/detector.py): `yolo-service/detector.py`
- [Color analysis](https://github.com/katekateline/yolo-car/blob/main/yolo-service/color_detector.py): `yolo-service/color_detector.py`
- [QR scanning](https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py): `yolo-service/app.py`
- [Plate recognition](https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py): `yolo-service/app.py`
- [Model resolution](https://github.com/katekateline/yolo-car/blob/main/yolo-service/model_utils.py): `yolo-service/model_utils.py`

### External integrations

- **PlateRecognizer**
- [Laravel callback](https://github.com/katekateline/yolo-car/blob/main/yolo-service/app.py): `yolo-service/app.py`

### Runtime state

- [Analysis history](https://github.com/katekateline/yolo-car/blob/main/yolo-service/frame_analysis.jsonl): `yolo-service/frame_analysis.jsonl`
- [Latest analysis](https://github.com/katekateline/yolo-car/blob/main/yolo-service/latest_analysis.json): `yolo-service/latest_analysis.json`

### Other components

- **Laravel app**
- **IP webcam**

## Connections

- Laravel app → Flask service: uploads image
- Flask service → Upload decoding: decodes upload
- Upload decoding → Vehicle detection: vehicle scan
- Upload decoding → QR scanning: QR scan
- Flask service → Model resolution: resolves model
- Flask service → Vehicle detection: initializes detector
- Vehicle detection → Color analysis: analyzes crop
- Flask service → Plate recognition: sends vehicle crop
- Plate recognition → PlateRecognizer: recognizes plate
- Flask service → Analysis history: appends results
- Flask service → Latest analysis: updates results
- Flask service → JSON response: builds result
- JSON response → Laravel app: returns JSON
- Flask service → Laravel callback: dispatches optionally
- Laravel callback → Laravel app: posts results
- IP webcam → Flask service: provides frames
