爆款云主机2核4G限时秒杀,88元/年起!
查看详情

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心

      【Win 10 应用开发】手写识别

      首页 知识中心 软件开发 文章详情页

      【Win 10 应用开发】手写识别

      2024-06-26 06:16:28 阅读次数:39

      UWP

      记得前面(忘了是哪天写的,反正是前些天,请用力点击这里观看)老周讲了一个14393新增的控件,可以很轻松地结合InkCanvas来完成涂鸦。其实,InkCanvas除了涂鸦外,另一个大用途是墨迹识别,就是手写识别。

      识别功能早在Win 8 App的API中就有了,到了UWP,同样使用,这叫传承,一路学过来,都是一个体系的,我不明白为什么某些人一遇到升级就说SDK变化太大,适应不了。我是不明白了,有什么适应不了的,该不会是你笨吧,或者学习方法不对。反正老周在以前的博客中都说过了,学习要学活,不要把知识学死了,把东西往死里学,就是古人所说的书呆子。

      好了,不谈论书呆子的事了,因为“书呆子”在民间有太多的误解,咱们还是说正题。

      处理数字墨迹有两种方式:

      1、一种是脱离InkCanvas控件的方法,处理过程是面向笔触(Stroke)的,这就需要你手动去管理好你的墨迹数据了;

      2、要是上一种方法太麻烦,与InkCanvas关联的做法较好,这样不用自己去搞UI部分的内容。

      本着易用、久用、耐用、实用、妙用等伟大原则,我们实现手写识别还是不要脱离InkCanvas控件,这样的话实现起来会轻松很多,除非你要搞很高级的应用场景。

      不讲过多的理论,免得大家看的头晕,老周简单说一个原理,大家懂了原理后,直接干活,这是学编程的万能招数。

      先看看大致的步骤:

      1、大家知道,InkCanvas有个关联的InkPresenter属性,引用的是InkPresenter实例,这个你得知道,不然后面的步骤就无法玩了。

      2、InkPresenter类有个StrokeContainer属性,类型为InkStrokeContainer,它表示墨迹笔触的集合,被收集到的输入数据就存放到这个集合中。一个笔触通常是指你用笔/手指/鼠标按下时开始,直到你释放笔/手指/鼠标这一阶段中,所绘制出来的一段墨迹(从下笔到提笔)。一花一世界,一落一起一笔触。

      3、实例化InkRecognizerContainer类,调用RecognizeAsync方法执行识别,上面为啥要提到InkStrokeContainer呢?因为执行识别需要它,你想啊,没有用户输入的墨迹(笔触)数据,一片空白,你识别个球。

      4、识别后返回一个InkRecognitionResult列表,对于中文,通常只有一个InkRecognitionResult对象,但对于英文单词,可能会多个,一个InkRecognitionResult表示一个单词。对于一个InkRecognitionResult来说,访问GetTextCandidates方法返回一个字符串列表,即候选项,匹配度高的字符串排在前面。

      5、也可以访问InkRecognizerContainer.GetRecognizers方法获取当前系统中已安装的语言识别引擎,中文系统至少会有一个简体中文的识别引擎。你可以到系统设置里面安装其他语言的引擎。

      OK,基本思路有了,下面就可以做事情了。

      首先,布置一下UI,XAML代码如下:

              <Grid Margin="15">
                  <Grid.RowDefinitions>
                      <RowDefinition Height="auto"/>
                      <RowDefinition Height="300"/>
                      <RowDefinition Height="*"/>
                  </Grid.RowDefinitions>
                  <ComboBox Name="cmbRecons" Header="选一个:" DisplayMemberPath="Name"/>
                  <Border Background="LightGray" Grid.Row="1" Margin="2,6">
                      <InkCanvas Name="inkcv" />
                  </Border>
                  <TextBlock Grid.Row="2" Name="tbresult" TextWrapping="Wrap" Foreground="Red" FontSize="24"/>
              </Grid>

      ComboBox控件用来显示当前系统中安装的手写识别引擎,TextBlock用来显示识别结果。

      现在,切换到代码视图,首先在页面类级别声明一个InkRecognizerContainer变量,并且实例化。

              InkRecognizerContainer inkRecognContainer = new InkRecognizerContainer();

      另外,还需要一个Timer,作用是在墨迹收集2秒钟后进行识别。

              DispatcherTimer timer = new DispatcherTimer();
      
             ……
      
                  // 准备计时器
                  // 延迟2秒,应该不算慢吧
                  timer.Interval = TimeSpan.FromSeconds(2d);
                  timer.Tick += onTimerTick;
                  // 处理ink操作事件
                  inkcv.InkPresenter.StrokeInput.StrokeStarted += (k1, k2) =>
                  {
                      // 人家正要下笔呢,没有在此时识别的道理
                      timer.Stop();
                  };
                  inkcv.InkPresenter.StrokesCollected += (t1, t2) =>
                  {
                      // 墨迹已收集,可以进行识别
                      timer.Start();
                  };

      当下笔开始书写时,会发生StrokeStarted事件,在此时,应该停止计时,你总不能人家一边写你就一边识别,没什么意思。但InkCanvas收集到输入笔触后,会发生StrokesCollected事件,这时候就可以开始计时了,2秒钟后进行识别。说白了就是在用户停止手写2秒钟后识别。

      在ComboBox控件中显示系统已安装的识别引擎:

                  // 获取已安装的识别引擎列表
                  var inkrecogs = inkRecognContainer.GetRecognizers();
                  // 将这些列表显示到ComboBox控件中
                  cmbRecons.ItemsSource = inkrecogs;
                  // 处理选项更改事件
                  cmbRecons.SelectionChanged += (s1, s2) =>
                  {
                      // 将选中的识别引擎设为默认
                      InkRecognizer currec = (InkRecognizer)cmbRecons.SelectedItem;
                      inkRecognContainer.SetDefaultRecognizer(currec);
                  };
                  if (cmbRecons.Items.Count > 0)
                      cmbRecons.SelectedIndex = 0;

       当ComboBox控件做出选择后,引发SelectionChanged事件,在事件处理代码中可以调用SetDefaultRecognizer方法设置默认的识别引擎。

      还有一件事,不要忘了,让InkCanvas支持笔、手触、鼠标来书写。

                  // 全能书写
                  inkcv.InkPresenter.InputDeviceTypes = Windows.UI.Core.CoreInputDeviceTypes.Mouse | Windows.UI.Core.CoreInputDeviceTypes.Touch | Windows.UI.Core.CoreInputDeviceTypes.Pen;

      下面是核心代码,就是上面那个Timer的Tick事件处理,在处理代码中,执行手写识别,并显示识别的结果。

                  // 如果InkStrokeContainer中没有收集笔触,那就没有识别的必要了
                  // 所以Count应大于0
                  if (inkcv.InkPresenter.StrokeContainer.GetStrokes().Count > 0)
                  {
                      IReadOnlyList<InkRecognitionResult> results = await inkRecognContainer.RecognizeAsync(inkcv.InkPresenter.StrokeContainer, InkRecognitionTarget.All);
                      // 处理结果
                      if (results.Count > 0)
                      {
                          StringBuilder strbd = new StringBuilder();
                          strbd.AppendLine("结果:");
                          // 每个InkRecognitionResult实例表示一个汉字/单词的识别结果
                          // 而单个结果中又包含候选列表,最接近的识别结果优先级更高
                          for(int x = 0; x < results.Count; x++)
                          {
                              string s = string.Join(",", results[x].GetTextCandidates().ToArray());
                              strbd.AppendLine(s);
                          }
                          // 显示结果
                          tbresult.Text = strbd.ToString();
                          // 清理墨迹
                          inkcv.InkPresenter.StrokeContainer.Clear();
                      }
                  }

      不是很复杂,代码你应该看得懂的,不然,学.NET这么多年,太对不起自己了。注意的是,识别后返回多个结果,对于中文,通常只返回一个,因为多个汉字是可以一起识别,并放到字符候选列表中。

      在代码的最后面有这么一句:

       inkcv.InkPresenter.StrokeContainer.Clear();

      这句代码的作用是清除所收集的所有墨迹,清除后,InkCanvas会变回空白。

      运行一下程序,然后手写一些字,看看识别效果。

      【Win 10 应用开发】手写识别

      【Win 10 应用开发】手写识别

      版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://www.cnblogs.com/tcjiaan/p/5809895.html,作者:东邪独孤,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

      上一篇:C语言简易程序设计————13、素数问题

      下一篇:【Win 10 应用开发】UI Composition 札记(二):基本构件

      相关文章

      2024-06-26 06:19:51

      【Win 10 应用开发】在代码中加载文本资源

      在 XAML 中使用 uid 加载资源虽然方便,但是它有个缺点——不同控件有不同的属性,有时候不太方便匹配,当然了,如果你的资源所针对的控件类型不多,那是无所谓的。

      2024-06-26 06:19:51
      Resource , UWP
      2024-06-26 06:19:40

      【Win 10 应用开发】TCP通信过程

      TCP是基于连接的,所以,肯定有一方是监听者,通常称服务端或服务器,它负责接受连接请求,但不负责通信;接受连接后得到一个专用于通信的套接字。

      2024-06-26 06:19:40
      UWP , win10
      2024-06-26 06:19:40

      【Windows 10 应用开发】跟随系统主题颜色

      有些时候,希望应用程序中的某些颜色可以与系统的主题颜色相同,并且当系统主题色改变时进行同步。

      2024-06-26 06:19:40
      UWP , Windows10
      2024-06-26 06:18:07

      【Win 10 应用开发】共享目标(UWP)

      【Win 10 应用开发】共享目标(UWP)

      2024-06-26 06:18:07
      UWP , win10
      2024-06-26 06:17:16

      【Win 10 应用开发】加载外部的 srt 字幕

      据说系统内置的多媒体功能支持 srt、 ssa 等字幕,老周测试过几种格式的字幕均能加载。SRT 字幕是最简单的字幕结构,甚至你用记事本都能做出来,就是分为几行来写。

      2024-06-26 06:17:16
      UWP , win10
      2024-06-26 06:17:16

      【Win 10 应用开发】UI Composition 札记(二):基本构件

      UI Composition 有一个核心类——对,就是 Compositor 类,它是总生产车间,组成 UI 的各种元素都可以由它来创建,所以,你会看到,它公开了 K 个以 Create 开头的方法。我们在组建 UI 时所用到的各种元素都可以调用这些以 Create 打头的方法来创建。

      2024-06-26 06:17:16
      UI , UWP , Win10
      2024-06-18 07:20:39

      说说 C# 9 新特性的实际运用

      说说 C# 9 新特性的实际运用

      2024-06-18 07:20:39
      Resource , UWP
      2024-06-17 10:03:58

      【Windows 10 应用开发】使用x:Bind标记动态获得计算结果

      UWP 在传统(WPF)的Binding标记上引入了 Bind 标记,Bind 基于编译阶段生成,因而具有较高的性能。但是,你得注意,这个性能上的优化是免去了运行阶段动态绑定的开销,这是不包括数据源的体积的。

      2024-06-17 10:03:58
      UWP
      2024-05-28 09:01:53

      【Windows 10 应用开发】自定义快捷键

      上一篇文中,通过史无前例的代码向各位 demo 了访问键的用法(即 Alt + 某某)。不过,大伙伴们一定会发现,访问键毕竟限制较大,不太灵活,也不好发挥,于是就需要自定义快捷键了。

      2024-05-28 09:01:53
      UWP
      2024-05-20 08:43:45

      【Win 10 应用开发】应用预启动

      所谓预启动,其实你一看那名字就知道是啥意思了,这是直接译,也找不到比这个叫法更简练的词了。

      2024-05-20 08:43:45
      UWP
      查看更多
      推荐标签

      作者介绍

      天翼云小翼
      天翼云用户

      文章

      33561

      阅读量

      5233488

      查看更多

      最新文章

      【Win 10 应用开发】在代码中加载文本资源

      2024-06-26 06:19:51

      【Win 10 应用开发】TCP通信过程

      2024-06-26 06:19:40

      【Windows 10 应用开发】跟随系统主题颜色

      2024-06-26 06:19:40

      【Win 10 应用开发】共享目标(UWP)

      2024-06-26 06:18:07

      【Win 10 应用开发】加载外部的 srt 字幕

      2024-06-26 06:17:16

      【Win 10 应用开发】UI Composition 札记(二):基本构件

      2024-06-26 06:17:16

      查看更多

      热门文章

      【Win 10 应用开发】应用预启动

      2024-05-20 08:43:45

      【Windows 10 应用开发】跟随系统主题颜色

      2024-06-26 06:19:40

      【Windows 10 应用开发】自定义快捷键

      2024-05-28 09:01:53

      【Win 10 应用开发】在代码中加载文本资源

      2024-06-26 06:19:51

      【Win 10 应用开发】UI Composition 札记(二):基本构件

      2024-06-26 06:17:16

      【Win 10 应用开发】共享目标(UWP)

      2024-06-26 06:18:07

      查看更多

      热门标签

      java Java python 编程开发 代码 开发语言 算法 线程 Python html 数组 C++ 元素 javascript c++
      查看更多

      相关产品

      弹性云主机

      随时自助获取、弹性伸缩的云服务器资源

      天翼云电脑(公众版)

      便捷、安全、高效的云电脑服务

      对象存储

      高品质、低成本的云上存储服务

      云硬盘

      为云上计算资源提供持久性块存储

      查看更多

      随机文章

      【Windows 10 应用开发】跟随系统主题颜色

      说说 C# 9 新特性的实际运用

      【Win 10 应用开发】应用预启动

      【Win 10 应用开发】UI Composition 札记(二):基本构件

      【Windows 10 应用开发】自定义快捷键

      【Win 10 应用开发】共享目标(UWP)

      • 7*24小时售后
      • 无忧退款
      • 免费备案
      • 专家服务
      售前咨询热线
      400-810-9889转1
      关注天翼云
      • 旗舰店
      • 天翼云APP
      • 天翼云微信公众号
      服务与支持
      • 备案中心
      • 售前咨询
      • 智能客服
      • 自助服务
      • 工单管理
      • 客户公告
      • 涉诈举报
      账户管理
      • 管理中心
      • 订单管理
      • 余额管理
      • 发票管理
      • 充值汇款
      • 续费管理
      快速入口
      • 天翼云旗舰店
      • 文档中心
      • 最新活动
      • 免费试用
      • 信任中心
      • 天翼云学堂
      云网生态
      • 甄选商城
      • 渠道合作
      • 云市场合作
      了解天翼云
      • 关于天翼云
      • 天翼云APP
      • 服务案例
      • 新闻资讯
      • 联系我们
      热门产品
      • 云电脑
      • 弹性云主机
      • 云电脑政企版
      • 天翼云手机
      • 云数据库
      • 对象存储
      • 云硬盘
      • Web应用防火墙
      • 服务器安全卫士
      • CDN加速
      热门推荐
      • 云服务备份
      • 边缘安全加速平台
      • 全站加速
      • 安全加速
      • 云服务器
      • 云主机
      • 智能边缘云
      • 应用编排服务
      • 微服务引擎
      • 共享流量包
      更多推荐
      • web应用防火墙
      • 密钥管理
      • 等保咨询
      • 安全专区
      • 应用运维管理
      • 云日志服务
      • 文档数据库服务
      • 云搜索服务
      • 数据湖探索
      • 数据仓库服务
      友情链接
      • 中国电信集团
      • 189邮箱
      • 天翼企业云盘
      • 天翼云盘
      ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
      公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
      • 用户协议
      • 隐私政策
      • 个人信息保护
      • 法律声明
      备案 京公网安备11010802043424号 京ICP备 2021034386号