import os import csv from Damage_calculation import DamageCalculator class CSVGenerator: def __init__(self, output_folder): self.damage_folder = os.path.join(output_folder, 'damage/labels') self.parts_folder = os.path.join(output_folder, 'parts/labels') self.output_csv = os.path.join(output_folder, 'damage_estimation.csv') self.calculator = DamageCalculator() def process_files(self): damage_files = sorted(os.listdir(self.damage_folder)) parts_files = sorted(os.listdir(self.parts_folder)) total_cost_min = 0 total_cost_max = 0 damage_data = [] with open(self.output_csv, 'w', newline='') as csvfile: fieldnames = ['Car Parts', 'Damage Type', 'Damage Count', 'Severity', 'Estimated Cost Range'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for damage_file, parts_file in zip(damage_files, parts_files): damage_path = os.path.join(self.damage_folder, damage_file) parts_path = os.path.join(self.parts_folder, parts_file) damage_classes, damage_polygons = self.calculator.parse_coordinates(damage_path) part_classes, part_polygons = self.calculator.parse_coordinates(parts_path) damage_polygons = list(zip(damage_classes, damage_polygons)) part_polygons = list(zip(part_classes, part_polygons)) intersection_info = self.calculator.calculate_intersection_area(damage_polygons, part_polygons) for info in intersection_info: writer.writerow({ 'Car Parts': info['part_class'], 'Damage Type': info['damage_class'], 'Damage Count': info['count'], 'Severity': info['severity'], 'Estimated Cost Range': f"Rs. {info['cost_min']}-{info['cost_max']}" }) total_cost_min += info['cost_min'] total_cost_max += info['cost_max'] damage_data.append({ 'damage_class': info['damage_class'], 'part_class': info['part_class'], 'coverage_percentage': info['coverage_percentage'] }) writer.writerow({ 'Car Parts': 'Total', 'Damage Type': '', 'Damage Count': '', 'Severity': '', 'Estimated Cost Range': f"Rs. {total_cost_min}-{total_cost_max}" }) return damage_data def main(output_folder): generator = CSVGenerator(output_folder) generator.process_files() if __name__ == "__main__": output_folder = 'Output' main(output_folder)