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, l’apprentissage de modèles et la génération d’images sont autant d’éléments que les développeurs peuvent explorer et intégrer dans leurs applications.
Dans ce tutoriel, vous apprendrez à utiliser l’API d’OpenAI avec Python pour générer, éditer et varier des images à l’aide d’invites en langage naturel.
Démarrer avec OpenAI en utilisant Python
Vous devez mettre en place quelques éléments avant de commencer ce tutoriel. Tout d’abord, assurez-vous d’avoir installé la dernière version de Python sur votre ordinateur. Si vous utilisez une distribution Linux telle qu’Ubuntu, vous pouvez également consulter comment installer Python sur Ubuntu.
Créez un nouveau dossier pour votre projet et ouvrez votre ligne de commande vers le répertoire de votre projet.
L’étape suivante est l’installation du paquet OpenAI. Vous devez installer oreiller pour convertir les images en RGBA lors de l’utilisation de l’outil d’édition d’images. 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 dépôt GitHub et est libre d’utilisation sous la licence MIT.
Pour installer le python-dotenv, oreilleret openai lancez la commande suivante dans le terminal :
pip install openai python-dotenv pillow
Allez maintenant sur OpenAI et connectez-vous à votre tableau de bord pour récupérer votre clé API :
- Une fois connecté, cliquez sur l’icône de votre profil en haut à droite.
- Aller à Voir 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 une nouvelle.
- Copiez la clé secrète générée et collez-la dans un endroit sûr de votre ordinateur. Vous pouvez la coller dans un fichier de variables d’environnement dans le répertoire racine de votre projet pour plus de sécurité.
Comment générer et éditer des images avec l’API OpenAI en Python
La génération d’images de l’API OpenAI comporte des points d’extrémité pour générer de nouvelles images, créer des variations d’images et les modifier.
Dans les sections suivantes, vous explorerez ces points de terminaison pour générer, éditer, modifier et télécharger des images à l’aide d’invites en langage naturel.
Générer des images à l’aide de l’API OpenAI
Le point de terminaison de la génération d’images accepte trois arguments de type mot-clé. Ceux-ci comprennent prompt, net taille.
Les rapide 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 à l’API. Les taille est la taille de l’image, et pour l’instant, elle n’accepte que 256×256, 512×512, et 1024×1024 pixels, selon la documentation officielle d’OpenAI sur la génération d’images.
Le code suivant génère des images à l’aide d’invites en langage naturel et produit leur URL (adresses des images) :
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
# Instantiate the class
imageGen = ImageGenerator()
# Generate images:
imageGen.generateImage(
Prompt = "Giant lion, bear, ape, and tiger standing on a water water fall",
ImageCount = 2,
ImageSize = '1024x1024'
)
# Download the images:
imageGen.downloadImage(names=[
"Animals",
"Animals2"
])
Le code ci-dessus contient un Générateur d’images avec la classe image_url et APIKey attributs. Les attributs generateImage La méthode generateImage s’adapte aux exigences du point de terminaison de la génération d’images. Elle génère n URL à l’aide de l’invite en langage naturel, en fonction de l’option ImageCount valeur.
Cependant, self.image_url extrait les URL des images générées à partir de la réponse JSON dans une liste en utilisant la boucle for dans une compréhension de liste.
La sortie ressemble à ceci :
Enfin, la fonction downloadImage 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.
Édition d’images à l’aide de l’API OpenAI
Le point de terminaison d’édition vous permet d’éditer une image existante sur la base d’un modèle de masque. Le masque est un format RGBA avec une zone transparente annotée et doit être de la même taille que l’image que vous souhaitez éditer.
Lorsque vous fournissez un masque, le point final 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 :
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
# Edit an existing image:
imageGen.editImage(
imageName = "Animals",
maskName = "mask",
ImageCount = 1,
ImageSize = "1024x1024",
Prompt = "An eagle standing on the river bank drinking water with a big mountain"
)
# Download the edited image:
imageGen.downloadImage(names=[
"New Animals",
])
La méthode convertImage convertit l’image du masque au format RGBA. Vous pouvez y parvenir en utilisant la méthode convertir du paquetage pillow de Python (importé sous le nom de PIL).
Une fois converti, il enregistre le nouveau masque en tant que remplacement du masque existant. Ainsi, la conversion d’image est la première tâche que la méthode d’édition (editImage) s’exécute.
La fonction image lit l’image cible à partir d’un fichier existant, tandis que la commande masque lit l’image du masque converti, qui doit comporter 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 du code ci-dessus est la suivante :
Supposons maintenant que vous souhaitiez remplacer l’antilope qui se tient 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é de l’invite du code ci-dessus indique « un aigle se tenant sur la rive », l’espace vide est rempli par un aigle, qui remplace l’antilope qui s’y trouvait auparavant.
Voici la nouvelle image dans ce cas :
Vous pouvez essayer de jouer avec l’outil d’édition d’images en utilisant d’autres photos.
Générer des variations d’images en Python en utilisant l’API OpenAI
Le point de terminaison variation génère des images alternatives à partir d’une image existante. Développez la classe du 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
# Instantiate the class
imageGen = ImageGenerator()
# Generate variations for an existing image
imageGen.imageVariations(
ImageName = "New_Animals",
VariationCount = 2,
ImageSize = "1024x1024"
)
# Download the variations
imageGen.downloadImage(names=[
"Variation1",
"Variation2",
]
)
Le code ci-dessus génère des variations d’une image.
Utilisez OpenAI à votre avantage
Alors que certaines personnes craignent que l’IA ne leur vole leur travail, elle pourrait bien être un havre de paix, après tout, si vous apprenez à la contrôler et à l’utiliser. Ce tutoriel 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é-entraînés pratiques que vous pouvez facilement intégrer dans votre application. Vous pouvez donc relever le défi et construire quelque chose d’intéressant à partir de ce tutoriel.
Bien que l’API de génération d’images soit encore en version bêta, elle vous permet déjà de créer des œuvres d’art imaginaires. Espérons qu’elle sera mise à jour pour permettre la mise à l’échelle et accepter différentes tailles d’images.