|
import os
|
|
from PIL import Image
|
|
|
|
class FileProcessor:
|
|
PARTS_NAMES = [
|
|
"Quarter-panel", "Front-wheel", "Back-window", "Trunk", "Front-door", "Rocker-panel",
|
|
"Grille", "Windshield", "Front-window", "Back-door", "Headlight", "Back-wheel",
|
|
"Back-windshield", "Hood", "Fender", "Tail-light", "License-plate", "Front-bumper",
|
|
"Back-bumper", "Mirror", "Roof"
|
|
]
|
|
|
|
DAMAGE_NAMES = [
|
|
"Broken part", "Scratch", "Dent", "Paint chip"
|
|
]
|
|
|
|
@staticmethod
|
|
def convert_normalized_to_original(coords, width, height):
|
|
original_coords = []
|
|
for i in range(0, len(coords), 2):
|
|
x = coords[i] * width
|
|
y = coords[i + 1] * height
|
|
original_coords.extend([x, y])
|
|
return original_coords
|
|
|
|
def process_file(self, file_path, class_names, image_size):
|
|
width, height = image_size
|
|
with open(file_path, "r") as f:
|
|
lines = f.readlines()
|
|
|
|
new_lines = []
|
|
for line in lines:
|
|
parts = line.strip().split()
|
|
class_index = int(parts[0])
|
|
coords = list(map(float, parts[1:]))
|
|
original_coords = self.convert_normalized_to_original(coords, width, height)
|
|
class_name = class_names[class_index]
|
|
new_line = f"{class_name} " + " ".join(map(str, original_coords)) + "\n"
|
|
new_lines.append(new_line)
|
|
|
|
with open(file_path, "w") as f:
|
|
f.writelines(new_lines)
|
|
|
|
def process_folder(self, folder_path, class_names):
|
|
labels_folder = os.path.join(folder_path, "labels")
|
|
for file in os.listdir(folder_path):
|
|
if file.endswith(".jpg"):
|
|
image_path = os.path.join(folder_path, file)
|
|
if os.path.exists(image_path):
|
|
image = Image.open(image_path)
|
|
image_size = image.size
|
|
txt_file = file.replace(".jpg", ".txt")
|
|
txt_file_path = os.path.join(labels_folder, txt_file)
|
|
if os.path.exists(txt_file_path):
|
|
self.process_file(txt_file_path, class_names, image_size)
|
|
else:
|
|
print(f"Text file {txt_file_path} not found.")
|
|
else:
|
|
print(f"Image {image_path} not found.")
|
|
|
|
def process_output_folder(self, output_folder):
|
|
parts_folder = os.path.join(output_folder, "parts")
|
|
damage_folder = os.path.join(output_folder, "damage")
|
|
|
|
self.process_folder(parts_folder, self.PARTS_NAMES)
|
|
self.process_folder(damage_folder, self.DAMAGE_NAMES)
|
|
|