Giter Site home page Giter Site logo

pico-micro_speech's Introduction

MICRO_SPEECH implementation for PICO-TFLMICRO

Exp Lic Py TensorFlow 2.15 Ver HWD

This repo implements the micro_speech example for deployment on Raspberry Pico RP2040 compatible micrcontroller boards. The code is meant to be installed and compiled as part of the pico-tflmicro version of the TensorFlow Lite Micro library for the Raspberry Pi Pico microcontroller.

Dependencies

The pico-tflmicro version of the TensorFlow Lite Micro library for the Raspberry Pi Pico microcontroller.

The code re-uses most of the esp-tflite-micro implementation of the micro_speech example, except the following code:

  • The analog_audio_provider.cc, pdm_audio_provider.cc, command_responser.cc and main.cc code from pico-wake-word implementation is used.

  • From the Microphone Library for Pico @a837f63 the microphone-library-for-pico/src code has been copied with minor modification to this repo, under pico-microphone/src folder:

    • The pico-microphone/CMakeLists.txt file has been edited to remove these lines:
      include(pico_sdk_import.cmake)
      pico_sdk_init()
      

The outputs from the model generation process described for the Micro Speech Example are expected to be placed in micro_speech/models folder:

  • micro_speech_quantized_model_data
  • audio_preprocessor_int8_model_data

Installation

Step 0: Clone the pico-sdk and follow the associated installation instructions. Set the PICO_SDK_PATH to the full path where the pico-sdk was installed.

Step 1: Clone the pico-tflmicro repo.

Step 2: Clone this repo as micro_speech within the pico-tflmicro/examples folder of the pico-tflmicro repo.

Step 3: Edit the pico-tflmicro/CMakeLists_template.txt and insert add_subdirectory("examples/micro_speech") to have this at the end of the file:

...

add_subdirectory("examples/hello_world")
add_subdirectory("examples/person_detection")
add_subdirectory("examples/micro_speech")

{{TEST_FOLDERS}}

Step 4: Follow the instructions in the pico-tflmicro/README and generate an updated version of the pico-tflmicro project by running the command:

sync/sync_with_upstream.sh

Step 5: In the pico-tflmicro directory run:

mkdir build
cd build
cmake ..

Step 6: To build the micro_speech example run:

cd examples/micro_speech
make

Step 7: Provided the build succeeds, the *.bin, *.elf and *.uf2 compiled binary files are now available in pico-tflmicro/build/examples/micro_speech folder. These are RP2040 specific binaries and cannot be exectuted on the development machine!

Notes

  1. This implementation relies on the generation of two tflite model files: one for audio_preprocessing, and one for the micro_speech ML model itself. This is well described in the official Micro Speech Example. The models in C++ format need to be placed under the micro_speech/models.

  2. To build the data files needed, use Convert models and audio samples to C++. The test audio sample files in C++ format need to be placed under micro_speech/testdata.

  3. There are other, 3+ years older, versions of the micro_speech example implementation which require the use of the microfrontend implementation e.g., pico-wake-word or micro_speech @6ff638 This current implementation does not use the microfrontend code and instead relies on audio_preprocessor_int8_model_data model.

HWD tests with analog microphone

SparkFun ICS-40180 analog MEMS microphone.

For an RP2040 based microcontroller, the ADC resolution is 12-bits, sampling frequency is 48Mhz, sample at a rate of 500kS/s and ADC max voltage is 3.3V. It takes 96 clock cycles for each sample i.e., (96/48Mhz)= 2μS is the sampling time required for each sample.

  • voltage_value =3.3 * (digital_value/(2^resolution))
  • The AUD output DC offset is at one-half the power supply voltage i.e. about 1.65V

TODOs

  • Deploy and test on RP2040 based microcontroller board (microphone, etc.).

  • Implement some more tests, as in the pico-wake-word or micro_speech @6ff638 implementations. Can tests be implemented to be run on the development machine?

    • Check if the use of tflite::MicroErrorReporter and TF_LITE_REPORT_ERROR instead of MicroPrintf is still OK. The logging guidelines indicate do not use and not support/recommend.

pico-micro_speech's People

Contributors

istvanzk avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.