diff --git a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs index d6dcf46f..4e20d00c 100644 --- a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs +++ b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs @@ -59,6 +59,8 @@ public class AutoDomainTask : ISoloTask private readonly string challengeCompletedLocalizedString; private readonly string autoLeavingLocalizedString; private readonly string skipLocalizedString; + private readonly string leyLineDisorderLocalizedString; + private readonly string clickanywheretocloseLocalizedString; public AutoDomainTask(AutoDomainParam taskParam) { @@ -78,6 +80,8 @@ public class AutoDomainTask : ISoloTask this.challengeCompletedLocalizedString = stringLocalizer.WithCultureGet(cultureInfo, "挑战达成"); this.autoLeavingLocalizedString = stringLocalizer.WithCultureGet(cultureInfo, "自动退出"); this.skipLocalizedString = stringLocalizer.WithCultureGet(cultureInfo, "跳过"); + this.leyLineDisorderLocalizedString = stringLocalizer.WithCultureGet(cultureInfo, "地脉异常"); + this.clickanywheretocloseLocalizedString = stringLocalizer.WithCultureGet(cultureInfo, "点击任意位置关闭"); } public async Task Start(CancellationToken ct) @@ -382,7 +386,7 @@ public class AutoDomainTask : ISoloTask // } var ocrList = ra.FindMulti(RecognitionObject.Ocr(0, ra.Height * 0.2, ra.Width, ra.Height * 0.6)); - var done = ocrList.FirstOrDefault(txt => txt.Text.Contains("地脉异常") || txt.Text.Contains("点击任意") || txt.Text.Contains("位置关闭")); + var done = ocrList.FirstOrDefault(t => Regex.IsMatch(t.Text, this.leyLineDisorderLocalizedString) || Regex.IsMatch(t.Text, this.clickanywheretocloseLocalizedString)); if (done != null) { await Delay(1000, _ct); diff --git a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.en.resx b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.en.resx index 64720193..e763f9dc 100644 --- a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.en.resx +++ b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.en.resx @@ -117,8 +117,14 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Ley.*Line.*Disorder + - [Challenge,Completed] + (Challenge|Completed) + + + Click.*any.*where.*to.*close Leaving diff --git a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.fr.resx b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.fr.resx index 2b0b6840..1a4e1308 100644 --- a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.fr.resx +++ b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.fr.resx @@ -117,8 +117,14 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Anomalie.*énergétique + - [Défi,terminé] + (Défi|terminé) + + + Cliquez.*pour.*fermer Sortie diff --git a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.zh-Hans.resx b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.zh-Hans.resx index 4b01df9c..f2631d8a 100644 --- a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.zh-Hans.resx +++ b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.zh-Hans.resx @@ -117,11 +117,17 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 地脉异常 + - [挑战,达成] + (挑战|达成) + + + 点击任意位置关闭 - [自动,退出] + (自动|退出) 跳过 diff --git a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.zh-Hant.resx b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.zh-Hant.resx index e2b4f460..7fe233ef 100644 --- a/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.zh-Hant.resx +++ b/BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.zh-Hant.resx @@ -117,11 +117,17 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 地[脈服][異翼昊]常 + - [挑戰,達成] + (挑戰|達成) + + + 點擊任意位置關閉 - [自動,退出] + (自動|退出) 跳過 diff --git a/BetterGenshinImpact/GameTask/AutoFishing/AutoFishingImageRecognition.fr.resx b/BetterGenshinImpact/GameTask/AutoFishing/AutoFishingImageRecognition.fr.resx index e81752ca..e310ae30 100644 --- a/BetterGenshinImpact/GameTask/AutoFishing/AutoFishingImageRecognition.fr.resx +++ b/BetterGenshinImpact/GameTask/AutoFishing/AutoFishingImageRecognition.fr.resx @@ -121,6 +121,6 @@ mordu - P[ê|é]cher + P[êé]cher \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/Common/Element/Assets/MapLazyAssets.zh-Hant.resx b/BetterGenshinImpact/GameTask/Common/Element/Assets/MapLazyAssets.zh-Hant.resx index e49b43e1..0e90c436 100644 --- a/BetterGenshinImpact/GameTask/Common/Element/Assets/MapLazyAssets.zh-Hant.resx +++ b/BetterGenshinImpact/GameTask/Common/Element/Assets/MapLazyAssets.zh-Hant.resx @@ -118,7 +118,7 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 委[託,話] + 委[託話] 楓丹 diff --git a/BetterGenshinImpact/GameTask/Common/Job/ClaimEncounterPointsRewardsTask.zh-Hant.resx b/BetterGenshinImpact/GameTask/Common/Job/ClaimEncounterPointsRewardsTask.zh-Hant.resx index a97a24e7..1de9a6c0 100644 --- a/BetterGenshinImpact/GameTask/Common/Job/ClaimEncounterPointsRewardsTask.zh-Hant.resx +++ b/BetterGenshinImpact/GameTask/Common/Job/ClaimEncounterPointsRewardsTask.zh-Hant.resx @@ -118,6 +118,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - 委[託,話] + 委[託話] \ No newline at end of file diff --git a/BetterGenshinImpact/GameTask/Common/Job/GoToCraftingBenchTask.fr.resx b/BetterGenshinImpact/GameTask/Common/Job/GoToCraftingBenchTask.fr.resx index 164dd0e9..9f7351af 100644 --- a/BetterGenshinImpact/GameTask/Common/Job/GoToCraftingBenchTask.fr.resx +++ b/BetterGenshinImpact/GameTask/Common/Job/GoToCraftingBenchTask.fr.resx @@ -118,6 +118,6 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - Synth[è|é]se + Synth[èé](se|tiser) \ No newline at end of file diff --git a/Test/BetterGenshinImpact.UnitTest/CoreTests/RecognitionTests/OCRTests/PaddleCollection.cs b/Test/BetterGenshinImpact.UnitTest/CoreTests/RecognitionTests/OCRTests/PaddleCollection.cs new file mode 100644 index 00000000..fbdd8b0b --- /dev/null +++ b/Test/BetterGenshinImpact.UnitTest/CoreTests/RecognitionTests/OCRTests/PaddleCollection.cs @@ -0,0 +1,25 @@ +using BetterGenshinImpact.Core.Recognition.OCR; +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BetterGenshinImpact.UnitTest.CoreTests.RecognitionTests.OCRTests +{ + [CollectionDefinition("Paddle Collection")] + public class PaddleCollection : ICollectionFixture + { + } + + public class PaddleFixture + { + private readonly ConcurrentDictionary paddleOcrServices = new ConcurrentDictionary(); + + public PaddleOcrService Get(string cultureInfoName = "zh-Hans") + { + return paddleOcrServices.GetOrAdd(cultureInfoName, name => { lock (paddleOcrServices) { return new PaddleOcrService(name); } }); + } + } +} diff --git a/Test/BetterGenshinImpact.UnitTest/CoreTests/RecognitionTests/OCRTests/PaddleOcrServiceTests.cs b/Test/BetterGenshinImpact.UnitTest/CoreTests/RecognitionTests/OCRTests/PaddleOcrServiceTests.cs index e68f0a97..110ef79a 100644 --- a/Test/BetterGenshinImpact.UnitTest/CoreTests/RecognitionTests/OCRTests/PaddleOcrServiceTests.cs +++ b/Test/BetterGenshinImpact.UnitTest/CoreTests/RecognitionTests/OCRTests/PaddleOcrServiceTests.cs @@ -7,32 +7,42 @@ using System.Threading.Tasks; using BetterGenshinImpact.Core.Recognition.OCR; using System.Drawing; using OpenCvSharp.Extensions; -using System.Text.RegularExpressions; -using System.Collections.Concurrent; namespace BetterGenshinImpact.UnitTest.CoreTests.RecognitionTests.OCRTests { + [Collection("Paddle Collection")] public partial class PaddleOcrServiceTests { - private static readonly ConcurrentDictionary paddleOcrServices = new ConcurrentDictionary(); + private readonly PaddleFixture paddle; + public PaddleOcrServiceTests(PaddleFixture paddle) + { + this.paddle = paddle; + } [Theory] - [InlineData("zh-Hans", "挑战,达成", "[挑战,达成]")] + [InlineData("zh-Hans", "挑战,达成", "挑战.*达成")] [InlineData("zh-Hans", "凯瑟琳")] + [InlineData("zh-Hans", "点击任意位置关闭")] [InlineData("en", "Daily")] [InlineData("en", "Katheryne")] + [InlineData("en", "Clickany where to close", "Click.*any.*where.*to.*close")] [InlineData("zh-Hant", "凱瑟琳")] - [InlineData("zh-Hant", "委託", "委[託,話]")] - [InlineData("zh-Hant", "挑戰,達成", "[挑戰,達成]")] - [InlineData("zh-Hant", "自動,退出", "[自動,退出]")] + [InlineData("zh-Hant", "委託", "委[託話]")] + [InlineData("zh-Hant", "挑戰,達成", "挑戰.*達成")] + [InlineData("zh-Hant", "自動,退出", "自動.*退出")] [InlineData("zh-Hant", "跳過")] + [InlineData("zh-Hant", "地脈異常", "地[脈服][異翼昊]常")] + [InlineData("zh-Hant", "點擊任意位置關閉")] [InlineData("fr", "quotidien")] [InlineData("fr", "Expédition")] - [InlineData("fr", "Pêcher", "P[ê|é]cher")] - [InlineData("fr", "Synthèse", "Synth[è|é]se")] - [InlineData("fr", "Défi, terminé", "[Défi,terminé]")] + [InlineData("fr", "Pêcher", "P[êé]cher")] + [InlineData("fr", "Synthèse", "Synth[èé](se|tiser)")] + [InlineData("fr", "Synthétiser", "Synth[èé](se|tiser)")] + [InlineData("fr", "Défi, terminé", "Défi.*terminé")] [InlineData("fr", "Sortie")] [InlineData("fr", "Passer")] + [InlineData("fr", "Anomalie énergétique", "Anomalie.*énergétique")] + [InlineData("fr", "Cliquez pour fermer", "Cliquez.*pour.*fermer")] /// /// 测试识别各种文字,结果为成功 /// @@ -50,7 +60,7 @@ namespace BetterGenshinImpact.UnitTest.CoreTests.RecognitionTests.OCRTests using Mat mat = mat4.CvtColor(ColorConversionCodes.RGBA2RGB); // - PaddleOcrService sut = paddleOcrServices.GetOrAdd(cultureInfoName, name => { lock (paddleOcrServices) { return new PaddleOcrService(name); } }); + PaddleOcrService sut = paddle.Get(cultureInfoName); string actual = sut.Ocr(mat).Replace(" ", ""); // diff --git a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.CheckRaiseHook.cs b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.CheckRaiseHook.cs index a23f9e5f..25f1d384 100644 --- a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.CheckRaiseHook.cs +++ b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.CheckRaiseHook.cs @@ -45,7 +45,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests var sut = FluentBuilder.Create() .MySimpleParallel("下杆中", SimpleParallelPolicy.OnlyOneMustSucceed) .PushLeaf(() => new CheckThrowRod("检查抛竿结果", blackboard, logger, false, timeProvider)) // todo 后面串联一个召回率高的下杆中检测方法 - .PushLeaf(() => new FishBite("自动提竿", blackboard, logger, false, input, ocrService, drawContent)) + .PushLeaf(() => new FishBite("自动提竿", blackboard, logger, false, input, OcrService, drawContent)) .PushLeaf(() => new FishBiteTimeout("下杆超时检查", 15, logger, false, input, timeProvider)) .End() .Build(); diff --git a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.FishBite.cs b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.FishBite.cs index d6296348..7ce722de 100644 --- a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.FishBite.cs +++ b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.FishBite.cs @@ -6,6 +6,8 @@ using BehaviourTree.Composites; using BehaviourTree.FluentBuilder; using Microsoft.Extensions.Time.Testing; using OpenCvSharp; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests { @@ -29,7 +31,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Blackboard blackboard = new Blackboard(autoFishingAssets: autoFishingAssets); // - FishBite sut = new FishBite("-", blackboard, new FakeLogger(), false, new FakeInputSimulator(), ocrService, drawContent: new FakeDrawContent()); + FishBite sut = new FishBite("-", blackboard, new FakeLogger(), false, new FakeInputSimulator(), OcrService, drawContent: new FakeDrawContent()); BehaviourStatus actual = sut.Tick(imageRegion); // @@ -60,7 +62,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests var sut = FluentBuilder.Create() .MySimpleParallel("-", SimpleParallelPolicy.OnlyOneMustSucceed) //.PushLeaf(() => new CheckThrowRod("-", logger, false, fakeTimeProvider)) // todo - .PushLeaf(() => new FishBite("-", blackboard, logger, false, input, ocrService, drawContent: new FakeDrawContent())) + .PushLeaf(() => new FishBite("-", blackboard, logger, false, input, OcrService, drawContent: new FakeDrawContent())) .PushLeaf(() => fishBiteTimeoutBehaviour) .End() .Build(); @@ -104,12 +106,17 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}"); var imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent()); + ServiceCollection services = new ServiceCollection(); + services.AddLogging().AddLocalization(); + using ServiceProvider sp = services.BuildServiceProvider(); + IStringLocalizer autoFishingImageRecognitionStringLocalizer = sp.GetRequiredService>(); + FakeSystemInfo systemInfo = new FakeSystemInfo(new Vanara.PInvoke.RECT(0, 0, mat.Width, mat.Height), 1); AutoFishingAssets autoFishingAssets = new AutoFishingAssets(systemInfo); Blackboard blackboard = new Blackboard(autoFishingAssets: autoFishingAssets); // - FishBite sut = new FishBite("-", blackboard, new FakeLogger(), false, new FakeInputSimulator(), ocrService, drawContent: new FakeDrawContent(), new System.Globalization.CultureInfo(cultureName), this.autoFishingImageRecognitionStringLocalizer); + FishBite sut = new FishBite("-", blackboard, new FakeLogger(), false, new FakeInputSimulator(), OcrService, drawContent: new FakeDrawContent(), new System.Globalization.CultureInfo(cultureName), autoFishingImageRecognitionStringLocalizer); BehaviourStatus actual = sut.Tick(imageRegion); // diff --git a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.GetFishpond.cs b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.GetFishpond.cs index 3940cc4b..fa52d818 100644 --- a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.GetFishpond.cs +++ b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.GetFishpond.cs @@ -30,9 +30,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}"); var imageRegion = new GameCaptureRegion(mat, 0, 0, drawContent: new FakeDrawContent()); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }); + var blackboard = new Blackboard(Predictor, sleep: i => { }); // GetFishpond sut = new GetFishpond("-", blackboard, new FakeLogger(), false, new FakeTimeProvider(), drawContent: new FakeDrawContent()); @@ -58,9 +56,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}"); var imageRegion = new GameCaptureRegion(mat, 0, 0, drawContent: new FakeDrawContent()); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }); + var blackboard = new Blackboard(Predictor, sleep: i => { }); blackboard.chooseBaitFailures = chooseBaitfailures.ToList(); blackboard.throwRodNoBaitFishFailures = throwRodNoTargetFishfailures.ToList(); @@ -93,9 +89,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}"); var imageRegion = new GameCaptureRegion(mat, 0, 0, drawContent: new FakeDrawContent()); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }); + var blackboard = new Blackboard(Predictor, sleep: i => { }); // GetFishpond sut = new GetFishpond("-", blackboard, new FakeLogger(), false, new FakeTimeProvider(), drawContent: new FakeDrawContent()); diff --git a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.ThrowRod.cs b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.ThrowRod.cs index 0f6887ad..b1105b81 100644 --- a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.ThrowRod.cs +++ b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.ThrowRod.cs @@ -30,9 +30,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}"); var imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent()); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }) + var blackboard = new Blackboard(Predictor, sleep: i => { }) { selectedBaitName = selectedBaitName }; @@ -60,9 +58,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}"); var imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent()); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }) + var blackboard = new Blackboard(Predictor, sleep: i => { }) { selectedBaitName = selectedBaitName }; @@ -89,9 +85,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}"); var imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent()); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }) + var blackboard = new Blackboard(Predictor, sleep: i => { }) { selectedBaitName = selectedBaitName }; @@ -130,9 +124,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\202503082114541115.png"); var imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent()); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }) + var blackboard = new Blackboard(Predictor, sleep: i => { }) { selectedBaitName = "fake fly bait" }; @@ -172,9 +164,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests Mat mat = new Mat(@$"..\..\..\Assets\AutoFishing\{screenshot1080p}"); var imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(new FakeMouseSimulator()), converter: new ScaleConverter(1d), drawContent: new FakeDrawContent()); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }); + var blackboard = new Blackboard(Predictor, sleep: i => { }); FakeTimeProvider fakeTimeProvider = new FakeTimeProvider(); @@ -211,9 +201,7 @@ namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests FakeDrawContent drawContent = new FakeDrawContent(); var imageRegion = new GameCaptureRegion(mat, 0, 0, new DesktopRegion(input.Mouse), converter: new ScaleConverter(1d), drawContent: drawContent); - var predictor = YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build(); - - var blackboard = new Blackboard(predictor, sleep: i => { }); + var blackboard = new Blackboard(Predictor, sleep: i => { }); FakeTimeProvider timeProvider = new FakeTimeProvider(); FakeLogger logger = new FakeLogger(); diff --git a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.cs b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.cs index b57989e0..a559b8df 100644 --- a/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.cs +++ b/Test/BetterGenshinImpact.UnitTest/GameTaskTests/AutoFishingTests/BehavioursTests.cs @@ -1,29 +1,37 @@ -using BetterGenshinImpact.Core.Recognition.OCR; -using BetterGenshinImpact.GameTask.AutoFishing; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Localization; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using BetterGenshinImpact.Core.Config; +using BetterGenshinImpact.Core.Recognition.OCR; +using BetterGenshinImpact.UnitTest.CoreTests.RecognitionTests.OCRTests; +using Compunet.YoloV8; namespace BetterGenshinImpact.UnitTest.GameTaskTests.AutoFishingTests { + [Collection("Paddle Collection")] public partial class BehavioursTests { - private readonly IStringLocalizer? autoFishingImageRecognitionStringLocalizer; #pragma warning disable CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。 - private static IOcrService ocrService; + private static YoloV8Predictor predictor; #pragma warning restore CS8618 // 在退出构造函数时,不可为 null 的字段必须包含非 null 值。请考虑添加 "required" 修饰符或声明为可为 null。 - public BehavioursTests() - { - ServiceCollection services = new ServiceCollection(); - services.AddLogging().AddLocalization(); - using ServiceProvider sp = services.BuildServiceProvider(); - this.autoFishingImageRecognitionStringLocalizer = sp.GetRequiredService>(); - LazyInitializer.EnsureInitialized(ref ocrService, () => new PaddleOcrService()); + private readonly PaddleFixture paddle; + public BehavioursTests(PaddleFixture paddle) + { + this.paddle = paddle; + } + + private IOcrService OcrService + { + get + { + return this.paddle.Get(); + } + } + + private static YoloV8Predictor Predictor + { + get + { + return LazyInitializer.EnsureInitialized(ref predictor, () => YoloV8Builder.CreateDefaultBuilder().UseOnnxModel(Global.Absolute(@"Assets\Model\Fish\bgi_fish.onnx")).Build()); + } } } }