xtremekratos's picture
init
6373602
Raw
History Blame Contribute Delete
2.65 kB
from typing import Dict, Any
import time
from huggingface_hub import hf_hub_download
from src.model import AIImageDetector
from src.models.model import Analysis, Attribute, ImageClassifierResult, Metadata
from src.helpers.image_utility_helper import load_image_resource
class AIImageClassifier2:
def __init__(self):
# Download model once during initialization
self.model_identifier = "Bombek1/ai-image-detector-siglip-dinov2"
self.model_path = hf_hub_download(
repo_id=self.model_identifier,
filename="pytorch_model.pt"
)
print(f"Model loaded from: {self.model_path}")
# Initialize detector
self.detector = AIImageDetector(self.model_path)
# =====================================
# Detect Function
# =====================================
def detect(self, image_path: str, image_type: str = None) -> Dict[str, Any]:
start_time = time.time()
# Load image using the separate function
pil_image, raw_bytes = load_image_resource(image_path, image_type)
if pil_image is None:
raise ValueError("Failed to load image from input")
# Predict
result = self.detector.predict(pil_image)
# Extract values
is_ai = result["prediction"].lower().startswith("ai")
ai_probability = float(result["probability"])
ai_confidence = ai_probability # Always reflect P(AI)
end_time = time.time()
processing_time = end_time - start_time
# Format to Pydantic model
formatted_result = ImageClassifierResult(
analysis=Analysis(
is_ai=is_ai,
ai_confidence=ai_confidence
),
attributes=[
Attribute(
type="image_classifier_2",
weight=1.0,
ai_confidence=ai_confidence,
is_ai=is_ai,
parameters=[
{
"model": self.model_identifier,
"prediction": result["prediction"],
"confidence": float(result["confidence"]),
"probability_ai": ai_probability
}
]
)
],
metadata=Metadata(start_time=start_time, end_time=end_time, processing_time=processing_time)
)
return formatted_result.model_dump()
if __name__ == "__main__":
classifier = AIImageClassifier2()
response = classifier.detect("/path/to/image.jpg")
print(response)