Skip to content

Commit 16bc8ff

Browse files
committed
Update README: merged and polished version with examples, benchmarks, and architecture alignment
1 parent adff26e commit 16bc8ff

File tree

1 file changed

+107
-42
lines changed

1 file changed

+107
-42
lines changed

README.md

Lines changed: 107 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,12 @@
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-
109
Embedded camera node for **ESP32-S3** with a modular C++ architecture for real-time computer vision.
1110
This project demonstrates professional embedded CV engineering: camera bring-up, modular pipelines,
12-
and efficient processing on low-power microcontrollers.
11+
efficient frame handling, and lowpower 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 portfolioquality example of clean, modern ESPIDF 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 WiFi 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
```
4648
ccm-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
86110
https://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
92116
cd ccm-esp32-vision-node/firmware
93117
```
94118

95-
### 3. Configure the target
96-
119+
### 3. Configure the target
97120
```bash
98121
idf.py set-target esp32s3
99122
idf.py menuconfig
100123
```
101124

102-
### 4. Build & flash
103-
125+
### 4. Build & flash
104126
```bash
105127
idf.py build
106128
idf.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

Comments
 (0)