(转载)UWP OCR 识别

该篇文章转载自:博客园

OCR,即Optical Character Recognition,光学字符识别。简单地说,就是识别印刷品上面的文字,大概用得比较多的情况是:用设备的摄像头拍一张照片,照片中有文字,然后通过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();
					}
				}
			}
posted @ 2021-06-26 22:11  摘叶飞镖  阅读(126)  评论(0编辑  收藏  举报