|
|
|
from ultralytics import YOLO |
|
import os |
|
from glob import glob |
|
|
|
def run_inference(): |
|
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
|
model_path = os.path.join(base_dir, 'models', 'parts', 'weights', 'weights', 'best.pt') |
|
img_dir = os.path.join(base_dir, 'damage_detection_dataset', 'img') |
|
train_dir = os.path.join(base_dir, 'data', 'data_yolo_for_training', 'car_parts_damage_dataset', 'images', 'train') |
|
out_dir = os.path.join(base_dir, 'inference_results', 'parts') |
|
|
|
|
|
if not os.path.exists(model_path): |
|
print(f"Error: Model weights not found at {model_path}") |
|
return |
|
|
|
if not os.path.exists(img_dir): |
|
print(f"Error: Image directory not found at {img_dir}") |
|
return |
|
|
|
if not os.path.exists(train_dir): |
|
print(f"Warning: Training directory not found at {train_dir}") |
|
print("Will run inference on all images instead of just unseen ones") |
|
train_imgs = set() |
|
else: |
|
|
|
train_imgs = set(os.listdir(train_dir)) |
|
|
|
|
|
os.makedirs(out_dir, exist_ok=True) |
|
|
|
|
|
all_imgs = set(os.listdir(img_dir)) |
|
|
|
unseen_imgs = sorted(list(all_imgs - train_imgs)) |
|
|
|
if not unseen_imgs: |
|
print(f"No images found for inference in {img_dir}") |
|
return |
|
|
|
try: |
|
|
|
model = YOLO(model_path) |
|
|
|
|
|
class_names = ['headlamp', 'front_bumper', 'hood', 'door', 'rear_bumper'] |
|
|
|
|
|
for img_name in unseen_imgs: |
|
try: |
|
img_path = os.path.join(img_dir, img_name) |
|
results = model.predict( |
|
source=img_path, |
|
save=True, |
|
project=out_dir, |
|
name='', |
|
imgsz=640, |
|
conf=0.25, |
|
classes=list(range(len(class_names))) |
|
) |
|
print(f'Processed: {img_name}') |
|
except Exception as e: |
|
print(f"Error processing {img_name}: {str(e)}") |
|
continue |
|
|
|
print(f'Inference complete. Results saved to {out_dir}') |
|
|
|
except Exception as e: |
|
print(f"Error loading model: {str(e)}") |
|
return |
|
|
|
if __name__ == '__main__': |
|
run_inference() |
|
|