Spaces:
Build error
Build error
File size: 3,927 Bytes
a5bd089 03507e5 a5bd089 b37ce89 a5bd089 b37ce89 a5bd089 f96ae3a f9e67d5 f96ae3a a5bd089 f96ae3a f9e67d5 a5bd089 f96ae3a a5bd089 f96ae3a a5bd089 f96ae3a 03507e5 a5bd089 f96ae3a a5bd089 f9e67d5 a5bd089 b37ce89 03507e5 df766c6 a5bd089 7a91765 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
import numpy as np
import pandas as pd
import gradio as gr
from funcs.convertors import slice_csv_to_json, slice_csv_to_json_v2
from funcs.plot_func import plot_sensor_data_from_json
def process_data(input_file, slice_size=64, min_slice_size=10, sample_rate=20, window_size=40, threshold=1000, span_limit=10000000):
# Read the data from the file, including the CRC column
try:
if input_file.name is None:
return None, None, None, None, None, None, None, None, None
data = pd.read_csv(input_file.name, delimiter=";", index_col="NR", usecols=["NR", "TS", "LEG", "GX", "GY", "GZ", "AX", "AY", "AZ", "CRC"])
except:
if input_file is None:
return None, None, None, None, None, None, None, None, None
data = pd.read_csv(input_file, delimiter=";", index_col="NR", usecols=["NR", "TS", "LEG", "GX", "GY", "GZ", "AX", "AY", "AZ", "CRC"])
# Replace the values with NaN when the CRC value is not zero
data.loc[data["CRC"] != 0, ["GX", "GY", "GZ", "AX", "AY", "AZ"]] = np.nan
# Drop the CRC column as it is not needed anymore
data = data.drop(columns="CRC")
# Pivot the table to have only one line per timestamp but more columns
data = data.pivot_table(values=["GX", "GY", "GZ", "AX", "AY", "AZ"], index="TS", columns="LEG")
# Flatten the multi-level columns
data.columns = [f"{col[0]}{col[1]}" for col in data.columns]
# Sort the index (timestamps)
data = data.sort_index()
# Check if the span between min and max is too large, and limit it if necessary
min_ts = data.index.min()
max_ts = data.index.max()
if (max_ts - min_ts) > span_limit:
max_ts = min_ts + span_limit
data = data[data.index <= max_ts]
# Check if the timestamp distance is 20 ms and add timestamps necessary
new_index = pd.RangeIndex(start=min_ts, stop=max_ts + 20, step=20)
data = data.reindex(new_index)
# Fill missing values with NaN
data = data.replace(0, np.nan)
# Check if the gap between two timestamps is bigger than 80 ms and show a warning
gaps = data.isna().all(axis=1).astype(int).groupby(data.notna().all(axis=1).astype(int).cumsum()).sum()
big_gaps = gaps[gaps > 3]
if not big_gaps.empty:
gap_start_index = big_gaps.index[0] * 20
gap_size = big_gaps.iloc[0] * 20
# print(f"Warning: gap of {gap_size} ms found at line {gap_start_index}")
# Save the data up to the point where there is a gap of more than 80 ms
data = data.iloc[:gap_start_index]
# Calculate the absolute differences between consecutive rows for all channels
differences = data.diff().abs()
# Find the index where all differences are below the threshold
no_significant_change_index = differences[differences.lt(threshold).all(axis=1)].index
if not no_significant_change_index.empty:
# Save the data up to the point where no significant change appears in all channels
data = data.loc[:no_significant_change_index[0]]
return None, None, f'Warning: Significantly shortened > check the recordings', None, None, None, None, None, None
# Save the resulting DataFrame to a new file
data.to_csv('output.csv', sep=";", na_rep="NaN", float_format="%.0f")
# file, len_ = slice_csv_to_json('output.csv', slice_size, min_slice_size, sample_rate, window_size=window_size)
file, len_ = slice_csv_to_json_v2('output.csv', slice_size, min_slice_size, sample_rate)
# get the plot automatically
sensor_fig, slice_fig, get_all_slice, slice_json, overlay_fig = plot_sensor_data_from_json(file, "GZ1")
# overlay_fig = plot_overlay_data_from_json(file, ["GZ1", "GZ2", "GZ3", "GZ4"])
return 'output.csv', file, f'num of slices found: {len_}', sensor_fig, overlay_fig, gr.Slider.update(interactive=True, maximum=len_, minimum=1, value=1), slice_fig, get_all_slice, slice_json |