125 lines
3.0 KiB
ReStructuredText
125 lines
3.0 KiB
ReStructuredText
.. zephyr:code-sample:: tflite-magicwand
|
|
:name: Magic Wand
|
|
|
|
Recognize gestures from an accelerometer using TensorFlow Lite for Microcontrollers and a 20KB
|
|
neural network.
|
|
|
|
Overview
|
|
********
|
|
|
|
This sample application shows how to use TensorFlow Lite Micro
|
|
to run a 20 kilobyte neural network model that recognizes gestures
|
|
from an accelerometer.
|
|
|
|
.. Note::
|
|
This README and sample have been modified from
|
|
`the TensorFlow Magic Wand sample for Zephyr`_ and
|
|
`the Antmicro tutorial on Renode emulation for TensorFlow`_.
|
|
|
|
.. _the TensorFlow Magic Wand sample for Zephyr:
|
|
https://github.com/tensorflow/tflite-micro-arduino-examples/tree/main/examples/magic_wand
|
|
|
|
.. _the Antmicro tutorial on Renode emulation for TensorFlow:
|
|
https://github.com/antmicro/litex-vexriscv-tensorflow-lite-demo
|
|
|
|
Building and Running
|
|
********************
|
|
|
|
Add the tflite-micro module to your West manifest and pull it:
|
|
|
|
.. code-block:: console
|
|
|
|
west config manifest.project-filter -- +tflite-micro
|
|
west update
|
|
|
|
The application can be built for the :ref:`litex-vexriscv` for
|
|
emulation in Renode as follows:
|
|
|
|
.. zephyr-app-commands::
|
|
:zephyr-app: samples/modules/tflite-micro/magic_wand
|
|
:host-os: unix
|
|
:board: litex_vexriscv
|
|
:goals: build
|
|
:compact:
|
|
|
|
Once the application is built, `download and install Renode 1.12 or higher as a package`_
|
|
following the instructions in the `Renode GitHub README`_ and
|
|
start the emulator:
|
|
|
|
.. code-block:: console
|
|
|
|
renode -e "set zephyr_elf @./build/zephyr/zephyr.elf; s @./samples/modules/tflite-micro/magic_wand/renode/litex-vexriscv-tflite.resc"
|
|
|
|
.. _download and install Renode 1.12 or higher as a package:
|
|
https://github.com/renode/renode/releases/
|
|
|
|
.. _Renode GitHub README:
|
|
https://github.com/renode/renode/blob/master/README.rst
|
|
|
|
Sample Output
|
|
=============
|
|
|
|
The Renode-emulated LiteX/VexRiscv board is fed data that the
|
|
application recognizes as a series of alternating ring and slope
|
|
gestures.
|
|
|
|
.. code-block:: console
|
|
|
|
Got accelerometer, label: accel-0
|
|
|
|
RING:
|
|
*
|
|
* *
|
|
* *
|
|
* *
|
|
* *
|
|
* *
|
|
*
|
|
|
|
SLOPE:
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
* * * * * * * *
|
|
|
|
RING:
|
|
*
|
|
* *
|
|
* *
|
|
* *
|
|
* *
|
|
* *
|
|
*
|
|
|
|
SLOPE:
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*
|
|
* * * * * * * *
|
|
|
|
Modifying Sample for Your Own Project
|
|
*************************************
|
|
|
|
It is recommended that you copy and modify one of the two TensorFlow
|
|
samples when creating your own TensorFlow project. To build with
|
|
TensorFlow, you must enable the below Kconfig options in your :file:`prj.conf`:
|
|
|
|
.. code-block:: cfg
|
|
|
|
CONFIG_CPP=y
|
|
CONFIG_REQUIRES_FULL_LIBC=y
|
|
CONFIG_TENSORFLOW_LITE_MICRO=y
|
|
|
|
Training
|
|
********
|
|
Follow the instructions in the :file:`train/` directory to train your
|
|
own model for use in the sample.
|