# Lint as: python3 # coding=utf-8 # Copyright 2019 The TensorFlow Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== """Prepare data for further process. Read data from "/slope", "/ring", "/wing", "/negative" and save them in "/data/complete_data" in python dict format. It will generate a new file with the following structure: ├── data │   └── complete_data """ from __future__ import absolute_import from __future__ import division from __future__ import print_function import csv import json import os import random LABEL_NAME = "gesture" DATA_NAME = "accel_ms2_xyz" folders = ["wing", "ring", "slope"] names = [ "hyw", "shiyun", "tangsy", "dengyl", "zhangxy", "pengxl", "liucx", "jiangyh", "xunkai" ] def prepare_original_data(folder, name, data, file_to_read): """Read collected data from files.""" if folder != "negative": with open(file_to_read, "r") as f: lines = csv.reader(f) data_new = {} data_new[LABEL_NAME] = folder data_new[DATA_NAME] = [] data_new["name"] = name for idx, line in enumerate(lines): # pylint: disable=unused-variable if len(line) == 3: if line[2] == "-" and data_new[DATA_NAME]: data.append(data_new) data_new = {} data_new[LABEL_NAME] = folder data_new[DATA_NAME] = [] data_new["name"] = name elif line[2] != "-": data_new[DATA_NAME].append([float(i) for i in line[0:3]]) data.append(data_new) else: with open(file_to_read, "r") as f: lines = csv.reader(f) data_new = {} data_new[LABEL_NAME] = folder data_new[DATA_NAME] = [] data_new["name"] = name for idx, line in enumerate(lines): if len(line) == 3 and line[2] != "-": if len(data_new[DATA_NAME]) == 120: data.append(data_new) data_new = {} data_new[LABEL_NAME] = folder data_new[DATA_NAME] = [] data_new["name"] = name else: data_new[DATA_NAME].append([float(i) for i in line[0:3]]) data.append(data_new) def generate_negative_data(data): """Generate negative data labeled as 'negative6~8'.""" # Big movement -> around straight line for i in range(100): if i > 80: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative8"} elif i > 60: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative7"} else: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative6"} start_x = (random.random() - 0.5) * 2000 start_y = (random.random() - 0.5) * 2000 start_z = (random.random() - 0.5) * 2000 x_increase = (random.random() - 0.5) * 10 y_increase = (random.random() - 0.5) * 10 z_increase = (random.random() - 0.5) * 10 for j in range(128): dic[DATA_NAME].append([ start_x + j * x_increase + (random.random() - 0.5) * 6, start_y + j * y_increase + (random.random() - 0.5) * 6, start_z + j * z_increase + (random.random() - 0.5) * 6 ]) data.append(dic) # Random for i in range(100): if i > 80: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative8"} elif i > 60: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative7"} else: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative6"} for j in range(128): dic[DATA_NAME].append([(random.random() - 0.5) * 1000, (random.random() - 0.5) * 1000, (random.random() - 0.5) * 1000]) data.append(dic) # Stay still for i in range(100): if i > 80: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative8"} elif i > 60: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative7"} else: dic = {DATA_NAME: [], LABEL_NAME: "negative", "name": "negative6"} start_x = (random.random() - 0.5) * 2000 start_y = (random.random() - 0.5) * 2000 start_z = (random.random() - 0.5) * 2000 for j in range(128): dic[DATA_NAME].append([ start_x + (random.random() - 0.5) * 40, start_y + (random.random() - 0.5) * 40, start_z + (random.random() - 0.5) * 40 ]) data.append(dic) # Write data to file def write_data(data_to_write, path): with open(path, "w") as f: for idx, item in enumerate(data_to_write): # pylint: disable=unused-variable dic = json.dumps(item, ensure_ascii=False) f.write(dic) f.write("\n") if __name__ == "__main__": data = [] for idx1, folder in enumerate(folders): for idx2, name in enumerate(names): prepare_original_data(folder, name, data, "./%s/output_%s_%s.txt" % (folder, folder, name)) for idx in range(5): prepare_original_data("negative", "negative%d" % (idx + 1), data, "./negative/output_negative_%d.txt" % (idx + 1)) generate_negative_data(data) print("data_length: " + str(len(data))) if not os.path.exists("./data"): os.makedirs("./data") write_data(data, "./data/complete_data")