babalae/better-genshin-impact · error · ArgumentOutOfRangeException
不支持的 Paddle OCR 模型配置
Error message
不支持的 Paddle OCR 模型配置
What it means
CreatePaddleOcrInstance switches on _config.PaddleOcrModelConfig; the default arm throws ArgumentOutOfRangeException if the value is not one of the known model configs (V4Auto, V5Auto, V5, V6, V4, V4En, V5Korean, V5Latin, V5Eslav). This protects against a config value that has no corresponding model assets.
Source
Thrown at BetterGenshinImpact/Core/Recognition/OCR/OcrFactory.cs:121
PaddleOcrModelConfig.V6 =>
new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),
PaddleOcrService.PaddleOcrModelType.V6),
PaddleOcrModelConfig.V4 =>
new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),
PaddleOcrService.PaddleOcrModelType.V4),
PaddleOcrModelConfig.V4En =>
new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),
PaddleOcrService.PaddleOcrModelType.V4En),
PaddleOcrModelConfig.V5Korean =>
new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),
PaddleOcrService.PaddleOcrModelType.V5Korean),
PaddleOcrModelConfig.V5Latin =>
new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),
PaddleOcrService.PaddleOcrModelType.V5Latin),
PaddleOcrModelConfig.V5Eslav =>
new PaddleOcrService(App.ServiceProvider.GetRequiredService<BgiOnnxFactory>(),
PaddleOcrService.PaddleOcrModelType.V5Eslav),
_ => throw new ArgumentOutOfRangeException(nameof(_config.PaddleOcrModelConfig),
_config.PaddleOcrModelConfig, "不支持的 Paddle OCR 模型配置")
};
}
public Task Unload()
{
if (_paddleOcrService is not IDisposable disposable)
{
_paddleOcrService = null;
return Task.CompletedTask;
}
try
{
disposable.Dispose();
_paddleOcrService = null;
}
catch (Exception ex)
{View on GitHub (pinned to a7cb36712d)
Solutions
- Set PaddleOcrModelConfig to a supported value (e.g. V5Auto).
- Validate the enum at config load and fall back to a known model.
- Keep the switch exhaustive when adding new model configs.
Example fix
// before
// config.PaddleOcrModelConfig = someUnknownValue
var svc = factory.PaddleOcr;
// after
if (!Enum.IsDefined(_config.PaddleOcrModelConfig))
_config.PaddleOcrModelConfig = PaddleOcrModelConfig.V5Auto;
var svc = factory.PaddleOcr; Defensive patterns
Strategy: validation
Validate before calling
if (!Enum.IsDefined(_config.PaddleOcrModelConfig) ||
!_knownModels.Contains(_config.PaddleOcrModelConfig))
_config.PaddleOcrModelConfig = PaddleOcrModelConfig.V5Auto;
var svc = factory.PaddleOcr; Type guard
static readonly HashSet<PaddleOcrModelConfig> _knownModels = new()
{
PaddleOcrModelConfig.V4Auto, PaddleOcrModelConfig.V5Auto, PaddleOcrModelConfig.V5,
PaddleOcrModelConfig.V6, PaddleOcrModelConfig.V4, PaddleOcrModelConfig.V4En,
PaddleOcrModelConfig.V5Korean, PaddleOcrModelConfig.V5Latin, PaddleOcrModelConfig.V5Eslav
}; Prevention
- Set PaddleOcrModelConfig to a supported value in defaults.
- Validate the enum at config load and fall back to V5Auto.
- Keep the switch exhaustive when adding model configs.
When it happens
Trigger: A PaddleOcrModelConfig enum value added without a case; default(PaddleOcrModelConfig) when 0 isn't a valid member; a settings file with a stale/renamed model identifier.
Common situations: Config schema migration that introduced a new enum member not yet handled; hand-edited config with a typo; deserialized settings from an older version.
Related errors
AI-assisted analysis of babalae/better-genshin-impact@a7cb36712d (2026-08-13).
Data as JSON: /api/errors/dfe547e330cb761e.
Report an issue: GitHub.