【Win10 應用開發】OCR識別

來源:互聯網
上載者:User

標籤:

原文:【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

 好,本次就扯到這裡,改天有空再吹。

【Win10 應用開發】OCR識別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.