书写识别,大佬们都有输出。
书写识别存在的2个问题:
- 直接拿官网的案例(将 Windows Ink 笔划识别为文本和形状 - Windows apps | Microsoft Learn),会发现输出准确度不高。
- 另外如果书写过快,词组识别也是个问题,毕竟无法准确分割字之间的笔迹。
我结合之前开发经验,整理下书写识别比较完善的方案。
单个字的识别方案:
1 private List<string> Recognize(StrokeCollection strokes) 2 { 3 if (strokes == null || strokes.Count == 0) 4 return null; 5 // 创建识别器 6 var recognizers = new Recognizers(); 7 var chineseRecognizer = recognizers.GetDefaultRecognizer(0x0804); 8 using var recContext = chineseRecognizer.CreateRecognizerContext(); 9 // 根据StrokeCollection构造 Ink 类型的笔迹数据。 10 using var stream = new MemoryStream(); 11 strokes.Save(stream); 12 using var inkStorage = new Ink(); 13 inkStorage.Load(stream.ToArray()); 14 using var inkStrokes = inkStorage.Strokes; 15 //设置笔画数据 16 using (recContext.Strokes = inkStrokes) 17 { 18 //识别笔画数据 19 var recognitionResult = recContext.Recognize(out var statusResult); 20 // 如果识别过程中出现问题,则返回null 21 return statusResult == RecognitionStatus.NoError ? 22 recognitionResult.GetAlternatesFromSelection().OfType<RecognitionAlternate>().Select(i => i.ToString()).ToList() : 23 null; 24 } 25 }
多字的识别方案:
1 public IEnumerable<string> Recognize(StrokeCollection strokes) 2 { 3 if (strokes == null || strokes.Count == 0) 4 return null; 5 6 using var analyzer = new InkAnalyzer(); 7 analyzer.AddStrokes(strokes,0x0804); 8 analyzer.SetStrokesType(strokes, StrokeType.Writing); 9 var status = analyzer.Analyze(); 10 if (status.Successful) 11 { 12 var alternateCollection = analyzer.GetAlternates(); 13 return alternateCollection.OfType<AnalysisAlternate>().Select(x => x.RecognizedString); 14 } 15 return null; 16 }
看下效果图
DLL引用环境遇到问题,可以参考这篇博客 【WPF】提高InkAnalyer手写汉字识别的准确率 - 大佛脚下 - 博客园 (cnblogs.com)
参考博客列表:
C# vs2012 如何实现手写识别?快来看看吧~_手写识别控件_想吃米豆腐的博客-CSDN博客
C# 实现手写输入功能_zls365365的博客-CSDN博客
【WPF】提高InkAnalyer手写汉字识别的准确率 - 大佛脚下 - 博客园 (cnblogs.com)
标签:null,C#,strokes,var,using,手写,识别 From: https://www.cnblogs.com/kybs0/p/17361589.html