feat: WinRT Ink Analysis 性能优化重构方案
Co-authored-by: traeagent <traeagent@users.noreply.github.com>
This commit is contained in:
@@ -40,7 +40,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// 启动阶段只做能力探测,不做 WinRT 组件实例化(避免冷启动延迟)
|
// 启动阶段只做能力探测,不做 WinRT 组件实例化(避免冷启动延迟)
|
||||||
_isModernSystemAvailable = WinRtInkShapeRecognizer.IsApiAvailable && Environment.Is64BitProcess;
|
_isModernSystemAvailable = WinRtInkShapeRecognizer.IsApiAvailable;
|
||||||
_isInitialized = true;
|
_isInitialized = true;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -153,14 +153,6 @@ namespace Ink_Canvas.Helpers
|
|||||||
return Task.FromResult(strokes);
|
return Task.FromResult(strokes);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Environment.Is64BitProcess)
|
|
||||||
{
|
|
||||||
LogHelper.WriteLogToFile(
|
|
||||||
"[手写体] CorrectInkAsync 跳过:非 64 位进程,WinRT 手写体替换不可用。笔画数=" + strokes.Count,
|
|
||||||
LogHelper.LogType.Info);
|
|
||||||
return Task.FromResult(strokes);
|
|
||||||
}
|
|
||||||
|
|
||||||
EnsureModernAnalyzerInitialized();
|
EnsureModernAnalyzerInitialized();
|
||||||
if (_modernProcessor == null)
|
if (_modernProcessor == null)
|
||||||
{
|
{
|
||||||
@@ -185,7 +177,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// WinRT 手写体识别(需 64 位进程、Windows 10+ 及系统手写识别组件)。返回分词候选与包围框,供剪贴板或插件使用。
|
/// WinRT 手写体识别(需 Windows 10+ 及系统手写识别组件)。返回分词候选与包围框,供剪贴板或插件使用。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public Task<HandwritingRecognitionResult> RecognizeHandwritingAsync(
|
public Task<HandwritingRecognitionResult> RecognizeHandwritingAsync(
|
||||||
StrokeCollection strokes,
|
StrokeCollection strokes,
|
||||||
@@ -197,8 +189,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (!Environment.Is64BitProcess
|
if (!ShapeRecognitionRouter.ResolveUseWinRt(mode)
|
||||||
|| !ShapeRecognitionRouter.ResolveUseWinRt(mode)
|
|
||||||
|| !WinRtHandwritingRecognizer.IsApiAvailable)
|
|| !WinRtHandwritingRecognizer.IsApiAvailable)
|
||||||
return Task.FromResult(HandwritingRecognitionResult.Empty);
|
return Task.FromResult(HandwritingRecognitionResult.Empty);
|
||||||
|
|
||||||
@@ -224,7 +215,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
public string GetSystemInfo()
|
public string GetSystemInfo()
|
||||||
{
|
{
|
||||||
return _isModernSystemAvailable
|
return _isModernSystemAvailable
|
||||||
? $"现代化64位墨迹识别系统 (Windows Runtime API) - 进程架构: {Environment.Is64BitProcess}"
|
? $"现代化墨迹识别系统 (Windows Runtime API) - 进程架构: {Environment.Is64BitProcess}"
|
||||||
: $"传统墨迹识别系统 (IACore) - 进程架构: {Environment.Is64BitProcess}";
|
: $"传统墨迹识别系统 (IACore) - 进程架构: {Environment.Is64BitProcess}";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>WinRT 手写识别(64 位 + Windows 10+)。</summary>
|
/// <summary>WinRT 手写识别(Windows 10+)。</summary>
|
||||||
public static Task<HandwritingRecognitionResult> RecognizeHandwritingUnifiedAsync(
|
public static Task<HandwritingRecognitionResult> RecognizeHandwritingUnifiedAsync(
|
||||||
StrokeCollection strokes,
|
StrokeCollection strokes,
|
||||||
ShapeRecognitionEngineMode mode) =>
|
ShapeRecognitionEngineMode mode) =>
|
||||||
|
|||||||
@@ -17,13 +17,13 @@ namespace Ink_Canvas.Helpers
|
|||||||
public static class ShapeRecognitionRouter
|
public static class ShapeRecognitionRouter
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 自动模式:按当前进程位数选择——<c>64</c> 位进程用 WinRT,<c>32</c> 位进程(含 x86 目标在 WOW64 下运行)用 IACore。
|
/// 自动模式:在 Windows 10 及以上系统默认使用 WinRT,否则使用 IACore。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static bool ResolveUseWinRt(ShapeRecognitionEngineMode mode)
|
public static bool ResolveUseWinRt(ShapeRecognitionEngineMode mode)
|
||||||
{
|
{
|
||||||
if (mode == ShapeRecognitionEngineMode.WinRT) return true;
|
if (mode == ShapeRecognitionEngineMode.WinRT) return true;
|
||||||
if (mode == ShapeRecognitionEngineMode.IACore) return false;
|
if (mode == ShapeRecognitionEngineMode.IACore) return false;
|
||||||
return Environment.Is64BitProcess;
|
return OSVersion.GetOperatingSystem() >= OSVersionExtension.OperatingSystem.Windows10;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool ShouldRunShapeRecognition(bool inkToShapeEnabled, ShapeRecognitionEngineMode mode)
|
public static bool ShouldRunShapeRecognition(bool inkToShapeEnabled, ShapeRecognitionEngineMode mode)
|
||||||
@@ -31,7 +31,7 @@ namespace Ink_Canvas.Helpers
|
|||||||
if (!inkToShapeEnabled) return false;
|
if (!inkToShapeEnabled) return false;
|
||||||
if (ResolveUseWinRt(mode))
|
if (ResolveUseWinRt(mode))
|
||||||
return OSVersion.GetOperatingSystem() >= OSVersionExtension.OperatingSystem.Windows10;
|
return OSVersion.GetOperatingSystem() >= OSVersionExtension.OperatingSystem.Windows10;
|
||||||
return !Environment.Is64BitProcess;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ShapeRecognitionEngineMode FromSettingsInt(int value)
|
public static ShapeRecognitionEngineMode FromSettingsInt(int value)
|
||||||
|
|||||||
@@ -568,7 +568,7 @@
|
|||||||
<value>WinRT识别转手写体字形</value>
|
<value>WinRT识别转手写体字形</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InkRecog_HandwritingBeautifyHint" xml:space="preserve">
|
<data name="InkRecog_HandwritingBeautifyHint" xml:space="preserve">
|
||||||
<value>#开启后,调用墨迹纠正API时:先WinRT识别手写词,再将识别成功的文字用手写风格字体(默认Ink Free/楷体等,可在设置JSON的handwritingCorrectionFontFamily调整)转成字形轮廓墨迹替换原笔画。需64位与WinRT。</value>
|
<value>#开启后,调用墨迹纠正API时:先WinRT识别手写词,再将识别成功的文字用手写风格字体(默认Ink Free/楷体等,可在设置JSON的handwritingCorrectionFontFamily调整)转成字形轮廓墨迹替换原笔画。需WinRT。</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="InkRecog_ShapeEngine" xml:space="preserve">
|
<data name="InkRecog_ShapeEngine" xml:space="preserve">
|
||||||
<value>识别引擎</value>
|
<value>识别引擎</value>
|
||||||
|
|||||||
Reference in New Issue
Block a user