去除所有 Cv2.ImRead ,解决中文路径问题

This commit is contained in:
辉鸭蛋
2026-02-20 22:28:45 +08:00
parent f7976b0bbd
commit f80939dad4
5 changed files with 18 additions and 6 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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;
/// </summary>
public static partial class Bv
{
public static Mat ImRead(string fileName, ImreadModes flags = ImreadModes.Color)
{
return Mat.FromStream(File.OpenRead(fileName), flags);
}
/// <summary>
/// 等待图像被找到
/// </summary>

View File

@@ -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);
}
}

View File

@@ -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();
}