sanatio / test_model.py
kfokesfojefoef's picture
Upload 17 files
247e300 verified
Raw
History Blame Contribute Delete
2.7 kB
import os
import cv2
import torch
import torch.nn as nn
import numpy as np
from torchvision import models
MODEL_PATH = "ai_detector_model.pth"
TEST_FOLDER_NAME = "test"
IMAGE_SIZE = 224
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
if not os.path.exists(MODEL_PATH):
print(f"Error: Trained model file '{MODEL_PATH}' not found. Wait for training to finish.")
exit()
print("Loading trained AI model...")
model = models.resnet18()
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 2)
model.load_state_dict(torch.load(MODEL_PATH, map_location=device))
model = model.to(device)
model.eval()
if not os.path.exists(TEST_FOLDER_NAME):
print(f"Error: Folder '{TEST_FOLDER_NAME}' not found!")
exit()
test_files = os.listdir(TEST_FOLDER_NAME)
valid_extensions = ('.jpg', '.jpeg', '.png', '.jfif', '.webp')
image_files = [f for f in test_files if f.lower().endswith(valid_extensions)]
if len(image_files) == 0:
print(f"No valid images found in '{TEST_FOLDER_NAME}' folder.")
exit()
print(f"Found {len(image_files)} images to test.\n")
print("--- Batch Detection Results ---")
for filename in image_files:
img_path = os.path.join(TEST_FOLDER_NAME, filename)
try:
img_array = np.fromfile(img_path, np.uint8)
img = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
if img is not None:
img_resized = cv2.resize(img, (IMAGE_SIZE, IMAGE_SIZE))
img_normalized = img_resized / 255.0
img_input = np.transpose(img_normalized, (2, 0, 1))
img_tensor = torch.tensor(img_input, dtype=torch.float32).unsqueeze(0).to(device)
with torch.no_grad():
outputs = model(img_tensor)
probabilities = torch.softmax(outputs, dim=1)
confidence, predicted = torch.max(probabilities, 1)
real_score = probabilities[0][0].item() * 100
ai_score = probabilities[0][1].item() * 100
print(f"File: {filename}")
if predicted.item() == 0:
print(f"-> Prediction: REAL IMAGE (Confidence: {real_score:.2f}%)")
else:
print(f"-> Prediction: AI GENERATED (Confidence: {ai_score:.2f}%)")
print(f"-> Full Breakdown - Real: {real_score:.1f}% | AI: {ai_score:.1f}%")
print("-" * 40)
else:
print(f"Could not read file: {filename}")
print("-" * 40)
except Exception as e:
print(f"Error processing file {filename}: {e}")
print("-" * 40)