(转载)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();
}
}
}