make_dataset.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import numpy as np
  2. import pandas as pd
  3. import os, sys, argparse
  4. import modules.config as cfg
  5. def compute_files(_n, _each_row, _each_column):
  6. """
  7. Read all folders and files of scenes in order to compute output dataset
  8. """
  9. output_dataset_filename = cfg.output_file_prefix + _n + '_column_' + _each_column + '_row_' + _each_row + '.csv'
  10. output_dataset_filename = os.path.join(cfg.output_data_folder, output_dataset_filename)
  11. if not os.path.exists(cfg.output_data_folder):
  12. os.makedirs(cfg.output_data_folder)
  13. output_file = open(output_dataset_filename, 'w')
  14. print('Preparing to store data into ', output_dataset_filename)
  15. scenes = os.listdir(cfg.folder_scenes_path)
  16. # remove min max file from scenes folder
  17. scenes = [s for s in scenes if s not in cfg.folder_and_files_filtered]
  18. scenes = [s for s in scenes if '.csv' not in s] # do not keep generated .csv file
  19. # print(scenes)
  20. counter = 0
  21. number_of_elements = len(scenes) * cfg.number_of_rows * cfg.number_of_columns
  22. #print(number_of_elements, ' to manage')
  23. for scene in scenes:
  24. scene_path = os.path.join(cfg.folder_scenes_path, scene)
  25. for id_column in range(cfg.number_of_columns):
  26. if id_column % int(_each_column) == 0 :
  27. folder_path = os.path.join(scene_path, str(id_column))
  28. for id_row in range(cfg.number_of_rows):
  29. if id_row % int(_each_row) == 0:
  30. pixel_filename = scene + '_' + str(id_column) + '_' + str(id_row) + ".dat"
  31. pixel_file_path = os.path.join(folder_path, pixel_filename)
  32. saved_row = ''
  33. # for each file read content, keep `n` first values and compute mean
  34. with open(pixel_file_path, 'r') as f:
  35. lines = [float(l)/255. for l in f.readlines()]
  36. pixel_values = lines[0:int(_n)]
  37. mean = sum(lines) / float(len(lines))
  38. saved_row += str(mean)
  39. for val in pixel_values:
  40. saved_row += ';' + str(val)
  41. saved_row += '\n'
  42. # store mean and pixel values into .csv row
  43. output_file.write(saved_row)
  44. counter = counter + 1
  45. else:
  46. counter += cfg.number_of_rows
  47. print("{0:.2f}%".format(counter / number_of_elements * 100))
  48. sys.stdout.write("\033[F")
  49. print('\n')
  50. output_file.close()
  51. def main():
  52. parser = argparse.ArgumentParser(description="Compute .csv dataset file")
  53. parser.add_argument('--n', type=str, help='Number of pixel values approximated to keep')
  54. parser.add_argument('--each_row', type=str, help='Keep only values from specific row', default=1)
  55. parser.add_argument('--each_column', type=str, help='Keep only values from specific column', default=1)
  56. args = parser.parse_args()
  57. param_n = args.n
  58. param_each_row = args.each_row
  59. param_each_column = args.each_column
  60. compute_files(param_n, param_each_row, param_each_column)
  61. if __name__== "__main__":
  62. main()