DALL·E 3 pour votre entreprise
Introduction
La génération d’images par intelligence artificielle a franchi un nouveau cap avec DALL·E 3, la dernière innovation d’OpenAI. Ce modèle d’IA est capable de créer des images et des illustrations à partir d’une simple description textuelle, ouvrant ainsi de nouvelles perspectives pour les créateurs de contenu, illustrer des slides..
Mise en Place d’une Plateforme Interne DALL·E 3
Dans l’objectif de faire découvrir le potentiel de DALL·E 3 au sein de votre entreprise, nous avons allons mettre en œuvre une plateforme démo conçue avec Flask.
Cette solution interne permet à vos employés de créer des visuels innovants en convertissant simplement leur texte descriptif en images. Une initiative parfaite pour encourager l’usage de DALL·E 3 en interne et garantir la confidentialité des données, tout en évitant l’utilisation de services publics tels que GPT ou DALL·E en dehors de l’environnement contrôlé de l’entreprise.
Création de l’environnement
Pour commencer créer un fichier appellé app.py
from flask import Flask, request, jsonify, render_template
from openai import AzureOpenAI
import os
import requests
import json
# Initialisez l'application Flask
app = Flask(__name__)
# Instanciez le client AzureOpenAI avec vos informations d'identification Azure
client = AzureOpenAI(
api_version="2024-02-01",
api_key=os.environ["AZURE_OPENAI_API_KEY"], # Utilisez le nom de la variable d'environnement
azure_endpoint=os.environ['AZURE_OPENAI_ENDPOINT'] # Utilisez le nom de la variable d'environnement
)
@app.route('/', methods=['GET'])
def index():
# Affichez le formulaire HTML où les utilisateurs peuvent saisir leur prompt
return render_template('index.html')
@app.route('/generate-image', methods=['POST'])
def generate_image():
# Récupérez le prompt de la requête POST
prompt = request.json.get('prompt')
if not prompt:
return jsonify({"error": "No prompt provided"}), 400
try:
# Générez l'image à l'aide de DALL·E sur Azure
result = client.images.generate(
model="dalle3", # Remplacez par le nom de votre modèle DALL-E 3 déployé
prompt=prompt,
n=1
)
# Chargez la réponse JSON et extrayez l'URL de l'image
json_response = json.loads(result.model_dump_json())
image_url = json_response["data"][0]["url"]
# Renvoyez l'URL de l'image en réponse
return jsonify({"image_url": image_url}), 200
except Exception as e:
# Gérez les erreurs et renvoyez un message d'erreur adéquat
return jsonify({"error": str(e)}), 500
# Démarrez l'application Flask
if __name__ == '__main__':
app.run(debug=True)
Puis un fichier appellé Dockerfile
# Utilisez une image de base Python officielle
FROM python:3.8-slim
# Définissez le répertoire de travail dans le conteneur
WORKDIR /app
# Copiez les fichiers de dépendances dans le conteneur et installez-les
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copiez le reste des fichiers de l'application dans le conteneur
COPY . .
# Exposez le port sur lequel Flask s'exécute
EXPOSE 5000
# Définissez la variable d'environnement utilisée par Flask
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
# Lancez l'application Flask
CMD ["flask", "run"]
Le requirements.txt qui va bien :
Flask
openai
requests
Pour le front un simple index.html
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<title>Générateur d'images DALL·E</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
}
#image-container img {
max-width: 100%;
max-height: 500px;
}
</style>
</head>
<body>
<h1>Générateur d'images DALL·E</h1>
<form id="image-form">
<input type="text" id="prompt" name="prompt" placeholder="Décrivez l'image que vous souhaitez générer" required>
<button type="submit">Générer l'image</button>
</form>
<div id="image-container"></div>
<script>
$(document).ready(function() {
$('#image-form').on('submit', function(e) {
e.preventDefault();
var prompt = $('#prompt').val();
$.ajax({
url: '/generate-image',
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({ prompt: prompt }),
success: function(data) {
if (data.image_url) {
$('#image-container').html(`<img src="${data.image_url}" alt="Image générée">`);
} else {
$('#image-container').html('Erreur : Image non générée.');
}
},
error: function(xhr, status, error) {
$('#image-container').html('Une erreur est survenue : ' + error);
}
});
});
});
</script>
</body>
</html>
Pour faciliter le lancement et la gestion de votre application DALL·E au sein de votre entreprise, je vous propose de mettre en place un fichier docker-compose.yaml. Ce fichier va permettre de définir et de configurer tous les services nécessaires en utilisant Docker Compose. Voici un exemple de configuration pour démarrer votre application :
version: '3.8'
services:
web:
image: myownregistry:5000/dallee-playground:v1.2
ports:
- "9170:5000"
environment:
- AZURE_OPENAI_API_KEY=SECRETPASSOWRD
- AZURE_OPENAI_ENDPOINT=https://ravindra-job.openai.azure.com/
Dans ce fichier docker-compose.yaml, le service web est configuré pour utiliser une image Docker spécifique, dallee-playground, qui est hébergée dans votre registre privé à l’adresse myownregistry:5000.
Les ports sont mappés de sorte que le port 9170 sur l’hôte soit relié au port 5000 dans le conteneur, ce qui est le port par défaut pour une application Flask.
Les variables d’environnement AZURE_OPENAI_API_KEY et AZURE_OPENAI_ENDPOINT sont définies pour permettre à votre application de se connecter à l’API Azure OpenAI.
Remplacez SECRETPASSOWRD par votre véritable clé d’API OpenAI, en veillant à sécuriser correctement cette information sensible.
Une fois ce fichier configuré, vous pouvez démarrer votre application en exécutant la commande docker-compose up -d depuis le répertoire où se trouve le fichier docker-compose.yaml.
Usage en production
Le schéma de code présenté ici est destiné à un environnement de développement (DEV) et est conçu dans un but d’illustration simple et épurée. Il n’est pas adapté pour une utilisation directe en production (PROD).
Pour déployer cette application DALL·E 3 en environnement de production, je recommande d’adopter une structure de projet plus robuste, comme celle présentée ci-après :
/dalle_enterprise_app/
|-- /app/
| |-- __init__.py
| |-- views.py
| |-- forms.py
| |-- models.py
| |-- /static/
| | |-- /css/
| | | |-- main.css
| | |-- /js/
| | | |-- main.js
| | |-- /images/
| | |-- placeholder.png
| |-- /templates/
| |-- layout.html
| |-- index.html
| |-- generate.html
| |-- login.html
|-- config.py
|-- run.py
|-- .env
|-- .gitignore
|-- requirements.txt
|-- Dockerfile
__init__.py
: Initialise le package Python et l’application Flask.views.py
: Gère les routes et les vues de l’application Flask.forms.py
: Définit les formulaires avec WTForms pour la validation des données utilisateur.models.py
: Contient les modèles de données, tels que les utilisateurs ou les tâches de génération d’images./static/
: Dossier pour les fichiers statiques (CSS, JavaScript, images)./css/
: Contient les fichiers de style CSS.main.css
: Fichier CSS principal.
/js/
: Contient les scripts JavaScript.main.js
: Script JavaScript principal.
/images/
: Stocke les images.placeholder.png
: Image placeholder par défaut.
/templates/
: Dossier pour les templates HTML.layout.html
: Template de base pour la mise en page.index.html
: Page d’accueil de l’application.generate.html
: Page de génération d’images.login.html
: Page de connexion utilisateur.
config.py
: Contient les configurations de l’application.run.py
: Script pour démarrer l’application Flask..env
: Fichier pour les variables d’environnement (à ne pas versionner)..gitignore
: Liste les fichiers/dossiers à ignorer par Git.requirements.txt
: Liste les dépendances Python du projet.Dockerfile
: Instructions pour créer le conteneur Docker de l’application.