Seite 1 von 1

Auftragsarbeit mit Vergütung

Verfasst: 24.09.2023 18:53
von udg
Hallo,

ich habe ein Tool programmiert welches über ein Desktopprogramm, also das Tool selber, mit einer API zu einer Webpage (Datenbank Ai) kommunizieren soll.

Bei diesem Tool handelt es sich um Text zu Bildgeneration.

Der Anbieter: https://deepai.org
hat diverse Beispiele zur Einbindung, jedoch hört hier mein Verständnis auf um evtl das Ganze in PB packen zu können.

Da ich als Grafiker arbeite, ist dieses Tool eine enorme Erleichterung im Arbeitsfluss, als immer erst auf den Browser zurückgreifen zu müssen.

Es wäre schön, wenn ich jemanden unter Euch finde, der mir bei der Realisierung helfen kann.

Hier 2 Screenshots:

mit Klick auf einen der Styles wird der eingegebene Text im ausgewählten Style als Bild im Fenster unten dann angezeigt, wenn ich
Bild

auf den Button: Genereate klicke
Bild

hier wird das generierte Bild in verkleinerter Form angezeigt welches ich dann in der Originalgröße auf meine Platte speichern kann.


meinen APi Key soll ich unten eingeben müssen, welcher auf meiner Platte in einer ini gespeichert und dann bei Benutzung verwendet wird. (Auslesen aus der ini)


Grüße

Re: Auftragsarbeit mit Vergütung

Verfasst: 24.09.2023 21:26
von TroaX
Naja Zeit habe ich momentan leider weniger. Aber ich kann da vielleicht ein wenig Hilfestellung geben. Die API-Dokumentation ist zum Glück sehr sparsam: https://deepai.org/machine-learning-model/text2img

Der API-Call lautet:

Code: Alles auswählen

curl \
    -F 'text=YOUR_TEXT_URL' \
    -H 'api-key:quickstart-QUdJIGlzIGNvbWluZy4uLi4K' \
    https://api.deepai.org/api/<style-string>
Zeile 1 mit dem -F sind Parameter, die in den POST-Block einer HTTP-Anfrage mitgegeben werden. Zeile 2 mit dem -H ist eine zusätzliche Header-Zeile, die mit an den Server gesendet wird. Zeile 3 ist dann die Ziel URL für den API Call.

Bezogen auf die HTTP-Request Prozedur von PureBasic bedeutet das, das im ersten Parameter #PB_HTTP_Post (kann aber auch Get sein. Je nach Umsetzung. Allerdings nutzt cURL meines Wissens nach automatisch POST, wenn man ein Formular mitsendet) gesetzt werden sollte, im zweiten kommt die URL https://api.deepai.org/api/<style-string> hinein (<style-string> muss natürlich durch den String des jeweiligen Styles ausgetauscht werden!), Parameter 3 ist dann ein String, der die Optionen enthält. Wichtig hierbei ist anzumerken, das du den Text aus dem Formular grundsätzlich durch die URLEncoder-Prozedur schicken musst. 4. Parameter kannst du #PB_HTTP_NoRedirect verwenden. API's leiten selten auf eine andere URL weiter. Und 5. Parameter, da übergibst du eine Map mit dem Element api-key und dem Key als Wert.

Als Rückgabe erhältst du ein JSON-Dokument, in dem die URL zu den Bild enthalten ist:

Code: Alles auswählen

{
    "id": "1c5317c6-1889-4740-bdd7-1f9350e8a423",
    "output_url": "https://api.deepai.org/job-view-file/1c5317c6-1889-4740-bdd7-1f9350e8a423/outputs/output.jpg"
}
Damit kannst das Bild dann entweder mit einem weiteren Request herunterladen oder über das Webgadget direkt anzeigen. Dafür reicht sogar das Standard-Webgadget von PB aus.

Hier einmal der Beispiel-Code, mit dem ich die Rückgabe erhalten habe:

Code: Alles auswählen

EnableExplicit

OpenConsole()

NewMap Headers.s()

Headers("api-key") = "quickstart-QUdJIGlzIGNvbWluZy4uLi4K"

Define Prompt.s = "text=" + URLEncoder("A little red Cat looks to a Sunrise")
Define Result.i

