Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import hashlib
- from PIL import Image
- import exifread
- import cv2
- import numpy as np
- def is_image_file(file_path):
- valid_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.gif']
- _, ext = os.path.splitext(file_path)
- return ext.lower() in valid_extensions
- def extraire_metadonnees(image_path):
- """
- Extrait les métadonnées EXIF d'une image.
- """
- try:
- with open(image_path, 'rb') as f:
- tags = exifread.process_file(f, details=False)
- if tags:
- print("\n=== Métadonnées EXIF ===")
- for tag in tags:
- print(f"{tag}: {tags[tag]}")
- else:
- print("\n[Avertissement] Aucune métadonnée EXIF trouvée.")
- except Exception as e:
- print(f"[Erreur] Impossible d'extraire les métadonnées EXIF: {e}")
- def calculer_hash(image_path):
- """
- Calcule le hash MD5 et SHA256 d'une image pour vérifier son intégrité.
- """
- try:
- hash_md5 = hashlib.md5()
- hash_sha256 = hashlib.sha256()
- with open(image_path, 'rb') as f:
- for chunk in iter(lambda: f.read(4096), b""):
- hash_md5.update(chunk)
- hash_sha256.update(chunk)
- print("\n=== Hash de l'Image ===")
- print(f"MD5: {hash_md5.hexdigest()}")
- print(f"SHA256: {hash_sha256.hexdigest()}")
- except Exception as e:
- print(f"[Erreur] Impossible de calculer le hash: {e}")
- def analyse_basique(image_path):
- """
- Réalise une analyse basique pour détecter des anomalies ou manipulations.
- """
- try:
- # Charger l'image en niveaux de gris
- image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
- if image is None:
- print("[Erreur] OpenCV n'a pas pu charger l'image. Vérifiez que le chemin est correct et que le format est pris en charge.")
- return
- # Appliquer une détection de bord
- edges = cv2.Canny(image, 100, 200)
- # Calculer le pourcentage de pixels avec des bords
- edge_pixels = np.sum(edges > 0)
- total_pixels = edges.size
- edge_ratio = (edge_pixels / total_pixels) * 100
- print("\n=== Analyse Basique de l'Image ===")
- print(f"Ratio de pixels avec des bords détectés: {edge_ratio:.2f}%")
- # Interprétation simple
- if edge_ratio < 5:
- print("[Info] L'image semble avoir peu de détails. Possible manipulation ou image de basse qualité.")
- elif 5 <= edge_ratio < 20:
- print("[Info] L'image a un niveau de détail moyen.")
- else:
- print("[Info] L'image est riche en détails. Peu de chances de manipulation évidente.")
- except Exception as e:
- print(f"[Erreur] Erreur lors de l'analyse de l'image: {e}")
- def afficher_menu():
- print("\n===== Outil Forensique d'Analyse de Photos =====")
- print("1) Extraire les métadonnées EXIF")
- print("2) Calculer le hash de l'image")
- print("3) Analyse basique de l'image")
- print("4) Exécuter toutes les analyses")
- print("5) Quitter")
- def main():
- print("Bienvenue dans l'Outil Forensique d'Analyse de Photos.")
- image_path = input("Entrez le chemin de l'image à analyser: ").strip()
- if not os.path.isfile(image_path):
- print("[Erreur] Le fichier spécifié n'existe pas.")
- return
- if not is_image_file(image_path):
- print("[Erreur] Le fichier spécifié n'est pas un format d'image pris en charge.")
- return
- while True:
- afficher_menu()
- choix = input("Choisissez une option [1-5]: ").strip()
- if choix == "1":
- extraire_metadonnees(image_path)
- elif choix == "2":
- calculer_hash(image_path)
- elif choix == "3":
- analyse_basique(image_path)
- elif choix == "4":
- extraire_metadonnees(image_path)
- calculer_hash(image_path)
- analyse_basique(image_path)
- elif choix == "5":
- print("Merci d'avoir utilisé l'outil forensique. Au revoir!")
- break
- else:
- print("[Erreur] Choix invalide. Veuillez réessayer.")
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement