翼度科技»论坛 编程开发 .net 查看内容

C# 手写识别方案整理

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
书写识别,网上的大佬们都有输出。
书写识别存在的2个问题:
我结合之前开发经验,整理下书写识别比较完善的方案。
单个字的识别方案:
  1. 1     private List<string> Recognize(StrokeCollection strokes)
  2. 2     {
  3. 3         if (strokes == null || strokes.Count == 0)
  4. 4             return null;
  5. 5         // 创建识别器
  6. 6         var recognizers = new Recognizers();
  7. 7         var chineseRecognizer = recognizers.GetDefaultRecognizer(0x0804);
  8. 8         using var recContext = chineseRecognizer.CreateRecognizerContext();
  9. 9         // 根据StrokeCollection构造 Ink 类型的笔迹数据。
  10. 10         using var stream = new MemoryStream();
  11. 11         strokes.Save(stream);
  12. 12         using var inkStorage = new Ink();
  13. 13         inkStorage.Load(stream.ToArray());
  14. 14         using var inkStrokes = inkStorage.Strokes;
  15. 15         //设置笔画数据
  16. 16         using (recContext.Strokes = inkStrokes)
  17. 17         {
  18. 18             //识别笔画数据
  19. 19             var recognitionResult = recContext.Recognize(out var statusResult);
  20. 20             // 如果识别过程中出现问题,则返回null
  21. 21             return statusResult == RecognitionStatus.NoError ?
  22. 22                 recognitionResult.GetAlternatesFromSelection().OfType<RecognitionAlternate>().Select(i => i.ToString()).ToList() :
  23. 23                 null;
  24. 24         }
  25. 25     }
复制代码
多字的识别方案:
  1. 1     public IEnumerable<string> Recognize(StrokeCollection strokes)
  2. 2     {
  3. 3         if (strokes == null || strokes.Count == 0)
  4. 4             return null;
  5. 5
  6. 6         using var analyzer = new InkAnalyzer();
  7. 7         analyzer.AddStrokes(strokes,0x0804);
  8. 8         analyzer.SetStrokesType(strokes, StrokeType.Writing);
  9. 9         var status = analyzer.Analyze();
  10. 10         if (status.Successful)
  11. 11         {
  12. 12             var alternateCollection = analyzer.GetAlternates();
  13. 13             return alternateCollection.OfType<AnalysisAlternate>().Select(x => x.RecognizedString);
  14. 14         }
  15. 15         return null;
  16. 16     }
复制代码
看下效果图

 引用的命名空间是:Windows.Ink和MicroSoft.Ink,需要引用的DLL文件有四个。
IACore.dll、IALoader.dll、IAWinFX.dll,这三个DLL文件都是Intel集成显卡驱动的重要组成部分,包含了图形处理模块,尤其是IAWinFX为WPF应用提供了支持硬件加速的图形渲染。
以及Microsoft.Ink.dll
值得说明一下,Windows.Ink与Microsoft.Ink在平台支持上不同,如果有要适配不同版本的windows,需要去上方代码修改下

  • Microsoft.Ink 支持 Windows XP、Vista 和 Win7 等旧版 Windows,兼容性高。但Win10及以上版本,官方推荐使用Windows.Ink
  • Windows.Ink,则仅支持Win8以上版本
DLL引用环境遇到问题,可以参考这篇博客 【WPF】提高InkAnalyer手写汉字识别的准确率 - 大佛脚下 - 博客园 (cnblogs.com)
 
参考博客列表:
C# vs2012 如何实现手写识别?快来看看吧~_手写识别控件_想吃米豆腐的博客-CSDN博客
C# 实现手写输入功能_zls365365的博客-CSDN博客
【WPF】提高InkAnalyer手写汉字识别的准确率 - 大佛脚下 - 博客园 (cnblogs.com)
出处:http://www.cnblogs.com/kybs0/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
来源:https://www.cnblogs.com/kybs0/archive/2023/04/28/17361589.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具