码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C# 手写识别方案整理


    书写识别,网上的大佬们都有输出。

    书写识别存在的2个问题:

    1. 直接拿官网的案例(将 Windows Ink 笔划识别为文本和形状 - Windows apps | Microsoft Learn),会发现输出准确度不高。
    2. 另外如果书写过快,词组识别也是个问题,毕竟无法准确分割字之间的笔迹。

    我结合之前开发经验,整理下书写识别比较完善的方案。

    单个字的识别方案

    复制代码
     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().Select(i => i.ToString()).ToList() :
    23                 null;
    24         }
    25     }
    复制代码

    这里单字识别,想要提高识别率,可以将stroke合并成一个:

    复制代码
    1     var points = new StylusPointCollection();
    2     foreach (var stroke in strokes)
    3     {
    4         points.Add(new StylusPointCollection(stroke.StylusPoints));
    5     }
    6     var newStroke = new StrokeCollection
    7     {
    8         new Stroke(points)
    9     };
    复制代码

    多字的识别方案

    复制代码
     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().Select(x => x.RecognizedString);
    14         }
    15         return null;
    16     }
    复制代码

    看下效果图

    环境及DLL引用

    引用的命名空间是:Windows.Ink和MicroSoft.Ink,需要引用的DLL文件有四个。可点击下载:InkRecognizeDependencies.rar

    • 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以上版本

    引用了上面4个DLL文件后,还有2个环境问题:

    • 在App.config文件中,对节点startup添加属性 useLegacyV2RuntimeActivationPolicy="true"
    • 修改项目配置为x86

    环境遇到问题,也可以参考这篇博客 【WPF】提高InkAnalyer手写汉字识别的准确率 - 大佛脚下 - 博客园 (cnblogs.com)

     

    参考博客列表:

    C# vs2012 如何实现手写识别?快来看看吧~_手写识别控件_想吃米豆腐的博客-CSDN博客

    C# 实现手写输入功能_zls365365的博客-CSDN博客

    【WPF】提高InkAnalyer手写汉字识别的准确率 - 大佛脚下 - 博客园 (cnblogs.com)

  • 相关阅读:
    Feign 如何设置超时时间
    python:绘制回归预测结果真实值和预测值之间的散点密度图
    synchronized的底层原理
    ESXi5.5远程升级到ESXi6.7 (VMware Hypervisor)
    在Domino上部署运行在Web浏览器中的Notes客户机
    mysql 安装问题 perl(JSON) is needed by mysql-community-test
    基于Java+SpringBoot+Vue前后端分离智慧生活商城系统设计和实现
    荣电集团与钕希科技签署全面战略合作
    基于ssm的疫情时期药物管理系统设计与实现-计算机毕业设计源码+LW文档
    海量数据插入的各种方案试验
  • 原文地址:https://www.cnblogs.com/kybs0/p/17361589.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号