Comment générer des images à l’aide de l’API OpenAI et de DALL·E 2 en Python

Si vous avez déjà utilisé ChatGPT, vous avez été témoin de son intuition. Avec les API d’OpenAI, la génération de code, la complétion de texte, la comparaison de texte, la formation de modèles et la génération d’images sont toutes dans le sac que les développeurs peuvent explorer et intégrer dans les applications.


Dans ce didacticiel, vous apprendrez à utiliser l’API d’OpenAI avec Python pour générer, modifier et modifier des images à l’aide d’invites en langage naturel.


Premiers pas avec OpenAI en utilisant Python

Vous devez configurer quelques éléments avant de commencer ce didacticiel. Tout d’abord, assurez-vous d’avoir installé la dernière version de Python sur votre ordinateur. Si vous utilisez une distribution Linux comme Ubuntu, vous voudrez peut-être aussi voir comment installer Python sur Ubuntu.

Créez un nouveau dossier pour votre projet et ouvrez votre ligne de commande dans le répertoire de votre projet.

Vient ensuite l’installation du package OpenAI. Vous devez installer pour convertir des images en RGBA tout en utilisant le point de terminaison d’édition d’image. Vous pouvez également installer ; vous l’utiliserez pour masquer les clés secrètes.

Nous vous recommandons de créer un environnement virtuel Python dédié pour isoler les dépendances.

Le code utilisé dans ce projet est disponible dans un Référentiel GitHub et est libre d’utilisation sous la licence MIT.

Pour installer les packages , et , exécutez la commande suivante dans le terminal :

 pip install openai python-dotenv pillow

Dirigez-vous maintenant vers OpenAI et connectez-vous à votre tableau de bord pour récupérer votre clé API :

  1. Une fois connecté, cliquez sur l’icône de votre profil en haut à droite.

  2. Aller à . Si votre clé API n’est pas visible, cliquez pour en générer une nouvelle.
    Ouvrir la boîte modale de la clé API

  3. Copiez la clé secrète générée et collez-la dans un endroit sûr sur votre ordinateur. Vous voudrez peut-être le coller dans un fichier de variable d’environnement dans le répertoire racine de votre projet pour des raisons de sécurité.

Comment générer et modifier des images avec l’API OpenAI en Python

La génération d’images de l’API OpenAI comporte des points de terminaison pour générer de nouvelles images, créer des variations d’images et les éditer.

Dans les sections suivantes, vous explorerez ces points de terminaison pour générer, modifier, ajuster et télécharger des images à l’aide d’invites en langage naturel.

Génération d’images à l’aide de l’API OpenAI

Le point de terminaison de génération d’image accepte trois arguments de mots clés. Ceux-ci incluent , et .

Le mot-clé est une chaîne de texte décrivant l’image que vous souhaitez générer, tandis que le nombre d’images à générer lors d’un appel API. C’est la taille de l’image, et au moment de l’écriture, elle n’accepte que 256×256, 512×512 et 1024×1024 pixels, selon l’officiel OpenAI documentation sur la génération d’images.

Le code suivant génère des images à l’aide d’invites en langage naturel et affiche leur URL (adresses d’image) :

 import openai
import os
import requests
from dotenv import load_dotenv
from PIL import Image
load_dotenv()

class ImageGenerator:
    def __init__(self) -> str:
        self.image_url: str
        openai.api_key = os.getenv("OPENAI_API_KEY")
        self.APIKey = openai.api_key
        self.name = None

    def generateImage(self, Prompt, ImageCount, ImageSize):
        try:
            self.APIKey
            response = openai.Image.create(
            prompt = Prompt,
            n = ImageCount,
            size = ImageSize,
            )
            self.image_url = response['data']
            
            self.image_url = [image["url"] for image in self.image_url]
            print(self.image_url)
            return self.image_url
        except openai.error.OpenAIError as e:
            print(e.http_status)
            print(e.error)

    def downloadImage(self, names)-> None:
        try:
            self.name = names
            for url in self.image_url:
                image = requests.get(url)
            for name in self.name:
                with open("{}.png".format(name), "wb") as f:
                    f.write(image.content)
        except:
            print("An error occured")
            return self.name


imageGen = ImageGenerator()


imageGen.generateImage(
Prompt = "Giant lion, bear, ape, and tiger standing on a water water fall",
ImageCount = 2,
ImageSize = '1024x1024'
)


imageGen.downloadImage(names=[
"Animals",
"Animals2"
])

Le code ci-dessus contient une classe avec les attributs et . Le procédé adapte les exigences du point final de génération d’image. Il génère des URL à l’aide de l’invite en langage naturel, en fonction de la valeur.

Cependant, extrait les URL d’image générées de la réponse JSON dans une liste à l’aide de la boucle for dans une compréhension de liste.

La sortie ressemble à ceci :

Sortie de code API OpenAI

