Skip to content

Commit 37fcde0

Browse files
图标识别应用两则 (#2154)
1 parent 2f55dd0 commit 37fcde0

32 files changed

+378
-238
lines changed

BetterGenshinImpact/GameTask/AutoArtifactSalvage/AutoArtifactSalvageConfig.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ public partial class AutoArtifactSalvageConfig : ObservableObject
1414
Output = hasATK && hasDEF;
1515
})(ArtifactStat);";
1616

17+
// JavaScript
18+
[ObservableProperty]
19+
private string _artifactSetFilter = "";
20+
1721
// 正则表达式
1822
[Obsolete]
1923
[ObservableProperty]

BetterGenshinImpact/GameTask/AutoArtifactSalvage/AutoArtifactSalvageTask.cs

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
using BetterGenshinImpact.GameTask.Common.BgiVision;
88
using BetterGenshinImpact.GameTask.Common.Element.Assets;
99
using BetterGenshinImpact.GameTask.Common.Job;
10+
using BetterGenshinImpact.GameTask.GetGridIcons;
1011
using BetterGenshinImpact.GameTask.Model.Area;
1112
using BetterGenshinImpact.GameTask.Model.GameUI;
1213
using BetterGenshinImpact.Helpers;
@@ -16,6 +17,7 @@
1617
using Microsoft.ClearScript.V8;
1718
using Microsoft.Extensions.Localization;
1819
using Microsoft.Extensions.Logging;
20+
using Microsoft.ML.OnnxRuntime;
1921
using OpenCvSharp;
2022
using System;
2123
using System.Collections.Frozen;
@@ -51,6 +53,8 @@ public class AutoArtifactSalvageTask : ISoloTask
5153

5254
private readonly string? javaScript;
5355

56+
private readonly string? artifactSetFilter;
57+
5458
private readonly int? maxNumToCheck;
5559

5660
private readonly RecognitionFailurePolicy? recognitionFailurePolicy;
@@ -65,6 +69,7 @@ public AutoArtifactSalvageTask(AutoArtifactSalvageTaskParam param, ILogger? logg
6569
{
6670
this.star = param.Star;
6771
this.javaScript = param.JavaScript;
72+
this.artifactSetFilter = param.ArtifactSetFilter;
6873
this.maxNumToCheck = param.MaxNumToCheck;
6974
this.recognitionFailurePolicy = param.RecognitionFailurePolicy;
7075
this.logger = logger ?? App.GetLogger<AutoArtifactSalvageTask>();
@@ -228,7 +233,11 @@ public async Task Start(CancellationToken ct)
228233
}
229234
}
230235

231-
Bv.ClickWhiteConfirmButton(ra4);
236+
using var quickSelectConfirmBtn = ra4.Find(ElementAssets.Instance.BtnWhiteConfirm);
237+
if (quickSelectConfirmBtn.IsExist())
238+
{
239+
quickSelectConfirmBtn.Click();
240+
}
232241
await Delay(1500, ct);
233242

234243

@@ -264,6 +273,38 @@ public async Task Start(CancellationToken ct)
264273
// 分解5星
265274
if (javaScript != null)
266275
{
276+
if (!string.IsNullOrWhiteSpace(this.artifactSetFilter))
277+
{
278+
// 其实是点击筛选按钮……快速选择确认的这个按钮正好和筛选按钮位置重合,摆烂直接用了
279+
quickSelectConfirmBtn.Click();
280+
await Delay(400, ct);
281+
// 点击所属套装
282+
ra5.ClickTo(315, 205);
283+
await Delay(1000, ct);
284+
// 遍历套装Grid勾选套装
285+
using InferenceSession session = GridIconsAccuracyTestTask.LoadModel(out Dictionary<string, float[]> prototypes);
286+
ArtifactSetFilterScreen gridScreen = new ArtifactSetFilterScreen(new GridParams(new Rect(40, 100, 1300, 852), 2, 3, 40, 40, 0.024), this.logger, this.ct);
287+
await foreach (ImageRegion itemRegion in gridScreen)
288+
{
289+
using Mat img125 = GetGridIconsTask.CropResizeArtifactSetFilterGridIcon(itemRegion);
290+
(string predName, _) = GridIconsAccuracyTestTask.Infer(img125, session, prototypes);
291+
if (this.artifactSetFilter.Contains(predName))
292+
{
293+
itemRegion.Click();
294+
await Delay(100, ct);
295+
}
296+
}
297+
// 点击确认筛选
298+
using var confirmFilterBtnRegion = CaptureToRectArea();
299+
Bv.ClickWhiteConfirmButton(confirmFilterBtnRegion);
300+
await Delay(1500, ct);
301+
// 点击确认
302+
using var confirmBtnRegion = CaptureToRectArea();
303+
Bv.ClickWhiteConfirmButton(confirmBtnRegion);
304+
await Delay(600, ct);
305+
}
306+
307+
// 逐一点选查看面板筛选
267308
await Salvage5Star();
268309
logger.LogInformation("筛选完毕,请复查并手动分解");
269310
}

BetterGenshinImpact/GameTask/AutoArtifactSalvage/AutoArtifactSalvageTaskParam.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,18 @@ namespace BetterGenshinImpact.GameTask.AutoArtifactSalvage
99
{
1010
public class AutoArtifactSalvageTaskParam : BaseTaskParam<AutoArtifactSalvageTask>
1111
{
12-
public AutoArtifactSalvageTaskParam(int star, string? javaScript, int? maxNumToCheck, RecognitionFailurePolicy? recognitionFailurePolicy, CultureInfo? cultureInfo = null, IStringLocalizer<AutoArtifactSalvageTask>? stringLocalizer = null) : base(cultureInfo, stringLocalizer)
12+
public AutoArtifactSalvageTaskParam(int star, string? javaScript, string? artifactSetFilter, int? maxNumToCheck, RecognitionFailurePolicy? recognitionFailurePolicy, CultureInfo? cultureInfo = null, IStringLocalizer<AutoArtifactSalvageTask>? stringLocalizer = null) : base(cultureInfo, stringLocalizer)
1313
{
1414
Star = star;
1515
JavaScript = javaScript;
16+
ArtifactSetFilter = artifactSetFilter;
1617
MaxNumToCheck = maxNumToCheck;
1718
RecognitionFailurePolicy = recognitionFailurePolicy;
1819
}
1920

2021
public int Star { get; set; }
2122
public string? JavaScript { get; set; }
23+
public string? ArtifactSetFilter { get; set; }
2224
public int? MaxNumToCheck { get; set; }
2325
public RecognitionFailurePolicy? RecognitionFailurePolicy { get; set; }
2426
}

BetterGenshinImpact/GameTask/AutoDomain/AutoDomainTask.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1312,6 +1312,6 @@ private async Task ArtifactSalvage()
13121312
star = 4;
13131313
}
13141314

1315-
await new AutoArtifactSalvageTask(new AutoArtifactSalvageTaskParam(star, javaScript: null, maxNumToCheck: null, recognitionFailurePolicy: null)).Start(_ct);
1315+
await new AutoArtifactSalvageTask(new AutoArtifactSalvageTaskParam(star, javaScript: null, artifactSetFilter: null, maxNumToCheck: null, recognitionFailurePolicy: null)).Start(_ct);
13161316
}
13171317
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)