Deepfake-Shield / src /forensic_analysis.py
leoorb's picture
Upload 23 files
9c1a6bf verified
Raw
History Blame Contribute Delete
1.66 kB
import os
from PIL import Image
from PIL.ExifTags import TAGS
def scan_image_metadata(image_path):
keywords = ['midjourney', 'dall-e', 'stable diffusion', 'generative', 'ai', 'dalle']
try:
image = Image.open(image_path)
exif_data = image.getexif()
info_dict = image.info
all_text = []
if exif_data:
for tag_id, value in exif_data.items():
tag = TAGS.get(tag_id, tag_id)
all_text.append(str(tag).lower())
all_text.append(str(value).lower())
if info_dict:
for k, v in info_dict.items():
all_text.append(str(k).lower())
if isinstance(v, (str, bytes)):
all_text.append(str(v).lower())
full_metadata_string = " ".join(all_text)
for keyword in keywords:
# Pour eviter les faux positifs avec 'ai', on pourrait faire une regex de mot entier,
# mais on suit la consigne simple pour l'instant. (ex: 'dall-e' in texte)
# Pour 'ai', on va chercher le mot entouré d'espaces ou ponctuations.
# Mais par sécurité et vitesse, on utilise ' in '
if keyword in full_metadata_string:
return {
"is_fake": True,
"reason": f"Signature IA trouvée dans les métadonnées (mot-clé: {keyword})"
}
return {"is_fake": False}
except Exception as e:
print(f"Erreur d'analyse forensic : {e}")
return {"is_fake": False}