SignsDetectionAI/generate_dataset.py
2025-01-05 22:53:09 +01:00

78 lines
3 KiB
Python

from PIL import Image, ImageDraw, ImageFont
import os
# Répertoire pour sauvegarder les images générées
output_dir = "data/catalogue"
# Définir la taille de la police et de l'image
font_size = 20 # Ajustez pour la taille souhaitée
image_size = (28, 28) # Taille de l'image pour chaque caractère
# Listes des caractères à générer
uppercase_letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
lowercase_letters = "abcdefghijklmnopqrstuvwxyz"
numbers = "0123456789"
# Chemin vers le fichier de police (à mettre à jour avec un chemin valide sur votre système)
font_path = "arial.ttf" # Assurez-vous que cette police est disponible
# Créer le répertoire de sortie s'il n'existe pas
os.makedirs(output_dir, exist_ok=True)
# Fonction pour créer des images de caractères
def create_character_image(character, output_path):
"""
Crée une image contenant un caractère spécifique et la sauvegarde dans le chemin donné.
:param character: Caractère à dessiner
:param output_path: Chemin où sauvegarder l'image
"""
# Créer une image vierge avec un fond blanc
img = Image.new("RGB", image_size, "white")
draw = ImageDraw.Draw(img)
# Charger la police
try:
font = ImageFont.truetype(font_path, font_size)
except IOError:
print(f"Fichier de police introuvable : {font_path}")
return
# Calculer la position du texte pour centrer le caractère
bbox = font.getbbox(character)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
text_x = (image_size[0] - text_width) // 2
text_y = (image_size[1] - text_height) // 2
# Dessiner le caractère sur l'image
draw.text((text_x, text_y), character, font=font, fill="black")
# Sauvegarder l'image
img.save(output_path)
# Générer des images pour les lettres majuscules et minuscules
for upper, lower in zip(uppercase_letters, lowercase_letters):
upper_dir = os.path.join(output_dir, f"{upper}_") # Sous-dossier pour les majuscules
lower_dir = os.path.join(output_dir, upper) # Sous-dossier pour les minuscules
os.makedirs(upper_dir, exist_ok=True) # Créer le sous-dossier pour les majuscules
os.makedirs(lower_dir, exist_ok=True) # Créer le sous-dossier pour les minuscules
# Sauvegarder l'image de la lettre majuscule
upper_image_path = os.path.join(upper_dir, f"{upper}.png")
create_character_image(upper, upper_image_path)
# Sauvegarder l'image de la lettre minuscule
lower_image_path = os.path.join(lower_dir, f"{lower}.png")
create_character_image(lower, lower_image_path)
# Générer des images pour les chiffres
for num in numbers:
num_dir = os.path.join(output_dir, num) # Sous-dossier pour chaque chiffre
os.makedirs(num_dir, exist_ok=True) # Créer le sous-dossier
num_image_path = os.path.join(num_dir, f"{num}.png")
create_character_image(num, num_image_path)
print(f"Les images des lettres et des chiffres ont été générées dans le répertoire : {output_dir}")