//========================================================================
//TITLE:
//    漫谈WinCE的手写识别技术(一)
//AUTHOR:
//    norains
//DATE:
//    Wednesday  24-January -2007
//Environment:
//  EVC4.0 + Standard SDK
//========================================================================
  WinCE从4.0开始,集成了手写识别输入法,可以识别繁体中文,日文和韩文.因此如果在WinCE下采用相应的API函数重写上述三种语言的手写识别输入似乎显得多此一举.但多余并不代表没有了解的价值,今天,就让我们抽丝剥茧来探究WinCE下的手写识别吧!

大体上来说,调用WinCE自带的识别引擎进行文字识别需要经过如下十个步骤:

1.调用HwxConfig ()函数初始化识别引擎.在每个应用程序中,该初始化只需要调用一次.

2.调用HwxCreate()创建识别引擎句柄.

函数原型为:HRC HwxCreate(HRC hrc).该函数有个形参hrc,保存的是已存在的识别引擎句柄.如果传入该形参,则可以根据已存在的引擎的设置来创建新的识别引擎.当然通常情况下我们仅仅是创建一个新的引擎,所以该函数更多情况下是不使用形参:

3.调用HwxSetGuide()函数来设置识别框的范围.

设置该识别框范围的重要性不言而喻,因为如果设置不恰当,则直接导致识别出错甚至无法识别.

该函数传入的形参是一个HWXGUIDE结构,该结构包含了识别框的一切信息:

typedef structtagHWXGUIDE {
    UINT cHorzBox;
    UINT cVertBox;
    INT xOrigin;
    INT yOrigin;
    UINT cxBox;
    UINT cyBox;
    UINT cxOffset;
    UINT cyOffset;
    UINT cxWriting;
    UINT cyWriting;
    UINT cyMid;
    UINT cyBase;
    UINT nDir; 
  }HWXGUIDE, *PHWXGUIDE;

如果用文字来描述各个形参的含义,我实在没这个能力让语言读起来不觉得乏味,所以最简单最直接最直观的方法,我还是用图片来标识出各个参数的含义,至少应该不会让脑袋觉得发晕:
 
  
  xOriginy,Origin分别定义了识别框的起始坐标,而cxBox,cyBox则分别定义了识别框的长度和宽度.需要注意的是,这四个参数是以屏幕坐标为基准,如果我们获得的是应用程序窗口的坐标,在赋值之前,我们需要调用MapWindowPoints()进行转换.当然,相同的道理也同样运用于该结构的其它形参.
  
  nDir定义了书写的顺序,我们一般使用HWX_HORIZONTAL,表明书写方式是水平书写.当然,如果有特殊要求,我们还可以设置HWX_BIDIRECTIONAL或HWX_VERTICAL.

4.调用HwxALCValid()和HwxALCPriority()定义识别的标准.

HwxALCValid()用来定义识别字符的范围,HwxALCPriority()则是定义返回字符的优先级.

根据帮助文档,可以识别的字符文字为:简体中文,繁体中文,日文,韩文和英文.但在实际使用中,却是无法正确识别简体中文,这不能不说是一个遗憾.在平时应用中,我们一般只需识别一种文字,此时我们可以只是简单地设置HwxALCValid()即可:

HwxALCValid(hrc,ALC_KANJI_ALL); //识别汉字

5.调用HwxSetContext()设置前文,提高文字识别率.如果没有前文,可以不调用该函数.

6.调用HwxInput()加入文字笔画.如果文字是多笔画,则应多次调用该函数.

函数原型是:

BOOL HwxInput( 
          HRC hrc, 
          POINT*lppnt, 
          UINT upoints, 
          DWORD timestamp 
        );

lppnt是输入的笔画坐标,upoints是坐标的个数,和HWXGUIDE的参数一样,这里的坐标也是屏幕坐标系.timestamp是时间,一般情况下,我们可以设置为0.
  
  需要注意的是,如果是多笔画的文字,最好不要一次性将所有笔画点阵通过HwxInput()输入,否则最后的识别结果将会大相径庭.因为识别引擎是一笔一划进行输入识别的,如果多笔画文字一次性输入,引擎可能将所有笔画当成一个笔画,从而导致识别结果异常不准确.      
  
7.调用HwxEndInput()告知引擎笔画输入结束,即将要进行识别部分.

8.调用HwxProcess()让引擎进行识别处理.

9.调用HwxResultsAvailable()获取识别的字符数.

根据文档,HwxResultsAvailable()返回识别的字符数.然而在WinCE4.2中,调用hwxcht.dll的话,任何时候都是返回为0值,即使之后的函数能返回识别字符也依然如此.文档中描述,该函数如果返回的是-1,则代表调用失败,其它值代表可供使用的字符数.也许是WinCE4.2下识别引擎不完善的缘故,该函数根本没有发挥文档所描述的作用.
  
  
10.调用HwxGetResults()获取结果.

INT32 HwxGetResults( 
    HRC hrc, 
    UINT cAlt, 
    UINT iFirst, 
    UINT cBoxRes,
    HWXRESULTS*rgBoxResults 
  );

初看起来,该函数形参似乎特别复杂,但实际上并非如此.
  
  根据文档,cAlt是期望的轮流返回的字符,iFirst是想要返回字符的索引,cBoxRes是返回的字符个数.但实际上,cAlt起主导作用,比如说cBoxRes设置为1,而cAlt设置为10,则返回的字符个数依然为10.所以我在平常使用中,一般是将iFirst设为0,cBoxRes设为1,而cAlt设为所需返回的字符个数.
  
  rgBoxResults指向储存字符的缓冲区.不过,返回结果比较有意思,除了第一个rgBoxResults以外的所有结构的indxBox成员都储存了返回字符.
  比如返回五个字符'与子于飞干',则rgBoxResults的数组列数值为:
  rgBoxResults[0].indxBox :      0
  rgBoxResults[0].rgChar[0] :  '与'
  rgBoxResults[1].indxBox :     '子'
  rgBoxResults[1].rgChar[0] :  '于'
  rgBoxResults[2].indxBox :     '飞'
  rgBoxResults[2].rgChar[0] :  '干'
  
