diff --git a/TelegramSearchBot.AI.OCR/OCRBootstrap.cs b/TelegramSearchBot.AI.OCR/OCRBootstrap.cs new file mode 100644 index 00000000..3908f23e --- /dev/null +++ b/TelegramSearchBot.AI.OCR/OCRBootstrap.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Text; +using System.Threading.Tasks; +using StackExchange.Redis; +using TelegramSearchBot.AI.OCR; + +namespace TelegramSearchBot.AI.OCR { + public class OCRBootstrap { + public static void Startup(string[] args) { + ConnectionMultiplexer redis = ConnectionMultiplexer.Connect($"localhost:{args[1]}"); + IDatabase db = redis.GetDatabase(); + var ocr = new PaddleOCR(); + var before = DateTime.UtcNow; + while (DateTime.UtcNow - before < TimeSpan.FromMinutes(10) || + db.ListLength("OCRTasks") > 0) { + if (db.ListLength("OCRTasks") == 0) { + Task.Delay(1000).Wait(); + continue; + } + var task = db.ListLeftPop("OCRTasks").ToString(); + var photoBase64 = db.StringGetDelete($"OCRPost-{task}").ToString(); + var response = ocr.Execute(new List() { photoBase64 }); + int status; + if (int.TryParse(response.Status, out status) && status == 0) { + var StringList = new List(); + foreach (var e in response.Results) { + foreach (var f in e) { + StringList.Add(f.Text); + } + } + db.StringSet($"OCRResult-{task}", string.Join(" ", StringList)); + } else { + db.StringSet($"OCRResult-{task}", ""); + } + } + } + } +} diff --git a/TelegramSearchBot/Manager/PaddleOCR.cs b/TelegramSearchBot.AI.OCR/PaddleOCR.cs similarity index 98% rename from TelegramSearchBot/Manager/PaddleOCR.cs rename to TelegramSearchBot.AI.OCR/PaddleOCR.cs index 405f6230..5db28d01 100644 --- a/TelegramSearchBot/Manager/PaddleOCR.cs +++ b/TelegramSearchBot.AI.OCR/PaddleOCR.cs @@ -14,7 +14,7 @@ using TelegramSearchBot.Common.Model; using TelegramSearchBot.Common.Model.DO; -namespace TelegramSearchBot.Manager { +namespace TelegramSearchBot.AI.OCR { public class PaddleOCR { public PaddleOcrAll all { get; set; } private static SemaphoreSlim semaphore = new SemaphoreSlim(1); diff --git a/TelegramSearchBot.AI.OCR/TelegramSearchBot.AI.OCR.csproj b/TelegramSearchBot.AI.OCR/TelegramSearchBot.AI.OCR.csproj new file mode 100644 index 00000000..5c5c41fa --- /dev/null +++ b/TelegramSearchBot.AI.OCR/TelegramSearchBot.AI.OCR.csproj @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + net9.0 + enable + enable + + + diff --git a/TelegramSearchBot.sln b/TelegramSearchBot.sln index 0bfa3823..840742db 100644 --- a/TelegramSearchBot.sln +++ b/TelegramSearchBot.sln @@ -25,32 +25,90 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TelegramSearchBot.Search", EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TelegramSearchBot.Search.Test", "TelegramSearchBot.Search.Test\TelegramSearchBot.Search.Test.csproj", "{A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TelegramSearchBot.AI.OCR", "TelegramSearchBot.AI.OCR\TelegramSearchBot.AI.OCR.csproj", "{66FE375A-7036-4738-987E-96A5C609DAD8}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Debug|x64.ActiveCfg = Debug|Any CPU + {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Debug|x64.Build.0 = Debug|Any CPU + {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Debug|x86.ActiveCfg = Debug|Any CPU + {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Debug|x86.Build.0 = Debug|Any CPU {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Release|Any CPU.ActiveCfg = Release|Any CPU {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Release|Any CPU.Build.0 = Release|Any CPU + {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Release|x64.ActiveCfg = Release|Any CPU + {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Release|x64.Build.0 = Release|Any CPU + {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Release|x86.ActiveCfg = Release|Any CPU + {85931FBE-F0AF-4EC9-B67F-B5D2E409421A}.Release|x86.Build.0 = Release|Any CPU {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Debug|x64.ActiveCfg = Debug|Any CPU + {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Debug|x64.Build.0 = Debug|Any CPU + {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Debug|x86.ActiveCfg = Debug|Any CPU + {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Debug|x86.Build.0 = Debug|Any CPU {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Release|Any CPU.ActiveCfg = Release|Any CPU {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Release|Any CPU.Build.0 = Release|Any CPU + {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Release|x64.ActiveCfg = Release|Any CPU + {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Release|x64.Build.0 = Release|Any CPU + {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Release|x86.ActiveCfg = Release|Any CPU + {902F87DC-F692-4A49-8F18-DF42A1FB351D}.Release|x86.Build.0 = Release|Any CPU {B0569DC1-B927-41C8-B888-05513A97EE81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B0569DC1-B927-41C8-B888-05513A97EE81}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0569DC1-B927-41C8-B888-05513A97EE81}.Debug|x64.ActiveCfg = Debug|Any CPU + {B0569DC1-B927-41C8-B888-05513A97EE81}.Debug|x64.Build.0 = Debug|Any CPU + {B0569DC1-B927-41C8-B888-05513A97EE81}.Debug|x86.ActiveCfg = Debug|Any CPU + {B0569DC1-B927-41C8-B888-05513A97EE81}.Debug|x86.Build.0 = Debug|Any CPU {B0569DC1-B927-41C8-B888-05513A97EE81}.Release|Any CPU.ActiveCfg = Release|Any CPU {B0569DC1-B927-41C8-B888-05513A97EE81}.Release|Any CPU.Build.0 = Release|Any CPU + {B0569DC1-B927-41C8-B888-05513A97EE81}.Release|x64.ActiveCfg = Release|Any CPU + {B0569DC1-B927-41C8-B888-05513A97EE81}.Release|x64.Build.0 = Release|Any CPU + {B0569DC1-B927-41C8-B888-05513A97EE81}.Release|x86.ActiveCfg = Release|Any CPU + {B0569DC1-B927-41C8-B888-05513A97EE81}.Release|x86.Build.0 = Release|Any CPU {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Debug|x64.ActiveCfg = Debug|Any CPU + {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Debug|x64.Build.0 = Debug|Any CPU + {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Debug|x86.ActiveCfg = Debug|Any CPU + {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Debug|x86.Build.0 = Debug|Any CPU {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Release|Any CPU.ActiveCfg = Release|Any CPU {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Release|Any CPU.Build.0 = Release|Any CPU + {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Release|x64.ActiveCfg = Release|Any CPU + {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Release|x64.Build.0 = Release|Any CPU + {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Release|x86.ActiveCfg = Release|Any CPU + {DBFD8C03-8128-428C-A2B1-47A24198FEF1}.Release|x86.Build.0 = Release|Any CPU {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Debug|x64.ActiveCfg = Debug|Any CPU + {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Debug|x64.Build.0 = Debug|Any CPU + {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Debug|x86.ActiveCfg = Debug|Any CPU + {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Debug|x86.Build.0 = Debug|Any CPU {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Release|Any CPU.ActiveCfg = Release|Any CPU {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Release|Any CPU.Build.0 = Release|Any CPU + {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Release|x64.ActiveCfg = Release|Any CPU + {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Release|x64.Build.0 = Release|Any CPU + {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Release|x86.ActiveCfg = Release|Any CPU + {A17FCB3D-FF05-46CD-A60E-6E43470A5AB3}.Release|x86.Build.0 = Release|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Debug|x64.ActiveCfg = Debug|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Debug|x64.Build.0 = Debug|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Debug|x86.ActiveCfg = Debug|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Debug|x86.Build.0 = Debug|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Release|Any CPU.Build.0 = Release|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Release|x64.ActiveCfg = Release|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Release|x64.Build.0 = Release|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Release|x86.ActiveCfg = Release|Any CPU + {66FE375A-7036-4738-987E-96A5C609DAD8}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/TelegramSearchBot/AppBootstrap/OCRBootstrap.cs b/TelegramSearchBot/AppBootstrap/OCRBootstrap.cs index 74be071e..54c7606f 100644 --- a/TelegramSearchBot/AppBootstrap/OCRBootstrap.cs +++ b/TelegramSearchBot/AppBootstrap/OCRBootstrap.cs @@ -5,37 +5,13 @@ using System.Text; using System.Threading.Tasks; using StackExchange.Redis; -using TelegramSearchBot.Manager; +using TelegramSearchBot.AI.OCR; namespace TelegramSearchBot.AppBootstrap { public class OCRBootstrap : AppBootstrap { public static void Startup(string[] args) { - ConnectionMultiplexer redis = ConnectionMultiplexer.Connect($"localhost:{args[1]}"); - IDatabase db = redis.GetDatabase(); - var ocr = new PaddleOCR(); - var before = DateTime.UtcNow; - while (DateTime.UtcNow - before < TimeSpan.FromMinutes(10) || - db.ListLength("OCRTasks") > 0) { - if (db.ListLength("OCRTasks") == 0) { - Task.Delay(1000).Wait(); - continue; - } - var task = db.ListLeftPop("OCRTasks").ToString(); - var photoBase64 = db.StringGetDelete($"OCRPost-{task}").ToString(); - var response = ocr.Execute(new List() { photoBase64 }); - int status; - if (int.TryParse(response.Status, out status) && status == 0) { - var StringList = new List(); - foreach (var e in response.Results) { - foreach (var f in e) { - StringList.Add(f.Text); - } - } - db.StringSet($"OCRResult-{task}", string.Join(" ", StringList)); - } else { - db.StringSet($"OCRResult-{task}", ""); - } - } + // 转发到AI.OCR项目的OCRBootstrap + TelegramSearchBot.AI.OCR.OCRBootstrap.Startup(args); } } } diff --git a/TelegramSearchBot/Extension/ServiceCollectionExtension.cs b/TelegramSearchBot/Extension/ServiceCollectionExtension.cs index c949e693..a46ff580 100644 --- a/TelegramSearchBot/Extension/ServiceCollectionExtension.cs +++ b/TelegramSearchBot/Extension/ServiceCollectionExtension.cs @@ -64,7 +64,6 @@ public static IServiceCollection AddCoreServices(this IServiceCollection service .AddHostedService() .AddSingleton>(sp => sp.GetRequiredService().Log) .AddSingleton() - .AddSingleton() .AddSingleton(); } diff --git a/TelegramSearchBot/TelegramSearchBot.csproj b/TelegramSearchBot/TelegramSearchBot.csproj index 24d9df77..20042957 100644 --- a/TelegramSearchBot/TelegramSearchBot.csproj +++ b/TelegramSearchBot/TelegramSearchBot.csproj @@ -97,6 +97,7 @@ +