利用 Microsoft Cognitive Services 進行 OCR 辨識

最近筆者接到一個需要對健保卡進行 OCR 的需求,當時想到的是 Google 之前所提供的 tesseractOcr 等一些 C# 的 Open Sources Library,當時一共找了 tesseract、tessnet2、nocr、tesseract-master 等

前言

最近筆者接到一個需要對健保卡進行 OCR 的需求,當時想到的是 Google 之前所提供的 tesseractOcr 等一些 C# 的 Open Sources Library,當時一共找了 tesseract、tessnet2、nocr、tesseract-master 等,實際進行  OCR 時才發現要將圖片處裡為 Monochrome 才能大大提升辨識率,於是又找了 C# 進行 Monochrome 的 Lib,一開始找到的是 AForge.NET Framework,但似乎有些 Bug ,在處理 JPEG/PNG 圖像時會出現 Notsupport 的情形,於是又找了另一個 Stackoverflow 上的 C# 範例,總算解決了Notsupport 這個問題,但中文的辨識率仍然非常不理想。

後來在董大偉老師的提醒下才發現其實 Microsoft Cognitive Services 提供的服務中,就有一項是 OCR 的服務,於是立馬來實驗一下 (重點還是在於辨識率是否能提高?提高多少?)

Microsoft Cognitive Services

它的前身其實是微軟在 Build 2016 大會上所揭露的一系列 API,當時最串紅就是 How-Old.NET 這個網站

現在的 Microsoft Cognitive Services 則提供更多人工智慧相關的服務,由於服務相當多,而且它已經幫您分類好,像是 Vision (人臉辨識/圖像分析/OCR/情感)、Speech(語意分析)、Language(語音辨識)、Knownledge (知識探勘/資料分析)等等,可到如下網址申請該服務:

https://www.microsoft.com/cognitive-services

Cognitive Services APIs 目前仍然是 Preview,您可以點選如上圖的 「Get started for free」申請試用。

接著,會秀出如下畫面,如果您已經有 Live Account 請點選 My account

如果是企業大量使用的需求,可以申請 Azure 付費版如下圖。

點選了 My account 之後會帶入一個畫面,因為試用所以您也只能點選 Yes 了..

點選「是」之後,會再帶到一個歡迎畫面,從這個畫面中我們可以知道目前有 15 個 Keys 可以使用,也就是有 15 項產品可以使用。

我們要使用的 OCR 服務是屬於 Computer Vision,為了撰寫程式,所以我們必須複製出 Key,因為撰寫程式時,SDK在呼叫服務時會需要這個 Key 的資訊。

開始撰寫程式

一、首先,我們建立一個 WPF 專案

將畫面規劃為如下:

二、加入 NuGet 套件

Computer Vision APIs 目前也可以從 NuGet Server 上面下載安裝,與 Build 2016 當時的命名空間相同,仍然是在 Microsoft.ProjectOxford.Vision 這一顆元件中

三、開始撰寫程式

使用 Computer Vision APIs 來進行 OCR 可說真的是非常的容易,只要建立 VisionServiceClient 的實體,呼叫 RecognitiveTextAsync 方法即可回傳結果。

我們直接來看程式碼:

// 建立 Microsoft Vision Service Client
var visionClient = new Microsoft.ProjectOxford.Vision.VisionServiceClient(VisionApiKey);
 
FileStream fs = new FileStream(filePath, FileMode.Open);
 
try
{
    OcrResults = await visionClient.RecognizeTextAsync(fs, LanguageCodes.ChineseTraditional);

    //抓取每一區塊的辨識結果
    foreach (var Region in OcrResults.Regions)
    {
        foreach (var line in Region.Lines)
        {
            foreach (var Word in line.Words)
            {
                txtOCRResult.Text += Word.Text;
            }
            txtOCRResult.Text += "\n";
        }
    }
}
finally
{
    fs.Close();
}

執行結果如下:

結語:

在微軟的 Build 2016 大會揭露許多 Computer Vision APIs 與 Open Source 的 .NET Core、微軟擁抱 Docker 之後,未來的軟體慢慢都為以服務方式呈現,包括企業內部的軟體、ERP、CRM、也就是說,可能不再有套裝軟體了,這也改變當開發人員的開發方式,Devices 端的作業系統可能不再重要,你也可能不是開發獨立產品,或軟體,你可能是取用各種服務 APIs ,組合成企業內部系統,且這些 APIs 可能都來自不同的國家。

所以您準備好迎接這爆炸服務時代了嗎?我們待續....

 

 


 

簽名:

學習是一趟奇妙的旅程

這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。

軟體開發之路(FB 社團)https://www.facebook.com/groups/361804473860062/

Gelis 程式設計訓練營(粉絲團)https://www.facebook.com/gelis.dev.learning/


 

如果文章對您有用,幫我點一下讚,或是點一下『我要推薦,這會讓我更有動力的為各位讀者撰寫下一篇文章。

非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^