Hi all!
I am trying to get started using the TensorFlowLite library on my Arduino Due!
I have followed TensorFlow's own instructions to create a library for the Arduino (under the section "Generating Arduino Libraries":
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/experimental/micro#generating-arduino_libraries
When I add the .zip library (which I can do seemingly successfully), it also comes with the example micro_speech_mock:
// Template sketch that calls into the detailed TensorFlow Lite example code.
// Include an empty header so that Arduino knows to build the TF Lite library.
#include <TensorFlowLite.h>
extern int tflite_micro_main(int argc, char* argv[]);
void setup() {
tflite_micro_main(0, NULL);
}
void loop() {
}
When I try to compile the example file, I get the following errors, seemingly from the #include statement on the library (some parts in the middle ommitted for length here):
Arduino: 1.8.9 (Mac OS X), Board: "Arduino Due (Programming Port)"
In file included from /Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/tensorflow/lite/experimental/micro/examples/micro_speech/micro_features/fft.cpp:20:0:
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:7:10: warning: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wliteral-suffix]
#include <string.h>n#include <stdint.h>
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:7:20: warning: extra tokens at end of #include directive [enabled by default]
#include <string.h>n#include <stdint.h>
^
In file included from /Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/tensorflow/lite/experimental/micro/examples/micro_speech/micro_features/fft_util.cpp:18:0:
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:7:10: warning: invalid suffix on literal; C++11 requires a space between literal and identifier [-Wliteral-suffix]
#include <string.h>n#include <stdint.h>
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:7:20: warning: extra tokens at end of #include directive [enabled by default]
#include <string.h>n#include <stdint.h>
^
In file included from /Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:19:0,
from /Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.c:16:
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:7:20: warning: extra tokens at end of #include directive [enabled by default]
#include <string.h>n#include <stdint.h>
^
In file included from /Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:19:0,
from /Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.c:16:
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:58:5: error: unknown type name 'int16_t'
kiss_fft_scalar r;
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:59:5: error: unknown type name 'int16_t'
kiss_fft_scalar i;
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.c: In function 'kf_bfly2':
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:48:27: error: 'int16_t' undeclared (first use in this function)
# define kiss_fft_scalar int16_t
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:65:26: note: in expansion of macro 'kiss_fft_scalar'
# define sround( x ) (kiss_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS )
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:74:8: note: in expansion of macro 'sround'
(x) = sround( smul( x, SAMP_MAX/k ) )
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:77:10: note: in expansion of macro 'DIVSCALAR'
do { DIVSCALAR( (c).r , div); \
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.c:33:9: note: in expansion of macro 'C_FIXDIV'
C_FIXDIV(*Fout,2); C_FIXDIV(*Fout2,2);
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.h:48:27: note: each undeclared identifier is reported only once for each function it appears in
# define kiss_fft_scalar int16_t
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:65:26: note: in expansion of macro 'kiss_fft_scalar'
# define sround( x ) (kiss_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS )
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:74:8: note: in expansion of macro 'sround'
(x) = sround( smul( x, SAMP_MAX/k ) )
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:77:10: note: in expansion of macro 'DIVSCALAR'
do { DIVSCALAR( (c).r , div); \
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.c:33:9: note: in expansion of macro 'C_FIXDIV'
C_FIXDIV(*Fout,2); C_FIXDIV(*Fout2,2);
^
/* edited for length */
In file included from /Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.c:16:0:
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:51:19: error: 'int32_t' undeclared (first use in this function)
# define SAMPPROD int32_t
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:65:47: note: in definition of macro 'sround'
# define sround( x ) (kiss_fft_scalar)( ( (x) + (1<<(FRACBITS-1)) ) >> FRACBITS )
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:64:25: note: in expansion of macro 'SAMPPROD'
# define smul(a,b) ( (SAMPPROD)(a)*(b) )
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:74:16: note: in expansion of macro 'smul'
(x) = sround( smul( x, SAMP_MAX/k ) )
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/_kiss_fft_guts.h:77:10: note: in expansion of macro 'DIVSCALAR'
do { DIVSCALAR( (c).r , div); \
^
/Users/laurenogden/Documents/Arduino/libraries/micro_speech_mock/src/third_party/kissfft/kiss_fft.c:217:13: note: in expansion of macro 'C_FIXDIV'
C_FIXDIV(scratch[q1],p);
^
exit status 1
Error compiling for board Arduino Due (Programming Port).
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences.
My friend (on a non Macbook) has taken these same exact steps as me, and he is able to compile and run the example code successfully. I have the most up to date version of the Arduino IDE (1.8.9), and I have xcode and avr-gcc installed. Does anyone have any ideas what might be going wrong and how I can fix this, or has anyone successfully integrated TensorFlowLite with an Arduino before?
Thanks in advance!
- Lauren