From 41ee4efccedc20629e6c2a8ea1a941975ee47f05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Fri, 4 Aug 2023 15:37:07 +0200 Subject: [PATCH] ImageMaster3000 ist nach C# umgezogen --- .gitignore | 1 + .../KIKunstKirstenKlöckner.csproj | 1 + KIKunstKirstenKlöckner/Pages/AiArt.razor | 85 +++++++++++++++++-- KIKunstKirstenKlöckner/Pages/_Host.cshtml | 20 ----- .../wwwroot/generated_images/.gitkeep | 0 .../wwwroot/scripts/ImageMaster3000.js | 32 ------- 6 files changed, 79 insertions(+), 60 deletions(-) create mode 100644 KIKunstKirstenKlöckner/wwwroot/generated_images/.gitkeep delete mode 100644 KIKunstKirstenKlöckner/wwwroot/scripts/ImageMaster3000.js diff --git a/.gitignore b/.gitignore index 8a30d25..5112f75 100644 --- a/.gitignore +++ b/.gitignore @@ -396,3 +396,4 @@ FodyWeavers.xsd # JetBrains Rider *.sln.iml +KIKunstKirstenKlöckner/wwwroot/generated_images/* diff --git a/KIKunstKirstenKlöckner/KIKunstKirstenKlöckner.csproj b/KIKunstKirstenKlöckner/KIKunstKirstenKlöckner.csproj index 77beb84..03f043e 100644 --- a/KIKunstKirstenKlöckner/KIKunstKirstenKlöckner.csproj +++ b/KIKunstKirstenKlöckner/KIKunstKirstenKlöckner.csproj @@ -17,6 +17,7 @@ + diff --git a/KIKunstKirstenKlöckner/Pages/AiArt.razor b/KIKunstKirstenKlöckner/Pages/AiArt.razor index c2767d9..688b363 100644 --- a/KIKunstKirstenKlöckner/Pages/AiArt.razor +++ b/KIKunstKirstenKlöckner/Pages/AiArt.razor @@ -1,6 +1,5 @@ @page "/aiart" @using OpenAI_API -@using Microsoft.AspNetCore.Components.Web @using OpenAI_API.Chat @using OpenAI_API.Models @using System.Diagnostics @@ -8,8 +7,6 @@ @inject TooltipService TooltipService @inject DialogService DialogService -@inject IJSRuntime JSRuntime; - AiArt

Wunschbilder von KI nur für dich

@@ -170,11 +167,83 @@ BusyMessage = newMessage; await InvokeAsync(StateHasChanged); } - - public async Task GenerateImage() + + private readonly HttpClient _client = new(); + + protected override Task OnInitializedAsync() { - //await JSRuntime.InvokeVoidAsync("DoSexyStuffBridge", _imagePrompt); - _imageUrl = await JSRuntime.InvokeAsync("DoSexyStuffBridge", _imagePrompt); + var inferenceModelUrl = "https://api-inference.huggingface.co/models/Nacken/ki-kunst-kirsten-kloeckner-colab"; + + // TODO: nicht im repo speichern + var API_TOKEN = "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"; + + //_client.BaseAddress = new Uri(inferenceModelUrl); + + _client.DefaultRequestHeaders.Clear(); + _client.DefaultRequestHeaders.Add("Authorization", $"Bearer {API_TOKEN}"); + + return base.OnInitializedAsync(); + } + + /// + /// Geneiert das Bild für den aktuellen + /// + public async Task GenerateImageAsync() + { + var postData = new + { + inputs = _imagePrompt + }; + + JsonContent content = JsonContent.Create(postData); + + async Task FailedToDrawImage() + { + bool? retry = await DialogService.Confirm("Leider konnte das Bild nicht gemalt werden. Möchtest du es noch eimal versuchen?", "Ups, ein Fehler ist aufgetreten...", + new ConfirmOptions { OkButtonText = "Ja", CancelButtonText = "Nein" }); + + if (retry == true) + await GenerateImageAsync(); + } + + try + { + var inferenceModelUrl = "https://api-inference.huggingface.co/models/Nacken/ki-kunst-kirsten-kloeckner-colab"; + + var response = await _client.PostAsync(inferenceModelUrl, content); + + if (response?.IsSuccessStatusCode == true) + { + await using Stream imageStream = await response.Content.ReadAsStreamAsync(); + + using Image image = await Image.LoadAsync(imageStream); + + string imgUrl = $"generated_images/{DateTime.Now:dd_MM_yyyy_hh_mm_s}.jpg"; + + string mapPath = $"./wwwroot/{imgUrl}"; + await image.SaveAsJpegAsync(mapPath); + + _imageUrl = imgUrl; + } + else + { + Console.WriteLine($"Image conversion failed: {response}"); + + if (Debugger.IsAttached) + Debugger.Break(); + + await FailedToDrawImage(); + } + } + catch (Exception exception) + { + Console.WriteLine($"Image request failed: {exception}"); + + if (Debugger.IsAttached) + Debugger.Break(); + + await FailedToDrawImage(); + } } private async Task DoStuff() @@ -215,7 +284,7 @@ await UpdateBusyMessage("Kirstens Assistent hat eine Idee! Er wird sie nun malen..."); - Task makeImagesTask = GenerateImage(); + Task makeImagesTask = GenerateImageAsync(); //CancellationTokenSource cancelFunnyMessages = new CancellationTokenSource(); diff --git a/KIKunstKirstenKlöckner/Pages/_Host.cshtml b/KIKunstKirstenKlöckner/Pages/_Host.cshtml index 5d2e5de..edfc3d1 100644 --- a/KIKunstKirstenKlöckner/Pages/_Host.cshtml +++ b/KIKunstKirstenKlöckner/Pages/_Host.cshtml @@ -34,25 +34,5 @@ - - - - - diff --git a/KIKunstKirstenKlöckner/wwwroot/generated_images/.gitkeep b/KIKunstKirstenKlöckner/wwwroot/generated_images/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/KIKunstKirstenKlöckner/wwwroot/scripts/ImageMaster3000.js b/KIKunstKirstenKlöckner/wwwroot/scripts/ImageMaster3000.js deleted file mode 100644 index 7dbf826..0000000 --- a/KIKunstKirstenKlöckner/wwwroot/scripts/ImageMaster3000.js +++ /dev/null @@ -1,32 +0,0 @@ -import { HfInference } from 'https://cdn.jsdelivr.net/npm/@huggingface/inference@2.6.1/+esm'; -import { createRepo, commit, deleteRepo, listFiles } from "https://cdn.jsdelivr.net/npm/@huggingface/hub@0.8.4/+esm"; - -async function DoSexyStuff(prompt) -{ - const HF_ACCESS_TOKEN = "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"; - - const inference = new HfInference(HF_ACCESS_TOKEN); - - const blob = await inference.textToImage({ - //model: 'stabilityai/stable-diffusion-2', - model: 'Nacken/ki-kunst-kirsten-kloeckner-colab', - //inputs: 'award winning high resolution photo of a giant tortoise/((ladybird)) hybrid, [trending on artstation]', - inputs: prompt, - parameters: { - negative_prompt: 'blurry', - } - }) - - const imageUrl = window.URL.createObjectURL(blob); - - return imageUrl; - - //window.open(imageUrl, '_blank'); -} - -// Exportiere die Funktion in den globalen Kontext -window.DoSexyStuff = DoSexyStuff; - -function showAlert(message) { - alert(message); -} \ No newline at end of file