Skip to content
Snippets Groups Projects
Commit 84dfcf9c authored by gospodnetic's avatar gospodnetic
Browse files

Handle directories in ovp file list, output complete tex table

parent 11a3dd27
No related branches found
No related tags found
No related merge requests found
...@@ -23,7 +23,7 @@ class Benchmark: ...@@ -23,7 +23,7 @@ class Benchmark:
else: else:
self.methods_per_approach[approach] = [method] self.methods_per_approach[approach] = [method]
def generate_tex_table(self): def generate_performance_tex_table(self):
tex_file = open("performance_table.tex", "w") tex_file = open("performance_table.tex", "w")
tex_file.write("\n\\begin{table*}\n") tex_file.write("\n\\begin{table*}\n")
...@@ -77,6 +77,34 @@ class Benchmark: ...@@ -77,6 +77,34 @@ class Benchmark:
tex_file.write("\n\\end{table*}\n") tex_file.write("\n\\end{table*}\n")
tex_file.close() tex_file.close()
# \usepackage{longtable} needed.
def generate_complete_tex_table(self):
tex_file = open("complete_table.tex", "w")
for model in self.log_container_per_model:
tex_file.write("\n\\begin{longtable}{|c c c c c c c c|}\n")
tex_file.write("\\hline\n")
first_log = self.log_container_per_model[model].logs[0]
tex_file.write("\\multicolumn{{8}}{{|c|}}{{{} ({})}}\\\\\n".format(model, first_log.model["face_count"]))
tex_file.write("Method & Parameter & \\#VPC & \\#Discarded & \\#OVP & RT[S] & NBV[s] & coverage \\\\\n")
for approach in self.methods_per_approach:
logs_per_approach = self.log_container_per_model[model].get_logs_by_approach(approach)
if len(logs_per_approach) == 0:
continue
for log in logs_per_approach:
tex_file.write("{} & {} & {} & {} & {} & {} & {} & {} \\\\\n".format(
log.VPC["method"],
log.VPC["generation_parameter"],
log.VPC["count"] + log.VPC["discarded_count"],
log.VPC["discarded_count"],
len(log.optimization["OVP"]),
util.set_precision(log.timing["visibility_matrix_sec"], 2),
util.set_precision(log.timing["optimization_sec"], 2),
util.set_precision(log.coverage["percent_fraction"], 2)))
tex_file.write("\\hline\n")
tex_file.write("\\end{longtable}\n")
# Average ray tracing duration. # Average ray tracing duration.
def get_average_RT_duration_per_model(self): def get_average_RT_duration_per_model(self):
avgs = {} avgs = {}
......
...@@ -5,6 +5,7 @@ import sys ...@@ -5,6 +5,7 @@ import sys
class Log: class Log:
def __init__(self, log_filename): def __init__(self, log_filename):
self.filename = ""
self.camera_parameters = { self.camera_parameters = {
"focusing_distance_mm": 0, "focusing_distance_mm": 0,
"focal_length": 0, "focal_length": 0,
...@@ -108,9 +109,10 @@ class Log: ...@@ -108,9 +109,10 @@ class Log:
try: try:
self.__check_file_structure(log_data) self.__check_file_structure(log_data)
except Exception as e: except Exception as e:
print("Error: {}".format(e)) # print("Error: {}".format(e))
raise Exception("File {} invalid OVP file".format(log_filename)) raise Exception("File {} invalid OVP file".format(log_filename))
self.filename = log_filename
self.camera_parameters["focusing_distance_mm"] = log_data["Log"]["Camera"]["DistanceMM"] self.camera_parameters["focusing_distance_mm"] = log_data["Log"]["Camera"]["DistanceMM"]
self.camera_parameters["focal_length"] = log_data["Log"]["Camera"]["FocalLength"] self.camera_parameters["focal_length"] = log_data["Log"]["Camera"]["FocalLength"]
self.camera_parameters["model"] = log_data["Log"]["Camera"]["Model"] self.camera_parameters["model"] = log_data["Log"]["Camera"]["Model"]
...@@ -242,7 +244,10 @@ class Log: ...@@ -242,7 +244,10 @@ class Log:
def get_discarded_quotient(self): def get_discarded_quotient(self):
total_VPC = self.VPC["count"] + self.VPC["discarded_count"] total_VPC = self.VPC["count"] + self.VPC["discarded_count"]
return self.VPC["discarded_count"] / total_VPC if total_VPC == 0:
return 1
else:
return self.VPC["discarded_count"] / total_VPC
# Utilities # Utilities
def convert_cumulative(self, value_array): def convert_cumulative(self, value_array):
......
[ [
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--0.5f--OVP--ThinPlate--0.994921_coverage_2020-05-16_03-17-40_VPC_dist10_ThinPlate_th0.5f_log.json", "/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/WithFiltering/face_shield",
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--0.25f--OVP--ThinPlate--0.992063_coverage_2020-05-16_04-31-59_VPC_dist10_ThinPlate_th0.25f_log.json", "/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/WithFiltering/cumulative_opt_results2.txt",
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--0.75f--OVP--ThinPlate--0.990636_coverage_2020-05-16_06-52-30_VPC_dist10_ThinPlate_th0.75f_log.json", "/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/WithFiltering/gear--10--OVP--UniformSphere--0.000000_coverage_2020-04-25_01-27-59_gear--sphere-centroid--VPC--10_generated_positions_2020-04-24_21-27-21_log.json",
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--1f--OVP--ThinPlate--0.988589_coverage_2020-05-16_07-43-20_VPC_dist10_ThinPlate_th1f_log.json", "/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/WithFiltering/gear--10--OVP--UniformSphereAvgBbox--0.065327_coverage_2020-04-27_20-17-18_gear--sphere_avg_bbox-centroid--VPC--10_generated_positions_2020-04-27_17-15-45_log.json"
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--30a--OVP--NormalDev--0.995471_coverage_2020-05-15_13-35-19_VPC_dist10_NormalDev_th30a_log.json",
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--45a--OVP--NormalDev--0.990657_coverage_2020-05-15_21-14-54_VPC_dist10_NormalDev_th45a_log.json",
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--60a--OVP--NormalDev--0.994068_coverage_2020-05-16_01-00-40_VPC_dist10_NormalDev_th60a_log.json",
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--90a--OVP--NormalDev--0.982161_coverage_2020-05-16_02-51-49_VPC_dist10_NormalDev_th90a_log.json",
"/home/pastrva/Projects/VirtualImageProcessing/Fileserver/Papers/2020_Generate_and_Test_Comparison/Results/Dennis_VPCs-OVP_no_filtering/2020-04-30_Dennis_VPC_optimization/MissingHirthAndTimeShaft_OVPs/gear--10000f--OVP--ThinPlate--0.951490_coverage_2020-05-16_08-18-28_VPC_dist10_ThinPlate_th10000f_log.json"
] ]
...@@ -4,9 +4,25 @@ from Log import Log ...@@ -4,9 +4,25 @@ from Log import Log
from LogContainer import LogContainer from LogContainer import LogContainer
from Vis import Vis from Vis import Vis
import os
import pathlib
import sys import sys
import json import json
def filter_json(filenames):
return list(filter(lambda x: pathlib.Path(x).suffix == '.json', filenames))
def extract_json_filenames(json_list):
ovp_filenames = []
for path in json_list:
if os.path.isdir(path):
for (dirpath, dirnames, filenames) in os.walk(path):
ovp_filenames.extend(list(map(lambda x: dirpath + "/" + x, filenames)))
break
else:
ovp_filenames.append(path)
return filter_json(ovp_filenames)
def main(): def main():
if len(sys.argv) > 2: if len(sys.argv) > 2:
methods_per_approach_filename = sys.argv[1] methods_per_approach_filename = sys.argv[1]
...@@ -23,26 +39,29 @@ def main(): ...@@ -23,26 +39,29 @@ def main():
with open(methods_per_approach_filename) as methods_per_approach_file: with open(methods_per_approach_filename) as methods_per_approach_file:
methods_per_approach = json.load(methods_per_approach_file) methods_per_approach = json.load(methods_per_approach_file)
filenames = extract_json_filenames(ovp_paths)
# Load log files and sort them per model. # Load log files and sort them per model.
log_container_per_model = {} log_container_per_model = {}
logs = [] logs = []
for filename in ovp_paths: for idx, filename in enumerate(filenames):
log = Log(filename) print("Loading file {}/{} ".format(idx+1, len(filenames)), end="\r")
try: try:
log = Log(filename)
logs.append(log) logs.append(log)
except Exception as e: except Exception as e:
print("Error: {}\nSkipping file".format(e)) # TODO add verbose
# print("Error: {}\nSkipping file".format(e))
continue continue
model_name = log.model["name"] model_name = log.model["name"]
if model_name not in log_container_per_model: if model_name not in log_container_per_model:
print(model_name)
log_container_per_model[model_name] = LogContainer(methods_per_approach) log_container_per_model[model_name] = LogContainer(methods_per_approach)
try: try:
log_container_per_model[model_name].add_log(log) log_container_per_model[model_name].add_log(log)
except Exception as e: except Exception as e:
print("Error: {}\nSkipping file".format(e)) # print("Error: {}\nSkipping file".format(e))
continue continue
print("Loaded {} log files.".format(len(logs))) print("Loaded {} log files.".format(len(logs)))
...@@ -58,7 +77,8 @@ def main(): ...@@ -58,7 +77,8 @@ def main():
benchmark = Benchmark() benchmark = Benchmark()
benchmark.set_log_containers(log_container_per_model) benchmark.set_log_containers(log_container_per_model)
benchmark.generate_tex_table() benchmark.generate_performance_tex_table()
benchmark.generate_complete_tex_table()
benchmark.get_average_RT_duration_per_model() benchmark.get_average_RT_duration_per_model()
benchmark.get_average_discarded_per_approach() benchmark.get_average_discarded_per_approach()
benchmark.get_average_discarded_per_model() benchmark.get_average_discarded_per_model()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment