Source code for mltk.datasets.accelerometer.tflm_magic_wand
"""Tensorflow-Lite Micro Magic Wand
***************************************
https://github.com/tensorflow/tflite-micro/tree/main/tensorflow/lite/micro/examples
"""
import os
import sys
from typing import Tuple, List
import tensorflow as tf
from mltk.utils.archive_downloader import download_verify_extract
if not __package__:
CURDIR = os.path.dirname(os.path.abspath(__file__))
sys.path.insert(0, os.path.dirname(CURDIR))
__package__ = os.path.basename(CURDIR)# pylint: disable=redefined-builtin
from .data_prepare import data_prepare
from .data_split_person import data_split_person
from .data_load import DataLoader
DOWNLOAD_URL = 'http://download.tensorflow.org/models/tflite/magic_wand/data.tar.gz'
VERIFY_SHA1 = '5F130F7A65DB62E17E7DE62D635AB7AE0F929047'
[docs]def prepare_data() -> str:
"""Download and prepare the dataset, then return the path to the dataset
"""
dataset_dir = download_verify_extract(
url=DOWNLOAD_URL,
dest_subdir='datasets/accelerator/tflm_magic_wand',
file_hash=VERIFY_SHA1,
show_progress=True
)
processing_complete_path = f'{dataset_dir}/processing_complete.txt'
if not os.path.exists(processing_complete_path):
try:
saved_cwd_dir = os.getcwd()
os.chdir(dataset_dir)
data_prepare()
data_split_person()
with open(processing_complete_path, 'w'):
pass
finally:
os.chdir(saved_cwd_dir)
return dataset_dir
[docs]def load_data(seq_length=128, person=True) -> DataLoader:
"""Download and prepare the dataset, then return the path to the dataset
as a tuple:
(train, validation, test)
"""
dataset_dir = prepare_data()
subdir = 'person_split' if person else 'data'
data_loader = DataLoader(
f'{dataset_dir}/{subdir}/train',
f'{dataset_dir}/{subdir}/valid',
f'{dataset_dir}/{subdir}/test',
seq_length=seq_length
)
return data_loader
if __name__ == '__main__':
load_data()