clip-model / app.py
JonSnow1512's picture
Create app.py
5642006 verified
from PIL import Image
import torch
import joblib
import numpy as np
from transformers import CLIPProcessor, CLIPModel
import gradio as gr
from config import DEVICE, MODEL_SAVE_PATH
# Load models
clip_model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32").to(DEVICE)
clip_processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32")
classifier = joblib.load(MODEL_SAVE_PATH)
label_encoder = joblib.load("label_encoder.joblib")
def classify_image(image):
image = image.convert("RGB")
inputs = clip_processor(images=image, return_tensors="pt").to(DEVICE)
with torch.no_grad():
image_features = clip_model.get_image_features(**inputs)
image_features = image_features / image_features.norm(p=2, dim=-1, keepdim=True)
features = image_features.cpu().numpy()
pred = classifier.predict(features)
label = label_encoder.inverse_transform(pred)[0]
return f"Predicted Class: {label}"
gr.Interface(
fn=classify_image,
inputs=gr.Image(type="pil"),
outputs="text",
title="CLIP Model Classifier",
description="Upload an image. The model will classify it using CLIP + a custom classifier."
).launch()