11.调用 HwxDestroy()销毁引擎,本次识别过程结束.如果需要继续识别文字,从步骤2重新开始.

漫谈WinCE的手写识别技术相关推荐

  1. 漫谈WinCE的手写识别技术 一

    //======================================================================== //TITLE: //    漫谈WinCE的手写 ...

  2. 技术 | 苹果最新博文剑指汉字手写识别!专家回应:并没有技术含量

    参与 | 鸽子,Shawn 今日,苹果再次更新其博客,这次的内容主打手写识别,而且是对汉字的手写识别.是不是挺好奇的,先来看看这篇论文的简介: 对由30000字符构成的大型汉字字符库进行实时手写汉字识 ...

  3. python简单代码演示效果-10分钟教你用python 30行代码搞定简单手写识别!

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 手写笔记还是电子笔记好呢? 毕业季刚结束,眼瞅着2018级小萌新马上就要来了,老腊肉小编为了咱学弟学妹们的学习,绞尽脑汁准备编一套大学秘籍, ...

  4. 基于Visual Studio2012实现Windows8的metro界面笔迹手写识别文档

    手写识别,是指将在手写设备上书写时产生的有序轨迹信息化转化为汉字内码的过程,实际上是手写轨迹的坐标序列到汉字的内码的一个映射过程,是人机交互最自然.最方便的手段之一. 随着智能手机.掌上电脑等移动信息 ...

  5. 汉王引领双核手写识别新纪元 开启3G人脸开机时代

    近日,汉王科技在北京宣布,专门用于手写识别领域的"双核心"技术.短句行识别技术和应用于手机的"人脸开机"技术将正式推向市场. 据介绍,此三项技术基于汉王科技企业 ...

  6. 【毕业设计】基于M5Stack UnitV2的手写识别计算器的设计与制作

    目录 一.简介 二.设计原理 三.系统设计 四.注意点 五.困难 一.简介 耗时五个月,终于完成了毕业设计和毕业答辩,在这里记录一下学习与实现过程. 题目是导师给的,这是主要任务和工作内容:利用M5S ...

  7. 基于stm32f429的手写识别_关注智能手机老年用户:百度输入法手写模型迎来重磅升级...

    智能手机的快速普及让很多人都已经习惯于任何事情都用手机办理,不仅外出买东西.乘坐公共交通可以使用智能手机支付,同时一些与工作.政务相关的事情也可以在智能手机端完成,而社交工具更是让人们几乎已经不再使用 ...

  8. Tensorflow快餐教程(1) - 30行代码搞定手写识别

    摘要: Tensorflow入门教程1 去年买了几本讲tensorflow的书,结果今年看的时候发现有些样例代码所用的API已经过时了.看来自己维护一个保持更新的Tensorflow的教程还是有意义的 ...

  9. python与机械教育初探_Python公开课-机械学习之手写识别

    授课讲师 讲师尹强 职务高级讲师.项目经理 多年互联网开发经验与授课经验,曾参与某知名家具电商网站.车友商城.物流系统的开发设计,善于使用多种技术解决技术问题和优化网站的性能和提高网站速度,开发经验丰 ...

最新文章

  1. codereview介绍
  2. 用.NetCore 编译国产老牌PHP论坛DiscuzX ,世界上最好的语言从此属于.Net 的一员
  3. 海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解
  4. 如何将Springboot项目成功部署到linux服务器上?
  5. java多张图片合成一张_一款国外有趣、简单、功能齐全的图片处理软件。
  6. 震惊!雷军表示要出千元5G手机!
  7. LiveRTMP之MP4文件进行rtmp点播直播推送(三)
  8. 【气动学】基于matlab内弹道【含Matlab源码 057期】
  9. 什么分区工具可以调整分区大小无损数据?
  10. 海量数据搜索---demo展示百度、谷歌搜索引擎的实现
  11. 虚拟偶像养成记:人工智能人格化与IP化打造出完美“爱豆”
  12. IndentationError: expected an indented block缩进没问题但是出错
  13. html邮件模板美化,设计利器:定制你的炫酷邮件模板
  14. HDU1071微积分公式求曲线面积
  15. Windows API大全
  16. FineBI 的关联视图及多表关联 自助数据集
  17. 一个关于IT界牛人的故事,估计是杜撰的。
  18. 18V降压3.3V的降压IC和LDO芯片方案,15V降压3.3V的降压IC和LDO芯片方案
  19. 软件和资源收集(四):图库、作图、音乐、视频
  20. 人脸识别无人机燃爆《战狼2》 它真的存在吗?

热门文章

  1. 用户体验之忘记密码之后
  2. 恢复EdrawProject软件未保存的项目文件步骤
  3. TCP两次挥手,你见过吗?那四次握手呢?
  4. Python爬取国家统计局行政区划信息
  5. 飞机上可以连WIFI了,它背后的黑科技是什么?
  6. 第 23 章 H3C ICG(Information Communication Gateway)
  7. 浅析PMO的发展规划
  8. 【STM32 Net MF开发板学习-27】GPRS通信实现
  9. Linux C语言中的IO--标准IO
  10. php多个构造方法,PHP高级对象构建多个构造函数的使用方法