Enfin, la méthode télécharge chaque image en demandant les adresses générées. Cette méthode accepte le nombre de noms que vous souhaitez donner à chaque image.

Modification d’images à l’aide de l’API OpenAI

Le point de terminaison d’édition vous permet d’éditer une image existante basée sur un modèle de masque. Le masque est au format RVBA avec une zone transparente annotée et doit avoir la même taille que l’image que vous souhaitez modifier.

Lorsque vous fournissez un masque, le point de terminaison d’édition remplace sa zone masquée par la nouvelle invite dans l’image existante pour en produire une nouvelle. Ajoutez les méthodes suivantes à la classe précédente ci-dessus :

 class ImageGenerator:
    def __init__(self, ...):
        ..............

    def convertImage(self, maskName):
       image = Image.open("{}.png".format(maskName))
       rgba_image = image.convert('RGBA')
       rgba_image.save("{}.png".format(maskName))

       return rgba_image

    
    def editImage(self, imageName, maskName, ImageCount, ImageSize, Prompt) -> str:
        self.convertImage(maskName)
        response = openai.Image.create_edit(
          image = open("{}.png".format(imageName), "rb"),
          mask = open("{}.png".format(maskName), "rb"),
          prompt = Prompt,
          n = ImageCount,
          size = ImageSize,
          )
        self.image_url = response['data']
        self.image_url = [image["url"] for image in self.image_url]

        print(self.image_url)
        return self.image_url


imageGen.editImage(
   imageName = "Animals",
   maskName = "mask",
   ImageCount = 1,
   ImageSize = "1024x1024",
   Prompt = "An eagle standing on the river bank drinking water with a big mountain"
)


imageGen.downloadImage(names=[
"New Animals",
])

La méthode convertit l’image du masque au format RGBA. Vous pouvez y parvenir en utilisant la méthode du package pillow de Python (importé en tant que PIL).

Une fois converti, il enregistre le nouveau masque en remplacement de celui existant. Ainsi, la conversion d’image est la première tâche que la méthode d’édition () exécute.

Le lit l’image cible à partir d’un fichier existant, tandis que le lit l’image de masque convertie, qui doit avoir une zone transparente.

Vous pouvez délimiter une zone transparente dans le masque à l’aide d’un logiciel de retouche photo comme Gimp ou Photoshop.

Par exemple, l’image que nous voulons modifier à l’aide de l’invite dans le code ci-dessus est :

Animaux buvant de l'eau au bord de la rivière

Maintenant, supposons que vous souhaitiez remplacer l’antilope debout au bord de la rivière par un aigle, comme indiqué dans l’invite.

Voici à quoi ressemble le masque :

Image d'animaux buvant de l'eau avec une zone annotée

Étant donné que le mot-clé dans l’invite du code ci-dessus indique « un aigle debout sur la rive du fleuve », la zone vide est remplie par un aigle, remplaçant l’antilope qui s’y trouvait auparavant.

Voici la nouvelle image dans ce cas :

Animaux buvant de l'eau d'une rivière avec un aigle sur la rive du fleuve

Vous pouvez essayer de jouer avec le point de terminaison de retouche d’image en utilisant d’autres photos.

Génération de variations d’image en Python à l’aide de l’API OpenAI

Le point final de variation génère des images alternatives à partir d’une image existante. Développez davantage la classe de générateur d’images en ajoutant une méthode de variation d’image comme indiqué ci-dessous :

 class ImageGenerator:
    def __init__(self) -> str:
        .............
        
    def imageVariations(self, ImageName, VariationCount, ImageSize):
        response = openai.Image.create_variation(
            image = open("{}.png".format(ImageName), "rb"),
            n = VariationCount,
            size = ImageSize
            )
        
        self.image_url = response['data']
            
        self.image_url = [image["url"] for image in self.image_url]
        print(self.image_url)
        return self.image_url
        
imageGen = ImageGenerator()


imageGen.imageVariations(
    ImageName = "New_Animals",
    VariationCount = 2,
    ImageSize = "1024x1024"
)


imageGen.downloadImage(names=[
    "Variation1",
    "Variation2",
    ]
)

Le code ci-dessus génère des variations d’une image.

Utilisez OpenAI à votre avantage

Bien que certaines personnes craignent que l’IA ne leur vole leur emploi, cela pourrait être un refuge, après tout, si vous apprenez à la contrôler et à l’utiliser. Ce didacticiel de création d’images OpenAI n’est qu’un des nombreux cas d’utilisation de l’IA dans le monde réel. Les API OpenAI fournissent des modèles pré-formés pratiques que vous pouvez facilement intégrer à votre application. Vous pouvez donc relever le défi et construire quelque chose de valable à partir de ce tutoriel.

Bien que l’API de génération d’images soit encore en version bêta au moment de l’écriture, elle vous permet déjà de créer des œuvres d’art imaginaires. Espérons qu’il obtienne d’autres mises à jour pour permettre la mise à l’échelle et accepter différentes tailles d’image.