# aioscout/google-teachable-machine-tflite-model-training architecture

> Architecture diagram of the GitHub repository aioscout/google-teachable-machine-tflite-model-training, 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/aioscout/google-teachable-machine-tflite-model-training
- Repository: https://github.com/aioscout/google-teachable-machine-tflite-model-training

## Overview

This repository combines an ESP32-P4 camera capture and Teachable Machine upload workflow with a separate on-device inference/control path. The documented training flow is camera frames over serial to a Processing preview/bridge, then WebSockets to Teachable Machine. The inference sketch, camera PoC, and training platform are described in the README but their implementation was not sampled, so their internal wiring is shown only where documentation supports it.

Main entry points: [`TFLite`](https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/TFLite) (Camera inference and saving), [`S3_UART_Receiver/S3_UART_Receiver.ino`](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/S3_UART_Receiver/S3_UART_Receiver.ino) (S3 inference receiver), [`TMConnector/TM_Connector/TM_Connector.pde`](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/TMConnector/TM_Connector/TM_Connector.pde) (Serial preview bridge), [`ESP32-P4-IMX219-PoC`](https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/ESP32-P4-IMX219-PoC) (P4 camera PoC)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture_training["Capture and training"]
  node_p4_poc["P4 camera PoC"]
  node_tm_connector["Serial preview bridge<br/>[TM_Connector.pde]"]
  node_ai_training["Local training platform"]
  node_tm_uploader["Camera image provider<br/>[ImageProvider.cpp]"]
end

subgraph group_inference_control["Inference and control"]
  node_tflite["Camera inference and saving"]
  node_s3_receiver["S3 inference receiver"]
  node_model_settings["Labels and class types<br/>[model_settings.cpp]"]
  node_image_provider_api["Image and crop interface<br/>[image_provider.h]"]
end

subgraph group_frame_storage["Frame storage"]
  node_sd_reader["SD_MMC test<br/>[SDReader.ino]"]
  node_ffat_reader["FFat export and clean<br/>[FFatReader.ino]"]
  node_export_script["Serial file receiver<br/>[export_ffat.py]"]
end

subgraph group_device_platform["Device platform"]
  node_arduino_core["Customized Arduino core"]
end

node_operator(("Operator"))
node_camera(("IMX219 camera"))
node_teachable_machine["Teachable Machine"]
node_sd_storage[("MicroSD storage")]
node_ffat_storage[("FFat storage")]

node_camera -->|"captures frames"| node_p4_poc
node_p4_poc -->|"sends serial frames"| node_tm_connector
node_tm_connector -->|"forwards via WebSockets"| node_teachable_machine
node_operator -->|"selects serial port"| node_tm_connector
node_operator -->|"starts training"| node_teachable_machine
node_operator -->|"uses platform"| node_ai_training
node_camera -->|"provides frames"| node_tm_uploader
node_camera -->|"supplies images"| node_tflite
node_tflite -->|"sends inference packets"| node_s3_receiver
node_s3_receiver -->|"sends control commands"| node_tflite
node_s3_receiver -->|"uses labels and types"| node_model_settings
node_tflite -->|"uses image interface"| node_image_provider_api
node_tflite -.->|"writes frames"| node_sd_storage
node_tflite -.->|"writes frames"| node_ffat_storage
node_sd_reader -->|"tests access"| node_sd_storage
node_ffat_reader -->|"exports or cleans"| node_ffat_storage
node_export_script -->|"requests and receives files"| node_ffat_reader
node_arduino_core -.->|"provides camera support"| node_tflite

click node_p4_poc "https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/ESP32-P4-IMX219-PoC"
click node_tm_connector "https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/TMConnector/TM_Connector/TM_Connector.pde"
click node_ai_training "https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/AItraining"
click node_tm_uploader "https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/TMUploader/TM_Uploader/ImageProvider.cpp"
click node_tflite "https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/TFLite"
click node_s3_receiver "https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/S3_UART_Receiver/S3_UART_Receiver.ino"
click node_model_settings "https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/S3_UART_Receiver/model_settings.cpp"
click node_image_provider_api "https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/S3_UART_Receiver/image_provider.h"
click node_sd_reader "https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/SDReader/SDReader.ino"
click node_ffat_reader "https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/FFatReader/FFatReader.ino"
click node_export_script "https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/FFatReader/export_ffat.py"
click node_arduino_core "https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/arduino"

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_p4_poc,node_tm_connector,node_ai_training,node_tm_uploader toneBlue
class node_tflite,node_s3_receiver,node_model_settings,node_image_provider_api,node_sd_storage,node_ffat_storage toneAmber
class node_sd_reader,node_ffat_reader,node_export_script toneMint
class node_arduino_core toneRose
class node_operator,node_camera,node_teachable_machine toneIndigo
```

## Components

### Capture and training

- [P4 camera PoC](https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/ESP32-P4-IMX219-PoC): `ESP32-P4-IMX219-PoC`
- [Serial preview bridge](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/TMConnector/TM_Connector/TM_Connector.pde): `TMConnector/TM_Connector/TM_Connector.pde`
- [Local training platform](https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/AItraining): `AItraining`
- [Camera image provider](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/TMUploader/TM_Uploader/ImageProvider.cpp): `TMUploader/TM_Uploader/ImageProvider.cpp`

### Inference and control

- [Camera inference and saving](https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/TFLite): `TFLite`
- [S3 inference receiver](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/S3_UART_Receiver/S3_UART_Receiver.ino): `S3_UART_Receiver/S3_UART_Receiver.ino`
- [Labels and class types](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/S3_UART_Receiver/model_settings.cpp): `S3_UART_Receiver/model_settings.cpp`
- [Image and crop interface](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/S3_UART_Receiver/image_provider.h): `S3_UART_Receiver/image_provider.h`

### Frame storage

- [SD_MMC test](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/SDReader/SDReader.ino): `SDReader/SDReader.ino`
- [FFat export and clean](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/FFatReader/FFatReader.ino): `FFatReader/FFatReader.ino`
- [Serial file receiver](https://github.com/aioscout/google-teachable-machine-tflite-model-training/blob/main/FFatReader/export_ffat.py): `FFatReader/export_ffat.py`

### Device platform

- [Customized Arduino core](https://github.com/aioscout/google-teachable-machine-tflite-model-training/tree/main/arduino): `arduino`

### Other components

- **Operator**
- **IMX219 camera**
- **Teachable Machine**
- **MicroSD storage**
- **FFat storage**

## Connections

- IMX219 camera → P4 camera PoC: captures frames
- P4 camera PoC → Serial preview bridge: sends serial frames
- Serial preview bridge → Teachable Machine: forwards via WebSockets
- Operator → Serial preview bridge: selects serial port
- Operator → Teachable Machine: starts training
- Operator → Local training platform: uses platform
- IMX219 camera → Camera image provider: provides frames
- IMX219 camera → Camera inference and saving: supplies images
- Camera inference and saving → S3 inference receiver: sends inference packets
- S3 inference receiver → Camera inference and saving: sends control commands
- S3 inference receiver → Labels and class types: uses labels and types
- Camera inference and saving → Image and crop interface: uses image interface
- Camera inference and saving → MicroSD storage: writes frames
- Camera inference and saving → FFat storage: writes frames
- SD_MMC test → MicroSD storage: tests access
- FFat export and clean → FFat storage: exports or cleans
- Serial file receiver → FFat export and clean: requests and receives files
- Customized Arduino core → Camera inference and saving: provides camera support
