【Win10 应用开发】OCR识别

原文:【Win10 应用开发】OCR识别

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 = 700;
                    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

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

时间: 2024-12-21 09:27:12

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

【Win10 应用开发】人脸识别

原文:[Win10 应用开发]人脸识别 可能你会认为人脸识别用起来会很复杂,老周当初也这么想,但通过实际操作后,我发现非然. 经过微软封装的东西,向来都是复杂问题简单化,只要用得舒心,代码越少越好,用最少的代码做最多的事情,此为大师境界也. 好,屁话不说,先介绍一下如何完成人脸识别(或者叫人脸检测,随你怎么翻译,反正知道是怎么一回事就行).核心的类是FaceDetector,不要问我这个类在哪里,自己打开对象浏览器搜索. 第一步,访问静态属性IsSupported,看看当前平台是不是支持人脸识别

Win10 UWP开发:摄像头扫描二维码/一维码功能

原文:Win10 UWP开发:摄像头扫描二维码/一维码功能 这个示例演示整合了Aran和微软的示例,无需修改即可运行. 支持识别,二维码/一维码,需要在包清单管理器勾选摄像头权限. 首先右键项目引用,打开Nuget包管理器搜索安装:ZXing.Net.Mobile BarcodePage.xmal页面代码 <Page x:Class="SuperTools.Views.BarcodePage" xmlns="http://schemas.microsoft.com/wi

【Win10应用开发】自适应磁贴中的分组

原文:[Win10应用开发]自适应磁贴中的分组 老周在上一篇文章中介绍过了自适应磁贴的基本结构,以及给大家演示了一些例子. 本文老周给大伙伴们说说自适应磁贴的另一个特点--分组呈现. 当磁贴的内容被分组后,每个组中的内容就会被视为一个整体.比如某磁贴在更新时定义了其内容包含有两个组,有些设备(比如手机.上世纪70年代的电脑.小霸王学习机等)的分辨率较低,磁贴不能显示两个组的信息,于是就会把第一组的内容整个显示出来,第二组信息就被忽略.就算空间不够,连第一组的内容都显示不全,然而一个组会被视为一个

求解调用微软MODI进行OCR识别抛出“OCR running error”问题,求指教!

问题描述 我现在可以进行OCR识别,但有一个问题:当我选择的识别区域较小(或者说文字较少)时,抛出错误信息"OCRrunningerror",不知道是什么原因,有人说是电脑因素(我的开发环境:VS2008+Office2007+sp2补丁),有的说截取图像要作处理,不知道原因为何..我想要的效果是:即便选择一个汉字或数字也可以进行识别!我的识别关键代码://创建一个临时文件stringstrFileName=string.Format("{0:yyyy_MM_dd_HH_mm

【Win10 应用开发】集成语音命令

原文:[Win10 应用开发]集成语音命令 记得老周以前在写WP8应用开发的文章时,曾经写过语音命令集成的文章,后来8.1的时候"小娜"问世,但考虑到其变化不大,故老周没有补写相应的文章. 今天,老周打算补一下Win 10通用应用开发中,有关语音命令集成相关的内容.虽然还是一脉相承,大的变化没有,不过Win10 sdk在语音命令定义文件中添加了新内容,而且现在不仅能在手机应用中加入语音集成,在面向PC和板子的应用中也能如愿,因为应用程序已经通用. 同理,在开始之前,老周仍然先给大家讲个

C# 开发OCR office2013中的dll

问题描述 C#开发OCR软件,需要引用office中的dll,我机器装的是office2013,找不到相关的dll. 解决方案 解决方案二:怎么会没有呢?解决方案三:您选择的是excel的,OCR的是这个吗解决方案四:引用2楼zhangzhifeng8888的回复: 您选择的是excel的,OCR的是这个吗 OCR的话,要看你装office的时候有没有选择了:(我是猜的)解决方案五:这个我装了,但是不知道引用那个DLL解决方案六:同问,怎么通过C#调用在officeonenote2013上,选中

tesseract ocr 识别身份证号

问题描述 tesseract ocr 识别身份证号 怎么用tesseract ocr识别身份证号呀,识别身份证号的字库需要自己训练吗? 求大神指点给个思路啊!!! 解决方案 tesseract-ocr识别字符 解决方案二: 身份证比较标准,不需要怎么训练就可以用.先对图像二值化,去掉底纹.

OCR识别错误怎么办?

  很多网友都喜欢利用一些OCR软件识别软件将纸质材料扫描称电子文档,不过,使用OCR软件识别使用的时候,有时候会出现一些文字识别错误,比如说,把"引"字识别成"弓1"或"弓i"."弓l".那么,遇到OCR软件识别软件识别错误的时候,该怎么处理呢?下面,小编就给大家分享一下使用金山wps查找跟替换功能来解决这一问题的方法! 查找与替换 哈哈,找到本"砖家"就算找对人了.本"砖家"不客气地

用OCR识别程序将图片转为Word

有时候我们手里会有一些通过扫描仪.数码相机或高清摄像头得到的文字资料图片,这时候,我们可以借助Office自带的OCR识别程序将这些图片转成Word文档,这可比单单看图片方便多了. 1.将文档存为TIFF格式图片 先使用扫描仪或数码相机等设备将文档扫描或是拍摄成图片,如果是用扫描仪扫描的话,直接保存成TIFF格式,如果是拍摄的图片,可以通过系统自带的画图软件将其打开并另存为"TIFF格式". 2.打开Office的OCR识别功能 现在能识别图片文字的软件很多,如果手边没有,不妨试试Of