78 lines
3 KiB
Python
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}")
|