This example shows how you can use Tensorflow Lite to run a 250 kilobyte neural network to recognize people in images captured by a camera. It is designed to run on systems with small amounts of memory such as microcontrollers and DSPs. This uses the experimental int8 quantized version of the person detection model.
The following instructions will help you build and deploy this sample to ESP32 devices using the ESP IDF.
The sample has been tested on ESP-IDF version release/v4.2
and release/v4.4
with the following devices:
- ESP32-DevKitC
- ESP32-S3-DevKitC
- ESP-EYE
- ESP32-S3-EYE
- ESP32-S3-Korvo-2
- ESP32-S2-Kaluga (limited performance on ESP32-S2: ~1-2 FPS)
Follow the instructions of the ESP-IDF get started guide to setup the toolchain and the ESP-IDF itself.
The next steps assume that the IDF environment variables are set :
- The
IDF_PATH
environment variable is set idf.py
and Xtensa-esp32 tools (e.g.xtensa-esp32-elf-gcc
) are in$PATH
This example requires an external component esp32-camera and optionally on selected Board Support Package. All these components are distributed via IDF Component Manager.
Set the chip target (For esp32s3 target, IDF version release/v4.4
is needed):
idf.py set-target esp32s3
Then build with idf.py
idf.py build
To flash and monitor (replace /dev/ttyUSB0
with the device serial port):
idf.py --port /dev/ttyUSB0 flash monitor
Use Ctrl+]
to exit.
If your development board has a display, input from the camera can be shown on it. This feature is enabled by specific Board Support Package.
Select your development board BSP in menuconfig: Application Configuration -> Select BSP
.
Not all dev boards come with camera and you may wish to do inferencing on static images. There are 10 images embedded into the application.
- To switch to CLI mode just define the following line in esp_main.h:
#define CLI_ONLY_INFERENCE 1
- To run an inferencing you need to type following on
idf.py monitor
window:
detect_image <image_number>
where <image_number>
is in [0, 9].
The output is person and no_person score printed on the log screen.