Machine learning for microcontroller and embedded systems. Train in Python, then do inference on any device with a C99 compiler.
Embedded-friendly Inference
- Portable C99 code
- No libc required
- No dynamic allocations
- Support integer/fixed-point math
- Single header file include
Convenient Training
- Using Python with scikit-learn or Keras
- The generated C classifier is also accessible in Python
Can be used as an open source alternative to MATLAB Classification Trees,
Decision Trees using MATLAB Coder for C/C++ code generation.
fitctree
, fitcensemble
, TreeBagger
, ClassificationEnsemble
, CompactTreeBagger
Minimally useful
Classifiers:
eml_trees
: sklearn.RandomForestClassifier, sklearn.ExtraTreesClassifiereml_net
: sklearn.MultiLayerPerceptron, Keras.Sequential with fully-connected layerseml_bayes
: sklearn.GaussianNaiveBayes
Feature extraction:
eml_audio
: Melspectrogram
Tested running on AVR Atmega, ESP8266 and Linux.
Install from PyPI
pip install --user emlearn
- Train your model in Python
from sklearn.ensemble import RandomForestClassifier
estimator = RandomForestClassifier(n_estimators=10, max_depth=10)
estimator.fit(X_train, Y_train)
...
- Convert it to C code
import emlearn
cmodel = emlearn.convert(estimator, method='inline')
cmodel.save(file='sonar.h')
- Use the C code
#include "sonar.h"
const int32_t length = 60;
int32_t values[length] = { ... };
const int32_t predicted_class = sonar_predict(values, length):
For full example code, see examples/digits.py and emlearn.ino