use tfmicro::{MicroInterpreter, Model, MutableOpResolver};
use log::info;
#[test]
fn micro_speech() {
env_logger::init();
info!("---- Starting tensorflow micro example: micro_speech");
let model = include_bytes!("../examples/models/micro_speech.tflite");
let no =
include_bytes!("../examples/models/no_micro_f9643d42_nohash_4.data");
let yes =
include_bytes!("../examples/models/yes_micro_f2e59fea_nohash_1.data");
let model = Model::from_buffer(&model[..]).unwrap();
const TENSOR_ARENA_SIZE: usize = 10 * 1024;
let mut tensor_arena: [u8; TENSOR_ARENA_SIZE] = [0; TENSOR_ARENA_SIZE];
let micro_op_resolver = MutableOpResolver::empty()
.depthwise_conv_2d()
.fully_connected()
.softmax();
info!("Resolver: {:?}", micro_op_resolver);
let mut interpreter =
MicroInterpreter::new(&model, micro_op_resolver, &mut tensor_arena[..])
.unwrap();
assert_eq!([1, 49, 40, 1], interpreter.input_info(0).dims);
interpreter.input(0, yes).unwrap();
interpreter.invoke().unwrap();
let output_tensor = interpreter.output(0);
assert_eq!([1, 4], output_tensor.info().dims);
dbg!(output_tensor.as_data::<u8>());
let silence_score: u8 = output_tensor.as_data()[0];
let unknown_score: u8 = output_tensor.as_data()[1];
let yes_score: u8 = output_tensor.as_data()[2];
let no_score: u8 = output_tensor.as_data()[3];
assert!(yes_score > silence_score);
assert!(yes_score > unknown_score);
assert!(yes_score > no_score);
interpreter.input(0, no).unwrap();
interpreter.invoke().unwrap();
let output_tensor = interpreter.output(0);
assert_eq!([1, 4], output_tensor.info().dims);
dbg!(output_tensor.as_data::<u8>());
let silence_score: u8 = output_tensor.as_data()[0];
let unknown_score: u8 = output_tensor.as_data()[1];
let yes_score: u8 = output_tensor.as_data()[2];
let no_score: u8 = output_tensor.as_data()[3];
assert!(no_score > silence_score);
assert!(no_score > unknown_score);
assert!(no_score > yes_score);
interpreter.arena_used_bytes();
info!("Output Info: {:?}", output_tensor.info());
info!("---- Done");
}