Page 1 sur 1

Intégration de l'API DALL-E 2 dans une application PureBasic

Publié : mer. 11/déc./2024 8:50
par seblamb
Bonjour à tous,

Je développe une application de traitement d'images en PureBasic et j'aimerais intégrer l'API DALL-E 2 pour générer des images. Voici mes objectifs :

Créer une interface utilisateur pour les prompts
Gérer les appels API vers DALL-E 2
Sauvegarder les images générées

Avez-vous des retours d'expérience sur :

Les requêtes HTTP vers l'API OpenAI en PureBasic ?
Le traitement du JSON dans les réponses ?
La gestion des erreurs et des timeouts ?

Merci pour votre aide !

Re: Intégration de l'API DALL-E 2 dans une application PureBasic

Publié : mer. 11/déc./2024 10:03
par falsam
Bonjour et bienvenue (J'espère que tu n'es pas un bot)
seblamb a écrit : mer. 11/déc./2024 8:50 Créer une interface utilisateur pour les prompts
Gérer les appels API vers DALL-E 2
Sauvegarder les images générées

Avez-vous des retours d'expérience sur :

Les requêtes HTTP vers l'API OpenAI en PureBasic ?
Ce lien pourrait t'aider https://www.purebasic.fr/english/viewto ... 52#p610952
seblamb a écrit : mer. 11/déc./2024 8:50 Le traitement du JSON dans les réponses ?
Accessible avec la touche F1 de l'IDE https://www.purebasic.com/french/docume ... index.html
seblamb a écrit : mer. 11/déc./2024 8:50 La gestion des erreurs et des timeouts ?
https://www.purebasic.com/french/docume ... index.html

Re: Intégration de l'API DALL-E 2 dans une application PureBasic

Publié : mer. 05/mars/2025 8:27
par MarkUS
Bonjour,

Pour les requêtes HTTP en PureBasic, tu peux utiliser ReceiveHTTPMemory() pour interagir avec l'API OpenAI. Pour traiter le JSON, la bibliothèque ParseJSON() te sera utile pour extraire les données des réponses. Pense aussi à gérer les erreurs avec des vérifications sur les codes de retour HTTP et à intégrer un timeout pour éviter que l’appli ne bloque en cas de souci.

Hâte de voir ton application en action ! 😊

Re: Intégration de l'API DALL-E 2 dans une application PureBasic

Publié : mer. 05/mars/2025 11:46
par Ar-S
Salut, essaye ça,
Vu que j'ai pas d'API DALL-E ça me retourne bien un message d'erreur de la requête mais pour le reste vois par toi même du coup.

Code : Tout sélectionner


Global ldvm, Prompt$, APIKey$, ImageUrl$, FileName$
Global imageRendu, Button_Generate, Button_Save
Global ComboBox_Size, String_Prompt, String_APIKey, Spin_NumImages

UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()



