66[ ![ License: MIT] ( https://img.shields.io/badge/License-MIT-green.svg )] ( LICENSE )
77![ CI] ( https://github.com/CahillMeyer/ccm-esp32-vision-node/actions/workflows/ci.yml/badge.svg )
88
9-
109Embedded camera node for ** ESP32-S3** with a modular C++ architecture for real-time computer vision.
1110This project demonstrates professional embedded CV engineering: camera bring-up, modular pipelines,
12- and efficient processing on low- power microcontrollers .
11+ efficient frame handling, and low‑ power vision processing .
1312
14- > ** Work-in- progress** : This repository is part of the CCMCode Embedded Vision toolkit and serves as
15- > a portfolio- quality example of modern ESP- IDF C++ development.
13+ > ** Work‑in‑ progress: ** Part of the CCM Code Embedded Vision toolkit.
14+ > Designed as a portfolio‑ quality example of clean, modern ESP‑ IDF C++ development.
1615
1716---
1817
@@ -23,24 +22,27 @@ and efficient processing on low-power microcontrollers.
2322- Fully compiling project with ESP32-S3 target under WSL Ubuntu
2423- C++ ` CameraNode ` component using the ` esp32-camera ` managed component
2524- Real-time FPS measurement with ` esp_timer `
25+ - Example: ** basic_fps_logger** (` examples/basic_fps_logger/ ` )
2626
2727### 🛠 In Progress
28- - C++ computer vision pipeline ( ` cv_pipeline ` )
29- - Frame timing and lightweight profiling utilities
28+ - ` cv_pipeline ` stages (grayscale, threshold, ROI operations )
29+ - Frame timing and per‑stage profiling utilities
3030- Clean, extensible class-based architecture for embedded CV
3131
3232### 📌 Planned
3333- Color blob detector (HSV thresholding)
34- - ROI extraction + simple pre-processing steps
35- - MJPEG or raw frame Wi- Fi streaming server
34+ - ROI extraction + pre-processing stages
35+ - MJPEG or raw frame Wi‑ Fi streaming server
3636- UART debug dashboard (FPS, memory, timings)
3737- Benchmarks across frame sizes & pixel formats
3838- Example: simple color-object tracker
3939
4040---
4141
4242## 🧱 Project Architecture
43- For a detailed component diagram and explanation, see [ docs/architecture.md] ( docs/architecture.md ) .
43+
44+ For full component documentation, see:
45+ 👉 ` docs/architecture.md `
4446
4547```
4648ccm-esp32-vision-node/
@@ -54,35 +56,57 @@ ccm-esp32-vision-node/
5456│
5557├── firmware/
5658│ ├── main/ # App entry point (main.cpp)
57- │ └── CMakeLists.txt # ESP-IDF project definition
59+ │ └── CMakeLists.txt
5860│
59- ├── docs/ # Architecture & benchmarks (planned)
60- └── examples/ # Sample demos (planned)
61+ ├── docs/
62+ │ ├── architecture.md
63+ │ └── media/ # diagrams (placeholder)
64+ │
65+ └── examples/
66+ └── basic_fps_logger/ # First working demo
6167```
6268
6369---
6470
6571## 🧪 Tested / Target Environment
6672
67- This project is being developed and tested with:
73+ Developed and tested with:
6874
69- - ** Chip:** ESP32-S3
70- - ** SDK:** ESP-IDF (Linux / WSL)
71- - ** Host environment :** Windows 10 + WSL Ubuntu
72- - ** Tooling :** VS Code, ` idf.py ` , CMake
75+ - ** Chip:** ESP32-S3
76+ - ** SDK:** ESP-IDF (Linux / WSL)
77+ - ** Environment :** Windows 10 + WSL Ubuntu
78+ - ** Tools :** VS Code, ` idf.py ` , CMake
7379
74- Planned hardware targets include :
80+ Validated hardware:
7581
76- - ESP32-S3 dev boards with PSRAM
77- - Camera modules based on OV2640 / OV5640
82+ - ESP32-S3 dev boards with PSRAM
83+ - OV2640 camera modules
84+ - OV5640 (planned, not yet validated)
7885
7986---
8087
81- ## 🖥️ Getting Started (ESP-IDF)
88+ ## 📸 Hardware Requirements
89+
90+ Target boards:
91+
92+ - ESP32-S3 dev board with PSRAM
93+ - Camera modules:
94+ - OV2640 (supported)
95+ - OV5640 (planned)
96+
97+ Recommended specs:
8298
83- ### 1. Install ESP-IDF
99+ - 8 MB PSRAM
100+ - QVGA or VGA frame sizes for initial demos
101+ - Stable 5V USB power
84102
85- Follow the official install instructions:
103+ If using boards such as ** Seeed XIAO ESP32‑S3 Sense** , adjust only ` camera_config_t ` in ` camera_node ` .
104+
105+ ---
106+
107+ ## 🖥️ Getting Started (ESP-IDF)
108+
109+ ### 1. Install ESP-IDF
86110https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/get-started/
87111
88112### 2. Clone the repository
@@ -92,49 +116,90 @@ git clone https://github.com/CahillMeyer/ccm-esp32-vision-node.git
92116cd ccm-esp32-vision-node/firmware
93117```
94118
95- ### 3. Configure the target
96-
119+ ### 3. Configure the target
97120``` bash
98121idf.py set-target esp32s3
99122idf.py menuconfig
100123```
101124
102- ### 4. Build & flash
103-
125+ ### 4. Build & flash
104126``` bash
105127idf.py build
106128idf.py flash monitor
107129```
108130
109131---
110132
111- ## 📊 Status
133+ ## 📟 Example Serial Output (FPS Logger)
134+
135+ ``` text
136+ I (0) cpu_start: Starting scheduler on PRO CPU.
137+ I (0) main: Initialising camera...
138+ I (250) camera_node: Camera init OK (320x240, PIXFORMAT_JPEG)
139+ I (260) main: Captured frame 1 (size=32768 bytes)
140+ I (270) main: FPS: 18.7
141+ I (323) main: Captured frame 2 (size=32768 bytes)
142+ I (333) main: FPS: 19.5
143+ ...
144+ ```
145+
146+ ---
147+
148+ ## 📊 Early Benchmarks (Placeholder)
112149
113- This project successfully:
114- - builds under ** WSL Ubuntu **
115- - uses the ** esp32-camera ** managed component
116- - compiles a fully working ** C++ main loop **
117- - initializes and reads from the camera
118- - produces frame timing (FPS) logs
150+ | Resolution | Pixel Format | Pipeline Stages | Avg FPS | Notes |
151+ | ----------- | -------------- | ------------------ | --------: | ------- |
152+ | 320×240 | RGB565 | None (raw) | TBD | Baseline |
153+ | 320×240 | Gray | grayscale | TBD | First CV test |
154+ | 320×240 | Gray+TH | gray+threshold | TBD | Planned |
155+ | 640×480 | RGB565 | None | TBD | PSRAM required |
119156
120- Next steps will add actual image-processing functionality .
157+ Benchmarks will be updated as the pipeline matures .
121158
122159---
123160
124161## 🗺️ Roadmap
125162
126- - [ ] Add CvPipeline grayscale + threshold stage
127- - [ ] Add frame buffer pre-processing (ROI, downsample)
128- - [ ] Add MJPEG Wi-Fi streaming server
129- - [ ] Add architecture diagrams
130- - [ ] Add host-side unit tests for pipeline components
131- - [ ] Add example demos (color tracking, region extraction)
163+ ### Near-term
164+ - Add ` cv_pipeline ` grayscale + threshold stage
165+ - Add ROI cropping + reduction steps
166+ - Add MJPEG Wi‑Fi streaming server
167+ - Add diagrams under ` docs/media/ `
168+
169+ ### Mid-term
170+ - Add blob detection demo
171+ - Add region extraction example
172+ - Add JSON status endpoint
173+ - Add host-side tests
174+
175+ ### Vision
176+ A reusable, modular ** Embedded Vision Node** for ESP32-S3:
177+ Setup board → configure pipeline → get structured vision output via UART or Wi‑Fi.
178+
179+ ---
180+
181+ ## Who Is This For?
182+
183+ - Embedded firmware engineers exploring ESP-IDF C++ patterns
184+ - Robotics / IoT teams evaluating low‑power embedded vision
185+ - Engineering leads reviewing CCM Code’s architecture + code quality
186+ - Clients needing a reference implementation for ESP32‑based smart camera nodes
187+
188+ ---
189+
190+ ## What Works Today (v0.1.0 – Alpha)
191+
192+ - ESP-IDF C++ multi-component project structure
193+ - Camera bring-up via ` esp32-camera `
194+ - Continuous capture loop with real-time FPS logging
195+ - Builds and flashes cleanly from WSL → ESP32-S3
196+ - Early example demo under ` examples/basic_fps_logger `
132197
133198---
134199
135200## 📄 License
136201
137- MIT License
202+ MIT License — see ` LICENSE ` .
138203
139204---
140205
0 commit comments