最近项目中需要用到一个手写键盘,我们使用了WPF的InkCanvas+InkAnalyer来开发。

按照文档,一般的代码写法如下:

            var analyzer = new InkAnalyzer();analyzer.AddStrokes(strokes, Constants.ChsLanguageId);analyzer.SetStrokesType(strokes, StrokeType.Writing);var status = analyzer.Analyze();if (status.Successful){return analyzer.GetAlternates().OfType<AnalysisAlternate>().Select(x => x.RecognizedString).ToArray();}analyzer.Dispose();

不过,在实际跑起来之后,却发现识别精确度很低,经常会把一个字识别成好几个字,如果写的稍微远一点,则错误更多。

一个简单的人字会被识别成两个笔画

一个稍微写的开点的游字识别成了三个字

这让我们非常苦恼,在网上查阅资料也没有相关的方案。

经过我们仔细尝试后发现,如果我们把一个字连起来写一气呵成,识别率倒是上去了不少:

但是,我们不可能要求用户所有字都一气呵成吧?

就在这时,我们想到,既然不能要求用户把字一气呵成的写完,能不能通过程序让用户写的笔画“一气呵成”呢?

有了这个灵感,简单改动,将代码改成如下的写法:

        /// <summary>/// 识别/// </summary>/// <param name="strokes">笔迹集合</param>/// <returns>候选词数组</returns>public string[] Recognize(StrokeCollection strokes){if (strokes == null || strokes.Count == 0)return Constants.EmptyAlternates;var stroke = GetCombinedStore(strokes);var analyzer = new InkAnalyzer();analyzer.AddStroke(stroke, Constants.ChsLanguageId);analyzer.SetStrokeType(stroke, StrokeType.Writing);var status = analyzer.Analyze();if (status.Successful){return analyzer.GetAlternates().OfType<AnalysisAlternate>().Select(x => x.RecognizedString).ToArray();}analyzer.Dispose();return Constants.EmptyAlternates;}private static Stroke GetCombinedStore(StrokeCollection strokes){var points = new StylusPointCollection();foreach (var stroke in strokes){points.Add(stroke.StylusPoints);}return new Stroke(points);}

注意,在这种写法里面,我们并不直接使用InkCanvas给出的StrokeCollection,而是重新创建了一个Stroke,这个Stroke的StylusPoints是把所有Stroke的StylusPoints都添加进去了,多个Stroke变成了一个Stroke,这下我们再试试:

终于达到我们的要求了,呵呵

希望能给大家带来帮助

【附】如何启用手写识别:

1、在控制面板中选择 程序和功能->添加/删除Windows组件,选择TabletPC组件功能。

2、引用IACore.dll,IALoader.dll,IAWinFX.dll,Microsoft.Ink.Analysis.dll

3、App.config里面需要设置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration><startup useLegacyV2RuntimeActivationPolicy="true"><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/></startup>
</configuration>

代码下载:http://files.cnblogs.com/RMay/WpfRecognize.7z

转载于:https://www.cnblogs.com/RMay/p/improve_inkanalyer_recognization.html

【WPF】提高InkAnalyer手写汉字识别的准确率相关推荐

  1. DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率

    DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率 导读 上一篇文章,比较了三种算法实现对手写数字识别,其中,SVM和神经网络算法表现非 ...

  2. 联机与脱机 手写汉字识别

    1. 知识了解 1.1 汉字识别的两类主流方法 Online recognition: 联机识别,基于笔画轨迹 Offline recognition: 脱机识别, 基于图像 ( 联机手写汉字识别所处 ...

  3. 模式识别报告:HWDB1.1手写汉字识别

    一.简介 本次实验的任务是汉字识别.使用pytorch深度学习框架和HWDB手写汉字数据集进行实验. 由于数据集过于庞大,这里只选取了前500个类作为实验. 二.开发环境 目前主流的神经网络框架有Te ...

  4. TensorFlow22: 手写汉字识别

    NIST手写数字数据集通常做为深度学习的练习数据集,这个数据集恐怕早已经被大家玩坏了.本帖就介绍一个和MNIST类似,同时又适合国人练习的数据集-手写汉字数据集,然后训练一个简单的Deep Convo ...

  5. 联机手写汉字识别,基于新型RNN网络结构的方法

    本文简要介绍2019年4月Pattern Recognition录用论文"RecognizingOnline Handwritten Chinese Characters Using RNN ...

  6. halcon识别ocr汉字_手写汉字识别——手写文本快速电子化的好方法

    最近在试着把之前手写的一些文本录入电脑,在动手敲打之前,我就想会不会已经有很好的工具能够解决这个问题了呢?一搜索一尝试,我才发现原来手写汉字识别已经发展到很实用的地步啦-连我这..一手烂字都能有很高的 ...

  7. 【手写汉字识别】基于深度学习的脱机手写汉字识别技术研究

    写在前面 最近一段时间在为本科毕业设计做一些知识储备,方向与手写识别的系统设计相关,在看到一篇2019年题为<基于深度学习的脱机手写汉字识别技术研究>的工学硕士论文后,感觉收获比较大,准备 ...

  8. OCR(脱机手写汉字识别与印刷汉字识别)

    4 "最后的堡垒"--脱机手写汉字识别 4.1 攻克堡垒待创新 脱机手写汉字识别的用途是把手写字符用字符阅读器自动输入计算机,常用于信函分拣.银行支票识别和统计报表处理以及手写文稿 ...

  9. 项目经验分享:基于昇思MindSpore实现手写汉字识别

    项目信息Program Info 项目要求 基于MindSpore的实现在线手写汉字识别,主要包括手写汉字检测和手写汉字识别,能较准确的对标准字体的手写文字进行识别,识别后通过人工干预对文本进行适当修 ...

最新文章

  1. oracle 提取当天日志,powershell提取日志内容
  2. Android 自定义控件开发入门(一)
  3. zabbix 安装时常见问题处理
  4. crontab+php-cgi/php 定时执行PHP脚本
  5. 【CyberSecurityLearning 附】渗透测试技术选择题 + 法律法规
  6. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第八章——自编解析与答案
  7. 如何找到点击Object ID 白屏问题的root cause
  8. Linux 文件系统初探
  9. FirstLetterUtil
  10. 视达配色教程2 好的配色的第一条件是什么
  11. docker镜像与容器操作流程
  12. SPSS 逐步回归【SPSS 028期】
  13. html5 廖雪峰,廖雪峰 JavaScript Python Git 教程.pdf-原创力文档
  14. multiparty 和 busboy
  15. 考研英语近义词与反义词·十三
  16. 鼠标右键转圈圈_了解原理并解决鼠标右键转圈圈
  17. ARM MIPS PowerPC X86 四大常见处理架构比较
  18. .Net MVC个人笔记
  19. 百度云盘搜索引擎微信公证号_全L导演 H265 1080P 双语版@微信公众号edy521
  20. MG3680无法在网络上检测到打印机

热门文章

  1. 探索startActivity流程及在Activity间是如何传递Intent的
  2. Windows CE File System [2/2]
  3. 精简改良(生成树dp)
  4. 以太坊源码分析——BlockChain
  5. iOS 后台返回json解析出现的null的解决办法
  6. Python Web框架——Flask
  7. node-inspector使用方法
  8. jQuery选择器 (详解)
  9. myeclipse中ALT+/怎么不管用了
  10. Android UI事件处理