diff --git a/KitopiaEx/KitopiaEx.cs b/KitopiaEx/KitopiaEx.cs index d5a57e0..4cd6cc8 100644 --- a/KitopiaEx/KitopiaEx.cs +++ b/KitopiaEx/KitopiaEx.cs @@ -79,6 +79,9 @@ public static IServiceProvider GetServiceProvider() services.AddTransient(); services.AddTransient(); - return services.BuildServiceProvider(); + services.AddTransient(); + var buildServiceProvider = services.BuildServiceProvider(); + ServiceProvider = buildServiceProvider; + return buildServiceProvider; } } \ No newline at end of file diff --git a/KitopiaEx/KitopiaEx.csproj b/KitopiaEx/KitopiaEx.csproj index 13f8cc5..ff63fea 100644 --- a/KitopiaEx/KitopiaEx.csproj +++ b/KitopiaEx/KitopiaEx.csproj @@ -29,6 +29,7 @@ + diff --git a/KitopiaEx/Translate/Translate.cs b/KitopiaEx/Translate/Translate.cs new file mode 100644 index 0000000..6bf694f --- /dev/null +++ b/KitopiaEx/Translate/Translate.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Text; +using System.Text.Json; +using System.Text.Json.Nodes; +using System.Threading; +using System.Threading.Tasks; +using KitopiaEx.Ocr; +using Microsoft.Extensions.DependencyInjection; +using Newtonsoft.Json.Linq; +using PluginCore; +using PluginCore.Attribute; + +namespace KitopiaEx.Translate; + +public class Translate +{ + [ScenarioMethod("翻译文字提取结果", $"{nameof(dResult)}=文字识别结果数据", "return=文字识别结果数据")] + public IEnumerable TranslateOcrResults(IEnumerable dResult, CancellationToken ct) + { + List result = new List(); + try + { + HttpClient httpClient = new HttpClient(); + httpClient.DefaultRequestHeaders.Add("User-Agent","KitopiaEx/1.1.0"); + var s = httpClient.GetStringAsync("https://edge.microsoft.com/translate/auth").Result; + httpClient.Dispose(); + httpClient = new HttpClient(); + httpClient.BaseAddress = + new Uri( + "https://api-edge.cognitive.microsofttranslator.com/translate?from=&to=zh-Hans&api-version=3.0&includeSentenceLength=true"); + httpClient.DefaultRequestHeaders.Add("authorization",$"Bearer {s}"); + httpClient.DefaultRequestHeaders.Add("User-Agent","KitopiaEx/1.1.0"); + foreach (var item in dResult) + { + var content = new StringContent($$"""[{"Text":"{{item.Text}}"}]""", Encoding.UTF8, "application/json"); + + var text = httpClient.PostAsync("",content,ct).Result.Content.ReadAsStringAsync(ct).Result; + + + try + { + using var doc = JsonDocument.Parse(text); + var text2 = doc.RootElement[0] + .GetProperty("translations")[0] + .GetProperty("text") + .GetString(); + result.Add(item with { Text = text2 }); + } + catch (Exception e) + { + result.Add(item); + } + + } + return result; + } + catch (Exception e) + { + return dResult; + } + } + [Capture("翻译",0xf834)] + public void TranslateImgCapture(ScreenCaptureResult dResult) + { + var service = KitopiaEx.ServiceProvider.GetService()!; + var ocrResults = service.OcrImg(dResult, CancellationToken.None); + ocrResults = TranslateOcrResults(ocrResults, CancellationToken.None); + service.OcrResultShow(dResult, ocrResults, CancellationToken.None); + } +} \ No newline at end of file