diff --git a/BetterGenshinImpact/Core/Recognition/OCR/Paddle/PaddleOcrService.cs b/BetterGenshinImpact/Core/Recognition/OCR/Paddle/PaddleOcrService.cs index c54b5797..01f29392 100644 --- a/BetterGenshinImpact/Core/Recognition/OCR/Paddle/PaddleOcrService.cs +++ b/BetterGenshinImpact/Core/Recognition/OCR/Paddle/PaddleOcrService.cs @@ -7,6 +7,7 @@ using System.Linq; using BetterGenshinImpact.Core.Config; using BetterGenshinImpact.Core.Recognition.OCR.Engine; using BetterGenshinImpact.Core.Recognition.ONNX; +using BetterGenshinImpact.GameTask.Common.BgiVision; using OpenCvSharp; using OpenCvSharp.Extensions; using YamlDotNet.Core; @@ -247,7 +248,7 @@ public class PaddleOcrService : IOcrService, IOcrMatchService, IDisposable _localRecModel = modelsRec; // 预热模型 - using var preHeatImageMat = Cv2.ImRead(modelType.PreHeatImagePath) ?? + using var preHeatImageMat = Bv.ImRead(modelType.PreHeatImagePath) ?? throw new FileNotFoundException($"预热图片未找到: {modelType.PreHeatImagePath}"); // Debug输出结果 var preHeatResult = RunAll(preHeatImageMat, 1); diff --git a/BetterGenshinImpact/Core/Recognition/OpenCv/FeatureMatch/Feature2DExtensions.cs b/BetterGenshinImpact/Core/Recognition/OpenCv/FeatureMatch/Feature2DExtensions.cs index e802f1f6..dea354ab 100644 --- a/BetterGenshinImpact/Core/Recognition/OpenCv/FeatureMatch/Feature2DExtensions.cs +++ b/BetterGenshinImpact/Core/Recognition/OpenCv/FeatureMatch/Feature2DExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using BetterGenshinImpact.GameTask.Common.BgiVision; using BetterGenshinImpact.Helpers; using OpenCvSharp; @@ -24,7 +25,7 @@ public static class Feature2DExtensions public static void SaveFeatures(this Feature2D feature2D, string trainImagePath, string trainKeyPointsPath, string trainDescriptorsPath) { Mat trainDescriptors = new(); - var img = Cv2.ImRead(trainImagePath, ImreadModes.Grayscale); + var img = Bv.ImRead(trainImagePath, ImreadModes.Grayscale); feature2D.DetectAndCompute(img, null, out var trainKeyPoints, trainDescriptors); diff --git a/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs b/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs index cd65b226..00ccce31 100644 --- a/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs +++ b/BetterGenshinImpact/GameTask/Common/BgiVision/BvImage.cs @@ -1,7 +1,9 @@ -using System.Threading; +using System.IO; +using System.Threading; using System.Threading.Tasks; using BetterGenshinImpact.Core.Recognition; using BetterGenshinImpact.GameTask.Model.Area; +using OpenCvSharp; namespace BetterGenshinImpact.GameTask.Common.BgiVision; @@ -10,6 +12,12 @@ namespace BetterGenshinImpact.GameTask.Common.BgiVision; /// public static partial class Bv { + + public static Mat ImRead(string fileName, ImreadModes flags = ImreadModes.Color) + { + return Mat.FromStream(File.OpenRead(fileName), flags); + } + /// /// 等待图像被找到 /// diff --git a/BetterGenshinImpact/GameTask/Common/Map/CharacterOrientation.cs b/BetterGenshinImpact/GameTask/Common/Map/CharacterOrientation.cs index 11732b4e..01010e61 100644 --- a/BetterGenshinImpact/GameTask/Common/Map/CharacterOrientation.cs +++ b/BetterGenshinImpact/GameTask/Common/Map/CharacterOrientation.cs @@ -1,5 +1,6 @@ using OpenCvSharp; using System; +using BetterGenshinImpact.GameTask.Common.BgiVision; namespace BetterGenshinImpact.GameTask.Common.Map; @@ -119,7 +120,7 @@ public class CharacterOrientation public static int GameAngle2(string path) { - var mat = Cv2.ImRead(path); + var mat = Bv.ImRead(path); return Compute(mat); } } diff --git a/BetterGenshinImpact/GameTask/Common/Map/Maps/Base/BaseMapLayerByTemplateMatch.cs b/BetterGenshinImpact/GameTask/Common/Map/Maps/Base/BaseMapLayerByTemplateMatch.cs index af1291da..1c57731a 100644 --- a/BetterGenshinImpact/GameTask/Common/Map/Maps/Base/BaseMapLayerByTemplateMatch.cs +++ b/BetterGenshinImpact/GameTask/Common/Map/Maps/Base/BaseMapLayerByTemplateMatch.cs @@ -9,6 +9,7 @@ using BetterGenshinImpact.Helpers; using OpenCvSharp; using System.Text.Json.Serialization; using BetterGenshinImpact.Core.Recognition.OpenCv.TemplateMatch; +using BetterGenshinImpact.GameTask.Common.BgiVision; namespace BetterGenshinImpact.GameTask.Common.Map.Maps.Base; @@ -33,12 +34,12 @@ public class BaseMapLayerByTemplateMatch SpeedTimer speedTimer = new($"加载 {LayerId} 地图图片"); var colorMapFileName = LayerId + "_color" + ".webp"; var colorMapPath = Path.Combine(layerDir, colorMapFileName); - var coarseColorMap = Cv2.ImRead(colorMapPath)?? throw new Exception($"彩色分层地图 {LayerId} 读取失败"); + var coarseColorMap = Bv.ImRead(colorMapPath)?? throw new Exception($"彩色分层地图 {LayerId} 读取失败"); speedTimer.Record("精确匹配用彩图"); CoarseColorMatcher = new FastSqDiffMatcher(coarseColorMap, new Size(52, 52)); var grayMapFileName = LayerId + "_gray" + (IsOverSize ? ".png" : ".webp"); var grayMapPath = Path.Combine(layerDir, grayMapFileName); - FineGrayMap = Cv2.ImRead(grayMapPath, ImreadModes.Grayscale)?? throw new Exception($"灰度分层地图 {LayerId} 读取失败"); + FineGrayMap = Bv.ImRead(grayMapPath, ImreadModes.Grayscale)?? throw new Exception($"灰度分层地图 {LayerId} 读取失败"); speedTimer.Record("粗匹配用灰度图"); speedTimer.DebugPrint(); }