Utilisez le modèle DALL·E 2 d'OpenAI pour générer des images à l'aide de 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.

instagram viewer

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

Nous 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 le python-dotenv, oreiller, et openai packages, exécutez la commande suivante dans le terminal :

pip installer openai python-dotenv oreiller

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 à Afficher les clés API. Si votre clé API n'est pas visible, cliquez sur Créer une nouvelle clé secrète pour en générer un nouveau.
  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 inclus rapide, n, et taille.

Le rapide mot-clé est une chaîne de texte décrivant l'image que vous souhaitez générer, tandis que n est le nombre d'images à générer lors d'un appel API. Le taille est la taille de l'image, et au moment de l'écriture, elle n'accepte que 256x256, 512x512 et 1024x1024 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) :

importer openai
importer os
importer demandes
depuis dotenv importer load_dotenv
depuis DIP importer Image
load_dotenv()

classeGénérateur d'images:
définitivement__init__(soi) -> chaîne :
self.image_url: str
openai.api_key = os.getenv("OPENAI_API_KEY")
soi. APIKey = openai.api_key
self.name = Aucun

définitivementgénérerImage(auto, Invite, ImageCount, ImageSize):
essayer:
soi. Clé API
réponse = openai. Image.create(
invite = invite,
n = nombre d'images,
taille = ImageSize,
)
self.image_url = réponse['données']

self.image_url = [image["URL"] pour image dans soi.image_url]
imprimer (self.image_url)
retour self.image_url
sauf openai.error. OpenAIError comme e :
imprimer (e.http_status)
print (e.error)

définitivementtéléchargerImage(soi, noms)-> Aucun:
essayer:
self.name = noms
pour URL dans self.image_url :
image = demandes.obtenir (url)
pour nom dans nom.de.soi :
avec ouvrir("{}.png".format (nom), "wb") comme F:
f.écrire (image.contenu)
sauf:
imprimer("Une erreur s'est produite")
retour self.name

# Instancie la classe
imageGen = ImageGenerator()

# Générer des images :
imageGen.generateImage(
Invite = "Lion géant, ours, singe et tigre debout sur une chute d'eau",
ImageCount = 2,
Taille de l'image = '1024x1024'
)

# Téléchargez les images :
imageGen.downloadImage (names=[
"Animaux",
"Animaux2"
])

Le code ci-dessus contient un Générateur d'images classe avec le URL de l'image et Clé API les attributs. Le générerImage La méthode adapte les exigences du point de terminaison de génération d'image. Il génère n URL à l'aide de l'invite en langage naturel, selon le ImageCount valeur.

Cependant, self.image_url 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 :

Finalement, le téléchargerImage La méthode télécharge chaque image en demandant les adresses générées. Cette méthode accepte n 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 :

classeGénérateur d'images:
définitivement__init__(soi, ...):
...

définitivementconvertirImage(soi, nom_masque):
image = Image.open("{}.png".format (maskName))
rgba_image = image.convert('RVBA')
rgba_image.save("{}.png".format (maskName))

retour rgba_image


définitivementéditer l'image(soi, nom de l'image, nom du masque, nombre d'images, taille de l'image, invite) -> chaîne :
self.convertImage (maskName)
réponse = openai. Image.create_edit(
image = ouvrir("{}.png".format (nom de l'image), "rb"),
masque = ouvrir("{}.png".format (maskName), "rb"),
invite = invite,
n = nombre d'images,
taille = ImageSize,
)
self.image_url = réponse['données']
self.image_url = [image["URL"] pour image dans soi.image_url]

imprimer (self.image_url)
retour self.image_url

# Modifier une image existante :
imageGen.editImage(
nomimage = "Animaux",
nom_masque = "masque",
ImageCount = 1,
Taille de l'image = "1024x1024",
Invite = "Un aigle debout sur la rive du fleuve buvant de l'eau avec une grande montagne"
)

# Téléchargez l'image modifiée :
imageGen.downloadImage (names=[
"Nouveaux animaux",
])

Le convertirImage convertit l'image du masque au format RGBA. Vous pouvez y parvenir en utilisant le convertir 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 de la méthode d'édition (éditer l'image) s'exécute.

Le image lit l'image cible à partir d'un fichier existant, tandis que le masque lit l'image du masque converti, qui doit avoir une zone transparente.

Vous pouvez délimiter une zone transparente dans le masque à l'aide de 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 :

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 :

É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 :

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 :

classeGénérateur d'images:
définitivement__init__(soi) -> chaîne :
...

définitivementimageVariations(soi, ImageName, VariationCount, ImageSize):
réponse = openai. Image.create_variation(
image = ouvrir("{}.png".format (NomImage), "rb"),
n = nombre de variations,
taille = ImageSize
)

self.image_url = réponse['données']

self.image_url = [image["URL"] pour image dans soi.image_url]
imprimer (self.image_url)
retour self.image_url

# Instancie la classe
imageGen = ImageGenerator()

# Générer des variantes pour une image existante
imageGen.imageVariations(
NomImage = "Nouveaux_animaux",
CompteVariation = 2,
Taille de l'image = "1024x1024"
)

# Télécharger les variantes
imageGen.downloadImage (names=[
"Variante1",
"Variante2",
]
)

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.