Advertisement
Guest User

Untitled

a guest
Mar 18th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.22 KB | None | 0 0
  1. # Marcel Ochsendorf 10.02.2018
  2. # ProDevMo
  3. # Imports collected dataset form the rep_server
  4.  
  5. # TOOL REQUIREMENTS :
  6. # -> needs a json filelist {files:["file1.csv", "file2.csv"] to get all files to download
  7. # -> each download url need a filename at the end with this format <xxx>_<yyy>_<LABEL>_<zzz>.csv
  8. # -> the label name in the filename has to be matched with
  9. # -> each csv file must have a header TIME, X, Y, Z (4 collums)
  10.  
  11.  
  12.  
  13. #TODO
  14. # -> replace urls with var
  15. # ->
  16. import requests
  17. import json
  18. from collections import namedtuple
  19. import os
  20. import sys
  21. import csv
  22. from StringIO import StringIO
  23. import shutil
  24.  
  25.  
  26.  
  27. downloaded_file_container = namedtuple("downloaded_file_container", "csv_content dl_path filename label len")
  28.  
  29.  
  30. TRAIN_DATA_BASE_DIR = "./train_data"
  31. if not os.path.exists(TRAIN_DATA_BASE_DIR):
  32. os.makedirs(TRAIN_DATA_BASE_DIR)
  33. else:
  34. shutil.rmtree(TRAIN_DATA_BASE_DIR)
  35.  
  36.  
  37. # TRASH DIR FOR UNCONVERTED FILES
  38. INVALID_FILE_FOLDER = TRAIN_DATA_BASE_DIR+"/__trash__"
  39. if not os.path.exists(INVALID_FILE_FOLDER):
  40. os.makedirs(INVALID_FILE_FOLDER)
  41.  
  42.  
  43. #LABEL 1 NOTHING SOME IDLE DATA IF YOU HOLD THE PHONE IN YOUR HAND
  44. LABEL_NOTHING = "idle"
  45. LABEL_NOTHING_PATH = TRAIN_DATA_BASE_DIR+"/nothing/"
  46. label_counter_nothing = 0
  47. if not os.path.exists(LABEL_NOTHING_PATH):
  48. os.makedirs(LABEL_NOTHING_PATH)
  49.  
  50. #LABEL 2 PUSH SOME IDLE DATA IF YOU PUSH YOUR FORM AWAY FROM YOU
  51. LABEL_PUSH = "push"
  52. LABEL_PUSH_PATH = TRAIN_DATA_BASE_DIR+"/push/"
  53. label_counter_push = 0
  54. if not os.path.exists(LABEL_PUSH_PATH):
  55. os.makedirs(LABEL_PUSH_PATH)
  56.  
  57. #LABEL 3 PULL SOME IDLE DATA IF YOU PUSH YOUR FORM AWAY FROM YOU
  58. LABEL_PULL = "pull"
  59. LABEL_PULL_PATH = TRAIN_DATA_BASE_DIR+"/pull/"
  60. label_counter_pull = 0
  61. if not os.path.exists(LABEL_PULL_PATH):
  62. os.makedirs(LABEL_PULL_PATH)
  63.  
  64. #LABEL 4 PULL SOME IDLE DATA IF YOU PUSH YOUR FORM AWAY FROM YOU
  65. LABEL_ROTATE_LEFT = "left"
  66. LABEL_ROTATE_LEFT_PATH = TRAIN_DATA_BASE_DIR+"/rotate_left/"
  67. label_counter_roate_left = 0
  68. if not os.path.exists(LABEL_ROTATE_LEFT_PATH):
  69. os.makedirs(LABEL_ROTATE_LEFT_PATH)
  70.  
  71. #LABEL 5 PULL SOME IDLE DATA IF YOU PUSH YOUR FORM AWAY FROM YOU
  72. LABEL_ROTATE_RIGHT = "right"
  73. LABEL_ROTATE_RIGHT_PATH = TRAIN_DATA_BASE_DIR+"/rotate_right/"
  74. label_counter_rotate_right = 0
  75. if not os.path.exists(LABEL_ROTATE_RIGHT_PATH):
  76. os.makedirs(LABEL_ROTATE_RIGHT_PATH)
  77.  
  78.  
  79. #DOWNLOAD FILE LIST FROM SERVER
  80. response = requests.get("http://marcelochsendorf.com:3040/")
  81. if(response.status_code != 200):
  82. print("get failed 0 ")
  83. exit()
  84. requested_filelist = json.loads(response.text)
  85.  
  86.  
  87.  
  88. #print (requested_filelist['files'])
  89.  
  90.  
  91.  
  92. # DOWNLOAD ALL FILES AND CHECK IF LEN IS GOOD AND CHECK FOR LABEL
  93. SENSOR_READ_TIME_INTERVAL = 0.1 #REFRESH RATE IN THE SENSOR IN SECONDS
  94. MIN_CSV_LEN = 15 #ignores files under x entries
  95. csv_found_min_len = sys.maxint # after going though all csv files,
  96. squares = [] # DOWNLOADED CSV FILE LIST
  97. for i in range(len(requested_filelist['files'])):
  98. #print(requested_filelist['files'])
  99. path__, filename_to_dl = os.path.split(requested_filelist['files'][i])
  100. response_csv = requests.get("http://marcelochsendorf.com:3040/save/" + filename_to_dl)
  101. if(response_csv.status_code != 200):
  102. print("get failed 1 ")
  103. exit()
  104. print(filename_to_dl)
  105. sys.stdout.flush()
  106. fn_basename, fn_timestamp,fn_action, fn_counter = filename_to_dl.split("_")
  107. #HERE CHECK FOR LABEL NAME IN FILE its for ignoring invaluf file labes you can specify on top of the file
  108. if(fn_action == LABEL_NOTHING):
  109. label_counter_nothing = label_counter_nothing + 1
  110. elif (fn_action == LABEL_PUSH):
  111. label_counter_push = label_counter_push + 1
  112. elif (fn_action == LABEL_PULL):
  113. label_counter_pull = label_counter_pull + 1
  114. elif (fn_action == LABEL_ROTATE_LEFT):
  115. label_counter_roate_left = label_counter_roate_left + 1
  116. elif (fn_action == LABEL_ROTATE_RIGHT):
  117. label_counter_rotate_right = label_counter_rotate_right + 1
  118. else:
  119. print("skip file - invalid label . " + filename_to_dl + "(" + fn_action + ")")
  120. continue
  121.  
  122.  
  123. row_len_csv = 0
  124. csv_content = csv.reader(StringIO(response_csv.text))
  125. for row in csv_content:
  126. row_len_csv += 1
  127. #appen if long enought
  128. # -1 to ignore the csv header
  129. if(row_len_csv-1 >= MIN_CSV_LEN):
  130. m = downloaded_file_container(csv_content=response_csv.text, dl_path="http://marcelochsendorf.com:3040/save/" + filename_to_dl, filename=filename_to_dl, label=fn_action, len = row_len_csv-1)
  131. squares.append(m)
  132. if(row_len_csv < csv_found_min_len):
  133. csv_found_min_len = row_len_csv
  134. else:
  135. print("ignored csv file")
  136.  
  137.  
  138.  
  139.  
  140. print("MIN DATASET LEN : " + str(csv_found_min_len))
  141. print("DL " + str(label_counter_nothing) + " nothing labeled files")
  142. print("DL " + str(label_counter_pull) + " pull labeled files")
  143. print("DL " + str(label_counter_push) + " push labeled files")
  144. print("DL " + str(label_counter_roate_left) + " roate_left labeled files")
  145. print("DL " + str(label_counter_rotate_right) + " roate_right labeled files")
  146.  
  147.  
  148. #csv parsen
  149. #länge bestimmen speichern
  150. #timestamp adden
  151. #und nach kategoriew suchen per keyword und dann in ornern einfügen
  152. # path = path/to/file
  153. # filename = foobar.txt
  154.  
  155. #SAVEIN ALL DOWNLOADED FILES TO THE RIGHT LOCATION
  156. comvert_file_counter = 0
  157. for files_to_convert in squares:
  158. #print(x.dl_path)
  159. time_step = 0.0
  160. filepath = INVALID_FILE_FOLDER
  161. #DETERMAN FILEPATH VIA LABEL
  162. if(files_to_convert.label == LABEL_NOTHING):
  163. filepath = LABEL_NOTHING_PATH
  164. elif (files_to_convert.label == LABEL_PUSH):
  165. filepath = LABEL_PUSH_PATH
  166. elif (files_to_convert.label == LABEL_PULL):
  167. filepath = LABEL_PULL_PATH
  168. elif (files_to_convert.label == LABEL_ROTATE_LEFT):
  169. filepath = LABEL_ROTATE_LEFT_PATH
  170. elif (files_to_convert.label == LABEL_ROTATE_RIGHT):
  171. filepath = LABEL_ROTATE_RIGHT_PATH
  172. else:
  173. print("skip file - invalid label to determan path ." + files_to_convert.label)
  174. continue
  175.  
  176. #APPEND FILENAME if invalid chose a counting number
  177. if(files_to_convert.filename == ""):
  178. filepath =filepath + str(comvert_file_counter)
  179. comvert_file_counter = comvert_file_counter+1
  180. else:
  181. filepath =filepath+ files_to_convert.filename # append the original filename
  182.  
  183.  
  184. with open(filepath, 'w') as csvfile:
  185. fieldnames = ['TIME_STEP','ACCEL_X', 'ACCEL_Y', 'ACCEL_Z']
  186. writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
  187. writer.writeheader()
  188.  
  189. csv_dl_content = csv.reader(StringIO(files_to_convert.csv_content))
  190. is_csv_head = True
  191. read_row_counter = 0
  192. for read_row in csv_dl_content:
  193. #SKIP CSV HEADER
  194. if(is_csv_head):
  195. is_csv_head = False
  196. continue
  197. #TODO adde nur csv_found_min_len elemente
  198. if(read_row_counter >= csv_found_min_len):
  199. break
  200. read_row_counter = read_row_counter + 1
  201. writer.writerow({'TIME_STEP': str(time_step), 'ACCEL_X': read_row[1],'ACCEL_Y': read_row[2],'ACCEL_Z': read_row[3]})
  202. time_step = time_step + SENSOR_READ_TIME_INTERVAL
  203.  
  204. i = 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement