EMG_Biometrics_2021/README.md
2022-08-11 14:59:34 +00:00

48 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Analysis of Keystroke EMG data for identification
#### EMG data handling and Neural Network analysis
Scripts to handle CSV files composed by 2 * 8 EMG sensors(left & right) devided into sessions per subject. The raw data is organised in a CSV_handler object with Handle_emg_data.py. Processing of data can take the further form of:
* Preprocessing with Signal_prep.py - FFT, MFCC, Wavelet db4
* Storage for Neural Network analysis with NN_handler(Handle_emg_data.py) - combined EMG DataFrame, combined MFCCs DataFrame
* Neural Network analysis in Neural_Network_Analysis.py - LSTM NN, etc.
#### Technologies used
* Common libs: Numpy, Pandas, Pathlib, Sklearn, Scipy, Matplotlib, Tensorflow, Keras
* Community libs: Python_speech_features, PyWavelets
#### Challanges in the module
* The CSV handlig requires a specific data file structure. Se "How to use it"
* Preprocessing is still limited in Signal_prep.py
* NB: `get_samplerate()` is configured for a sampling bug. See comment above function in Handle_emg_data.py
#### Credits for insporational code
* Kapre: Keunwoochoi
* Audio-Classification: seth814
* DeepLearningForAudioWithPyhton: musikalkemist
* PyWavelets reference: Gregory R. Lee, Ralf Gommers, Filip Wasilewski, Kai Wohlfahrt, Aaron OLeary (2019). PyWavelets: A Python package for wavelet analysis. Journal of Open Source Software, 4(36), 1237, https://doi.org/10.21105/joss.01237.
## Table of Contents
| File and classes | Description and help functions |
|---|---|
| Handle_emg_data.py:<br><br> * Data_container<br> * CSV_handler<br> * NN_handler | Handles, manipulates, and stores data for analysis. <br><br> * Data_container is a class that describes the data for each subject in the experiment.<br> * CSV_handler takes data from CSV files and places it in Data_container for each subject.<br> Use load_data() to load csv data into data containers and add the containers to the <br> CSV_handler's 'data_container_dict', indexed by subject number. Use get_data() to retrieve <br> specific data. <br> * NN_handler prepares data for further analysis in Neural Networks. This class has storage <br> for this data and/or can save it to a json file. |
| Signal_prep.py | Does mapping to data and contains various functions. Among others, this contains wavelet, <br>MFCC, cepstrum and normalization. |
| Present_data.py | Contains plot and case functions. Case functions combines many elements from the code and <br>presents some results described. |
| Neural_Network_Analysis.py | Contains functions to load, build and execute analysis with Neural Networks. Main functions are <br>load_data_from_json(), build_model(), and main() |
## How to use it
1. Clone the repo
2. Place the data files in the working directory
3. Place the data files within the `data`-folder as data is shown originally
(format: `/data/<datatype>/<subject-folder+ID>/<session-folder>/<left/right-CSV-files>`)
4. Assuming NN analysis:
1. Create a `CSV_handler` object
2. Load data with `load_data(CSV_handler, <datatype>, <filename_type>)`
3. Create `NN_handler` object with `CSV_handler` as input
4. Load MFCC data into the `NN_handler` with `store_mfcc_samples()`
5. Run `save_json_mfcc()` to save samples in json
6. Run `Neural_Network_Analysis.py` with desired config