Build AI and multimedia processing graphs once and run them across embedded targets and desktop operating systems. This project is based on CMSIS-Stream, which describes and generates the scheduled dataflow graph.
The project adds:
- Reusable CMSIS-Stream nodes for audio, AI, and multimedia processing
- A Python-based way to configure the parameters of every node in an application
- Target-specific implementations and hardware initialization for multiple runners and boards
- Runner projects for CMSIS-RTOS, Zephyr, Linux, macOS, and Windows
Read How the project works for the complete graph-description, code-generation, parameter, hardware, runtime-thread, event, and application-integration model.
- Recorder — Captures microphone audio and sends each block to a null sink to demonstrate a minimal streaming application.
- Spectrogram — Captures microphone audio, computes a spectrogram, and displays it from a serial or POSIX stream.
- Keyword spotting — Runs an MFCC and neural-network pipeline that recognizes keywords from audio.
- Debug — Uses a known audio test pattern to compare keyword-spotting computations across POSIX and CMSIS/Ethos targets.
Use the runner documentation to configure and build the generated application for a target environment:
When you generate code for a graph, you need to select the runner and the board.
uv run examples/recorder/create.py --runner zephyr --board fvp_cs300The CMSIS-Stream scheduler will be generated in runner_common/app_graph. You'll then have to build the right runner. Even if the scheduler is generated in common, it cannot be built for all runners if it uses nodes that are runner- or board-specific.
This script is available in each example folder. For instance: examples/recorder/create.py.
See Configuring and generating an application for a recorder-based walkthrough. The project principles explain how generation selects node implementations and board support.
The demo using a TFLite network currently uses only one network.
The format of this network depends on the target: POSIX or Ethos-U.
The network is selected in app.py when running the Python script create.py for a given application.
The demos differ because:
- Computations use different kernel implementations in TFLite
- Real-time constraints may not always be met, so the network may receive different audio segments on different platforms
For those reasons, the recognized keywords may be a bit different according to the platform.