import tkinter as tk
from tkinter import filedialog, messagebox
from PIL import Image, ImageTk
import exifread
import requests
import io
# -----------------------
# Metadata Extraction
# -----------------------
def extract_metadata(image_path):
with open(image_path, 'rb') as f:
tags = exifread.process_file(f)
return {tag: str(tags[tag]) for tag in tags.keys()}
# -----------------------
# Reverse Search (TinEye / Google)
# -----------------------
def reverse_search(image_path):
# Normally we would use an API like TinEye or Google Custom Search.
# For demo, we simulate by uploading image to https://postimages.org and returning link.
try:
with open(image_path, 'rb') as f:
files = {"file": f}
r = requests.post("https://api.imgbb.com/1/upload",
files=files,
params={"key": "YOUR_IMGBB_API_KEY"})
if r.status_code == 200:
return r.json()["data"]["url"]
except Exception as e:
return f"Reverse search not available: {e}"
return "Reverse search failed."
# -----------------------
# GUI Functions
# -----------------------
def open_image():
file_path = filedialog.askopenfilename(filetypes=[("Image Files", "*.jpg;*.jpeg;*.png")])
if not file_path:
return
# Show image
img = Image.open(file_path)
img.thumbnail((250, 250))
img_tk = ImageTk.PhotoImage(img)
lbl_image.config(image=img_tk)
lbl_image.image = img_tk
# Metadata
metadata = extract_metadata(file_path)
txt_metadata.delete(1.0, tk.END)
if metadata:
for k, v in metadata.items():
txt_metadata.insert(tk.END, f"{k}: {v}\n")
else:
txt_metadata.insert(tk.END, "No metadata found.\n")
# Reverse search (optional)
link = reverse_search(file_path)
txt_metadata.insert(tk.END, f"\nš Reverse Search Hint: {link}\n")
# -----------------------
# Main App
# -----------------------
root = tk.Tk()
root.title("š° Fake News Image Detector")
root.geometry("600x500")
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
btn_upload = tk.Button(frame_top, text="š¤ Upload Image", command=open_image, font=("Arial", 12, "bold"))
btn_upload.pack()
lbl_image = tk.Label(root)
lbl_image.pack(pady=10)
lbl_meta = tk.Label(root, text="Image Metadata & Clues:", font=("Arial", 12, "bold"))
lbl_meta.pack()
txt_metadata = tk.Text(root, wrap=tk.WORD, width=70, height=15)
txt_metadata.pack(pady=10)
root.mainloop()
No comments:
Post a Comment