File size: 2,558 Bytes
f1914db
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
"""

Inference script for Hugging Face competition submission

Fixed version combining baseline structure with enhanced features

"""

import os
import pickle
import cv2
import pandas as pd
import numpy as np
from utils.utils import extract_features_from_image, apply_pca_transform


def run_inference(TEST_IMAGE_PATH, svm_model, pca_params, SUBMISSION_CSV_SAVE_PATH):
    """

    Run inference on test images

    

    Args:

        TEST_IMAGE_PATH: Path to test images (/tmp/data/test_images)

        svm_model: Trained SVM model

        pca_params: Dictionary containing PCA transformation parameters

        SUBMISSION_CSV_SAVE_PATH: Path to save submission.csv

    """
    
    # Load test images
    test_images = os.listdir(TEST_IMAGE_PATH)
    test_images.sort()
    
    # Extract features from all test images
    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)
        
        # Extract features (using enhanced features by default)
        image_features = extract_features_from_image(image)
        
        image_feature_list.append(image_features)
    
    features_array = np.array(image_feature_list)
    
    # Apply PCA transformation using saved parameters
    features_reduced = apply_pca_transform(features_array, pca_params)
    
    # Run predictions
    predictions = svm_model.predict(features_reduced)
    
    # Create submission CSV
    df_predictions = pd.DataFrame({
        "file_name": test_images,
        "category_id": predictions
    })
    
    df_predictions.to_csv(SUBMISSION_CSV_SAVE_PATH, index=False)


if __name__ == "__main__":
    
    # Paths
    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)
    
    PCA_PARAMS_NAME = "pca_params.pkl"
    PCA_PARAMS_PATH = os.path.join(current_directory, PCA_PARAMS_NAME)
    
    SUBMISSION_CSV_SAVE_PATH = os.path.join(current_directory, "submission.csv")
    
    # Load trained SVM model
    with open(MODEL_PATH, 'rb') as file:
        svm_model = pickle.load(file)
    
    # Load PCA parameters
    with open(PCA_PARAMS_PATH, 'rb') as file:
        pca_params = pickle.load(file)
    
    # Run inference
    run_inference(TEST_IMAGE_PATH, svm_model, pca_params, SUBMISSION_CSV_SAVE_PATH)