Shiwanni's picture
Update app.py
b9fbf02 verified
raw
history blame contribute delete
1.87 kB
from flask import Flask, request, jsonify
from PIL import Image
import requests
from io import BytesIO
import torch
from transformers import AutoImageProcessor, AutoModelForImageClassification
app = Flask(__name__)
# Load model and processor (cache them for better performance)
MODEL_NAME = "dima806/deepfake_vs_real_image_detection"
processor = AutoImageProcessor.from_pretrained(MODEL_NAME)
model = AutoModelForImageClassification.from_pretrained(MODEL_NAME)
@app.route('/detect', methods=['POST'])
def detect_deepfake():
try:
# Get image from request
if 'file' not in request.files:
return jsonify({"error": "No file uploaded"}), 400
file = request.files['file']
if file.filename == '':
return jsonify({"error": "No selected file"}), 400
# Open and process image
image = Image.open(file.stream).convert("RGB")
# Preprocess image
inputs = processor(images=image, return_tensors="pt")
# Run inference
with torch.no_grad():
outputs = model(**inputs)
# Get probabilities
probabilities = torch.nn.functional.softmax(outputs.logits, dim=-1)
real_prob = round(probabilities[0][0].item() * 100, 2)
fake_prob = round(probabilities[0][1].item() * 100, 2)
# Determine result
result = "Real" if real_prob > fake_prob else "Fake"
confidence = real_prob if result == "Real" else fake_prob
return jsonify({
"result": result,
"confidence": confidence,
"real_probability": real_prob,
"fake_probability": fake_prob
})
except Exception as e:
return jsonify({"error": str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)