Procedure SendDalleRequest()
  Define.s jsonRequest, jsonResponse, url
  Define.i httpRequest
  Define *response
  NewMap Header$()
  
  Prompt$ = GetGadgetText(String_Prompt)
  APIKey$ = GetGadgetText(String_APIKey)
  Define numImages = GetGadgetState(Spin_NumImages)
  Define.s size = GetGadgetText(ComboBox_Size)
  
  If Prompt$ = "" Or APIKey$ = ""
    MessageRequester("Erreur", "Veuillez remplir tous les champs.")
    ProcedureReturn
  EndIf
  
  jsonRequest = "{" + Chr(34) + "prompt" + Chr(34) + ": " + Chr(34) + Prompt$ + Chr(34) + ", "
  jsonRequest + Chr(34) + "n" + Chr(34) + ": " + Str(numImages) + ", "
  jsonRequest + Chr(34) + "size" + Chr(34) + ": " + Chr(34) + size + Chr(34) + "}"
  
  url = "https://api.openai.com/v1/images/generations"
  Header$("Content-Type") = "application/json"
  Header$("Authorization") = "Bearer " + APIKey$
  
  httpRequest = HTTPRequest(#PB_HTTP_Post, url, jsonRequest, 0, Header$())
  
  If httpRequest
    *response = HTTPMemory(httpRequest)
    jsonResponse = PeekS(*response, MemorySize(*response), #PB_UTF8)
    FinishHTTP(httpRequest)
    
    If FindString(jsonResponse, "url", 1)
      ImageUrl$ = StringField(jsonResponse, 2, Chr(34) + "url" + Chr(34) + ": " + Chr(34))
      ImageUrl$ = StringField(ImageUrl$, 1, Chr(34))
      
      httpRequest = HTTPRequest(#PB_HTTP_Get, ImageUrl$)
      If httpRequest
        *response = HTTPMemory(httpRequest)
        If *response
          CatchImage(0, *response, MemorySize(*response))
          SetGadgetState(imageRendu, ImageID(0))
          FreeMemory(*response)
        EndIf
        FinishHTTP(httpRequest)
      EndIf
    Else
      MessageRequester("Erreur", "Réponse invalide : " + jsonResponse)
    EndIf
  Else
    MessageRequester("Erreur", "Échec de la requête HTTP.")
  EndIf
EndProcedure

Procedure SaveMyImage()
  If ImageUrl$ = ""
    MessageRequester("Erreur", "Aucune image à enregistrer.")
    ProcedureReturn
  EndIf
  
  FileName$ = SaveFileRequester("Enregistrer l'image sous...", "", "PNG (*.png)|*.png|JPEG (*.jpg)|*.jpg", 0)
  If FileName$ <> ""
    httpRequest = HTTPRequestMemory(#PB_HTTP_Get, ImageUrl$)
    If httpRequest
      If Right(FileName$, 3) = "png"
        SaveImage(0, FileName$, #PB_ImagePlugin_PNG)
      Else
        SaveImage(0, FileName$, #PB_ImagePlugin_JPEG, 8)
      EndIf
      FreeMemory(*response)
    EndIf
    FinishHTTP(httpRequest)
    MessageRequester("Succès", "Image enregistrée avec succès !")
  EndIf
EndProcedure

Procedure OpenWin()
  ldvm = OpenWindow(#PB_Any, 100, 100, 500, 400, "DALL-E Image Generator")
  String_Prompt = StringGadget(#PB_Any, 10, 10, 480, 30, "")
  ComboBox_Size = ComboBoxGadget(#PB_Any, 10, 50, 200, 25)
  AddGadgetItem(ComboBox_Size, -1, "1024x1024")
  AddGadgetItem(ComboBox_Size, -1, "1792x1024")
  AddGadgetItem(ComboBox_Size, -1, "1024x1792")
  SetGadgetState(ComboBox_Size, 0)
  
  Spin_NumImages = SpinGadget(#PB_Any, 220, 50, 50, 25, 1, 4, #PB_Spin_Numeric)
  String_APIKey = StringGadget(#PB_Any, 10, 90, 480, 30, "", #PB_String_Password)
  
  Button_Generate = ButtonGadget(#PB_Any, 10, 130, 100, 30, "Générer")
  Button_Save = ButtonGadget(#PB_Any, 120, 130, 100, 30, "Enregistrer")
  
  imageRendu = ImageGadget(#PB_Any, 10, 170, 480, 220, 0)
  
  BindGadgetEvent(Button_Generate, @SendDalleRequest())
  BindGadgetEvent(Button_Save, @SaveMyImage())
EndProcedure

OpenWin()

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Intégration de l'API DALL-E 2 dans une application PureBasic

Publié : mar. 15/avr./2025 23:16
par AntoineB
Bonjour à tous,

Merci pour toutes ces infos, c’est super intéressant de voir ce que vous arrivez à faire avec l’API DALL·E dans PureBasic.

Personnellement, je trouve DALL·E chouette, mais j’avoue avoir une préférence pour les rendus de Midjourney, que je trouve souvent plus artistiques. Est-ce que quelqu’un sait s’il existe une API officielle pour Midjourney, ou au moins un service tiers qui permettrait de l’intégrer dans une appli ? Je n’ai trouvé que des bots Discord pour l’instant.

Merci d’avance si certains ont exploré cette piste !

Antoine