OCR,即Optical Character Recognition,光学字符识别。以下介绍来自搜索:

OCR(Optical Character
Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程;即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent
Character
Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。

简单地说吧,就是识别印刷品上面的文字,大概用得比较多的情况是:用设备的摄像头拍一张照片,照片中有文字,然后通过OCR技术将照片中的字符识别出来,转化为字符。顺便说一下,如果想“干坏事”的话,也可以用OCR技术来识别一些简单的图片验证码,呵呵,不过,现在很多网站的验证码都比较“狡猾”,要准确识别出来不那么容易。

好了,接下来看看如何在UAP中使用OCR技术。

用于OCR识别的API主要在Windows.Media.Ocr命名空间下。用法如下:

1、调用IsLanguageSupported静态方法检查一下,是否支持某种语言文字的识别,如繁体中文、简体中文等(估计它识别不了甲骨文和篆书)。

2、调用OcrEngine.TryCreateFromLanguage方法从指定的语言创建OcrEngine实例;或者调用TryCreateFromUserProfileLanguages方法从用户配置的语言中创建。这些方法都是静态的,可直接访问。

3、调用OcrEngine实例的RecognizeAsync方法开始进行识别,识别完成后会异步返回OcrResult对象,其中对象中的Text属性就是被识别出来的文本。RecognizeAsync方法需要一个Windows.Graphics.Imaging.SoftwareBitmap实例作为参数,它通过BitmapDecoder类来获取,就是要进行识别的图片。

下面就用一个示例来演示一下。该例可以选择一张带文字的图片,然后识别出图中的文本。代码如下:

            FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
// 选择文件
StorageFile imgFile = await picker.PickSingleFileAsync(); if(imgFile != null)
{
using (IRandomAccessStream inStream = await imgFile.OpenReadAsync())
{
// 显示图片
BitmapImage bmp = new BitmapImage();
bmp.DecodePixelWidth = ;
bmp.SetSource(inStream.CloneStream());
this.img.Source = bmp;
// 解码图片
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(BitmapDecoder.JpegDecoderId, inStream);
// 获取图像
SoftwareBitmap swbmp = await decoder.GetSoftwareBitmapAsync();
// 准备识别
Windows.Globalization.Language lang = new Windows.Globalization.Language("zh-CN");
// 判断是否支持简体中文识别
if (OcrEngine.IsLanguageSupported(lang))
{
OcrEngine engine = OcrEngine.TryCreateFromLanguage(lang);
if (engine != null)
{
OcrResult result = await engine.RecognizeAsync(swbmp);
if (result != null)
{
tbResult.Text = result.Text;
}
}
}
else
{
Windows.UI.Popups.MessageDialog dialog = new Windows.UI.Popups.MessageDialog("不支持简体中文的识别。");
await dialog.ShowAsync();
}
}
}

目前是支持简体中文字符的识别,不过准确率还不能达到100%,97%的准确应该可以保证的。看看识别的结果:

从上面的结果来看,“儿”、“子”、“几”三字没有正确识别,准确率还过得去。

示例源码下载:http://files.cnblogs.com/files/tcjiaan/OcrApp.zip

好,本次就扯到这里,改天有空再吹。

【Win10 应用开发】OCR识别的更多相关文章

  1. 微信公众号开发调用摄像头、拍摄或选择图片、OCR识别

     一 .准备工作       <1> 域名认证准备工作 在需要调用摄像头的接口页面引入微信的js,具体地址为:(支持https):http://res.wx.qq.com/open/js/ ...

  2. Win10/UWP开发—使用Cortana语音与App后台Service交互

    上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比 ...

  3. OCR识别-python版(一)

    需求:识别图片中的文字信息环境:windows系统 开发语言:python 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.pyocr 网络通直接使用命令:pip ...

  4. 汽车Vin码识别——可以嵌入到手机里的新OCR识别技术

              汽车Vin码识别(车架号识别),顾名思义,就是识别汽车的Vin码(车架号),汽车Vin码识别(车架号识别)利用的是OCR识别技术,支持视频流获取图像,自动触发识别,另外汽车Vin码 ...

  5. 汽车Vin码识别—— 一款二手车行业值得拥有的OCR识别软件

    一.汽车Vin码识别产品描述 汽车Vin码识别系统,主要应用在智能手机IOS与Android两个平台中.前端扫描查询模式,无需联网,只需扫描汽车前挡风玻璃右下角的Vin码(车架号),即可轻松识别出车辆 ...

  6. AI时代的OCR识别技术浅析

    人工智能这个词可谓是耳熟能详,近几年人工智能热潮再次席卷而来,引起轰动的要数google的AlphaGo,相继打败了围棋界的韩国选手李世石以及世界冠军柯洁,见证了人工智能发展的里程碑式的变革,人工智能 ...

  7. Python&selenium&tesseract自动化测试随机码、验证码(Captcha)的OCR识别解决方案参考

    在自动化测试或者安全渗透测试中,Captcha验证码的问题经常困扰我们,还好现在OCR和AI逐渐发展起来,在这块解决上越来越支撑到位. 我推荐的几种方式,一种是对于简单的验证码,用开源的一些OCR图片 ...

  8. OCR识别-python3.5版

    刚接触,啥子都不会,按着教程走 需求:识别图片中的文字信息环境:windows系统 开发语言:python3.5 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.p ...

  9. 行驶证识别/行驶证OCR识别全方位解析

    本文全面解析行驶证OCR识别,包括什么是行驶证OCR识别.如何选择行驶证识别软件.如何操作行驶证识别软件,以及该软件应用的领域等. 一.了解行驶证识别/行驶证OCR识别 行驶证OCR识别技术,也叫行驶 ...

  10. 【转】Python OCR识别图片验证码

    转载自:博客 对于某些网站登录的时候,往往需要输入验证码才能实现登录.如果要爬虫这类网站,往往总会比这个验证码导致无法爬取数据.以下介绍一种比较折中的方法,也是比较可行的方法: 实现思想: 1.通过截 ...

随机推荐

  1. scikit-learn包的学习资料

    http://scikit-learn.org/stable/modules/clustering.html#k-means http://my.oschina.net/u/175377/blog/8 ...

  2. Code First 关系配置整理

    之前EF一直有性能问题以及使用便利性问题, 终于到了EF6有了Migrations之后, 小弟也决定加入EF阵营了. 在学习FluentAPI配置关系的时候, 发现网上的好几个教程实际上博主自己都没有 ...

  3. window下xampp配置多端口、多站点步骤

    好些日子没整理知识了,许多新东西不整理出来时间一长就淡忘了.看来以后得继续坚持整理. 配置XAMPP多端口.多站点如下步骤: 多端口: (一个域名下同时配置多个端口,从而达到访问不同程序) 效果例如: ...

  4. 闭包和重写函数 返回IE浏览器版本号

    开发过程中我们有时候需要知道IE的版本号,我们知道得到IE的版本号的方法: var v = 3, div = document.createElement('div'), all = div.getE ...

  5. 关于scale和zoom的区别

    其实关于scale,我之前是用他来搞一些css3的特效的放大缩小啊,玩的也挺6666,而*zoom:1之前是用来做css的hack,也就是触发IE6/7的haslayout清除浮动的.终于某天,好事的 ...

  6. C++:一般情况下,设计函数的形参只需要两种形式

    C++:一般情况下,设计函数的形参只需要两种形式.一,是引用形参,例如 void function (int &p_para):二,是常量引用形参,例如 void function(const ...

  7. jquery简单插件写法

    (function($){ /** * 遮罩插件 * 使用:$('#id').qloading(options); * 详见:/plugins/_11_qloading/qloading.html * ...

  8. eclipse 项目显示红叉

    ***修改eclipse 代码提示级别1.单个项目修改项目上右键-->properties-->java compiler-->building-->enable projec ...

  9. c#/js代码命名规范及代码规范

    常用命名 列表,lUser 数组,arrUser 字符串,strTitle 用,分割的字符串,strStatuss(多个用逗号分割的状态) C# Entity层 统一以E开始,比如EUser,EOrd ...

  10. 关于nginx.pid丢失的解决办法

    在停掉nginx的过程中突然出现如下的提示: