Auftragsarbeit mit Vergütung

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Auftragsarbeit mit Vergütung

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Auftragsarbeit mit Vergütung

Beitrag 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 ;)
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: Auftragsarbeit mit Vergütung

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Auftragsarbeit mit Vergütung

Beitrag 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?
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Auftragsarbeit mit Vergütung

Beitrag 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.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Bisonte
Beiträge: 2467
Registriert: 01.04.2007 20:18

Re: Auftragsarbeit mit Vergütung

Beitrag von Bisonte »

und die bilder sind auch in verbindung mit einer anderen API vieeeel grösser ;) Du hast mit der einen nur ein "Preview"...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten