| import os
|
| import torch
|
| import easyocr
|
| from flask import Flask, request, jsonify, render_template
|
| from flask_cors import CORS
|
| import os
|
| from PIL import Image
|
| from transformers import AutoImageProcessor, AutoModelForImageClassification
|
|
|
| app = Flask(__name__)
|
| CORS(app)
|
|
|
| MODEL_NAME = "prithivMLmods/deepfake-detector-model-v1"
|
| UPLOAD_FOLDER = "uploads"
|
| os.makedirs(UPLOAD_FOLDER, exist_ok=True)
|
|
|
| print("Loading AI Models...")
|
|
|
| processor = AutoImageProcessor.from_pretrained(MODEL_NAME)
|
| model = AutoModelForImageClassification.from_pretrained(MODEL_NAME)
|
| reader = easyocr.Reader(['en'], gpu=False)
|
|
|
| print("All Models Loaded Successfully!")
|
|
|
| @app.route("/health")
|
| def health():
|
| return {"status": "ok"}, 200
|
|
|
| @app.route("/about")
|
| def about():
|
| return render_template("about.html")
|
|
|
| @app.route("/")
|
| def home():
|
| return render_template("index.html")
|
|
|
| @app.route("/terms")
|
| def terms():
|
| return render_template("terms.html")
|
|
|
| @app.route("/analyze", methods=["POST"])
|
| def analyze():
|
| file_path = None
|
| try:
|
| if "image" not in request.files:
|
| return jsonify({"error": "No image uploaded"}), 400
|
|
|
| file = request.files["image"]
|
|
|
| if file.filename == "":
|
| return jsonify({"error": "Empty file"}), 400
|
|
|
| file_path = os.path.join(UPLOAD_FOLDER, file.filename)
|
| file.save(file_path)
|
|
|
| img = Image.open(file_path)
|
| width, height = img.size
|
|
|
| bytes_size = os.path.getsize(file_path)
|
| size_mb = round(bytes_size / (1024 * 1024), 2)
|
|
|
| img_rgb = img.convert("RGB")
|
| result = reader.readtext(file_path)
|
| text = " ".join([r[1] for r in result]).strip()
|
|
|
| inputs = processor(images=img_rgb, return_tensors="pt")
|
| with torch.no_grad():
|
| outputs = model(**inputs)
|
| probs = torch.nn.functional.softmax(outputs.logits, dim=1).squeeze().tolist()
|
|
|
| fake_score = probs[0]
|
| real_score = probs[1]
|
| is_real = real_score > fake_score
|
| confidence = round((real_score if is_real else fake_score) * 100, 2)
|
|
|
| return jsonify({
|
| "analysis": {
|
| "is_real": bool(is_real),
|
| "confidence": confidence,
|
| "reason": "Likely Real" if is_real else "Likely AI Generated"
|
| },
|
| "text": text,
|
| "metadata": {
|
| "width": int(width),
|
| "height": int(height),
|
| "size_mb": float(size_mb)
|
| },
|
| "labels": ["deepfake-check", "ocr"]
|
| })
|
|
|
| except Exception as e:
|
| print("ERROR:", str(e))
|
| return jsonify({"error": str(e)}), 500
|
|
|
| finally:
|
| if file_path and os.path.exists(file_path):
|
| try:
|
| os.remove(file_path)
|
| except:
|
| pass
|
|
|
| if __name__ == "__main__":
|
| port = int(os.environ.get("PORT", 5000))
|
| app.run(host='0.0.0.0', port=port) |