Prompt = "text=" + URLEncoder("A little red Cat looks to a Sunrise") + "&grid_size=1"

Result = HTTPRequest(#PB_HTTP_Post, "https://api.deepai.org/api/cute-creature-generator", Prompt, #PB_HTTP_NoRedirect, Headers())

If Result
  PrintN("StatusCode: " + HTTPInfo(Result, #PB_HTTP_StatusCode))
  PrintN("Response: " + HTTPInfo(Result, #PB_HTTP_Response))
  FinishHTTP(Result)
Else
  Print("Anfrage geschaitert")
EndIf

Input()
Das sollte als Grundlage für eine weitere Arbeit erst einmal reichen ;)

Re: Auftragsarbeit mit Vergütung

Verfasst: 25.09.2023 01:55
von udg
Guten Abend,

das funktioniert ja schon gut. Vielen Dank für dein Codebeispiel.
Ich sehe mal zu ob wir das in mein Tool eingebaut bekommen.

Ich melde mich zurück.

Danke

Re: Auftragsarbeit mit Vergütung

Verfasst: 16.10.2023 20:48
von juergenkulow
Hallo udg,
gibt es außer deepai noch andere Anbieter von Text zu Bild Erzeugung? Ich bekomme nach sehr kurzer Zeit des testens eine lustige Meldung:

Code: Alles auswählen

kulow@kulow-G73Jw:/tmp$ ./persiancat.out
StatusCode: 401
Response: {"status": "Looks like you're enjoying our API. Want to keep using it?
 Sign up to get an API Key that's as unique as you are. https://deepai.org/"}

Ist das eine Abofalle? Die API erscheint mir zu einfach zu sein, kein PNG, keine großen Bilder, ...
17 Sekunden für eine Antwort waren auch etwas lang:

Code: Alles auswählen

OpenConsole()

NewMap Headers.s()
Headers("api-key") = "quickstart-QUdJIGlzIGNvbWluZy4uLi4K"


Define Result.i

Prompt.s = "text=" + URLEncoder("A little white persian Cat looks to a Sunrise") + "&grid_size=2"
ms=ElapsedMilliseconds()
Result = HTTPRequest(#PB_HTTP_Post, 
                     "https://api.deepai.org/api/cute-creature-generator", 
                     Prompt, #PB_HTTP_NoRedirect, Headers())

If Result
  PrintN("StatusCode: " + HTTPInfo(Result, #PB_HTTP_StatusCode))
  Response.s=HTTPInfo(Result, #PB_HTTP_Response)
  PrintN("Response: " + Response)
  FinishHTTP(Result)
Else
  Print("Anfrage geschaitert")
EndIf
Debug Str(ElapsedMilliseconds()-ms)+" ms"
start=FindString(Response,"https://api.deepai")
Bild.s=Mid(Response,start)
stop=FindString(Bild,Chr(34))
Bild=Left(Bild,stop-1)
Debug Bild 
ReceiveHTTPFile(Bild,GetTemporaryDirectory()+"bild.jpg")
If LoadImage(0, GetTemporaryDirectory()+"bild.jpg")
  w=ImageWidth(0)
  h=ImageHeight(0)
  If OpenWindow(0, 0, 0, w, h, "ImageGadget", #PB_Window_SystemMenu )
    ImageGadget(0,  0, 0, w, h, ImageID(0))                     
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
EndIf 
Input()

Code: Alles auswählen

; Neuen Firefox Tab mit Bild aufrufen.  
Bild.s="https://www.purebasic.com/img/bg-page-header.jpg"
RunProgram("firefox"," -new-tab "+Bild ,"")
Wie kann man damit Geld verdienen?

Re: Auftragsarbeit mit Vergütung

Verfasst: 17.10.2023 09:24
von DarkDragon
17s sind gering für die Aufgabe. Das sind Diffusion models oder Progressive GANs verbunden mit einem LLM, das ist normal, dass es so lange dauert. Wie man damit Geld verdient siehst du doch, im Prinzip verkauft man das als einen Dienst.

Re: Auftragsarbeit mit Vergütung

Verfasst: 17.10.2023 16:17
von Bisonte
und die bilder sind auch in verbindung mit einer anderen API vieeeel grösser ;) Du hast mit der einen nur ein "Preview"...