import os import pickle import cv2 import pandas as pd import numpy as np from utils.utils import extract_features_from_image def run_inference(TEST_IMAGE_PATH, pipeline_model, SUBMISSION_CSV_SAVE_PATH): test_images = sorted(os.listdir(TEST_IMAGE_PATH)) image_feature_list = [] for test_image in test_images: path_to_image = os.path.join(TEST_IMAGE_PATH, test_image) image = cv2.imread(path_to_image) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) features = extract_features_from_image(image) image_feature_list.append(features) features_multiclass = np.array(image_feature_list) multiclass_predictions = pipeline_model.predict(features_multiclass) df_predictions = pd.DataFrame(columns=["file_name", "category_id"]) for i in range(len(test_images)): file_name = test_images[i] new_row = pd.DataFrame({ "file_name": file_name, "category_id": multiclass_predictions[i] }, index=[0]) df_predictions = pd.concat([df_predictions, new_row], ignore_index=True) df_predictions.to_csv(SUBMISSION_CSV_SAVE_PATH, index=False) print(f"Saved predictions to: {SUBMISSION_CSV_SAVE_PATH}") if __name__ == "__main__": current_directory = os.path.dirname(os.path.abspath(__file__)) TEST_IMAGE_PATH = "/tmp/data/test_images" MODEL_NAME = "multiclass_model.pkl" MODEL_PATH = os.path.join(current_directory, MODEL_NAME) k = 100 SUBMISSION_CSV_SAVE_PATH = os.path.join(current_directory, "submission.csv") # load the model with open(MODEL_PATH, 'rb') as file: svm_model = pickle.load(file) run_inference(TEST_IMAGE_PATH, svm_model, SUBMISSION_CSV_SAVE_PATH)