1. 程式人生 > 實用技巧 >Azure認知服務之表格識別器

Azure認知服務之表格識別器

認知服務

Azure 認知服務的目標是幫助開發人員建立可以看、聽、說、理解甚至開始推理的應用程式。 Azure 認知服務中的服務目錄可分為五大主要支柱類別:視覺、語音、語言、Web 搜尋和決策。開發人員使用 Azure 認知服務能夠輕鬆地將認知功能新增到其應用程式中。
Azure認知服務主要包含:人臉、表單識別、墨跡識別等內容。上次已經介紹過人臉識別服務了,這次介紹下表單識別器如何使用。

表單識別器

Azure 表單識別器是一個認知服務,該服務使用機器學習技術從表單文件中識別和提取文字、鍵值對和表資料。 它會引入表單中的文字並輸出包含原始檔案中的關係的結構化資料。 可以快速獲取根據特定內容定製的準確結果,無需進行繁瑣的手動干預,也不需要具備豐富的資料科學專業知識。 表單識別器由自定義模型、預生成的收據模型和佈局 API 組成。 可以使用 REST API 呼叫表單識別器模型,以降低複雜性,並將該模型整合到工作流或應用程式中。

引用自微軟Azure文件

新建表單識別器資源

新建一個表單識別器的資源。表單識別器也是一項免費服務,免費定價策略為:500頁/月,識別頻率在20次/分鐘,訓練頻率1次/分鐘。區域選離你最近的,然後取個名字。

檢視祕鑰跟終結點


建立完成後,點選側邊選單金鑰跟終結點,檢視金鑰跟終結點資訊,等下呼叫SDK的時候需要使用。

新建一個WPF程式

我們還是新建一個WPF程式來演示如果使用表單識別的SDK。新建一個WPF程式,然後放置一個按鈕,點選按鈕選擇一個檔案,對這個檔案進行識別並把識別的結果顯示在文字框內。

安裝SDK

使用nuget進行安裝:

Install-Package Azure.AI.FormRecognizer -Version 1.0.0-preview.4

修改MainWindow.xaml

<Window x:Class="FormRecognizer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:FormRecognizer"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <TextBox x:Name="tbxContent" HorizontalAlignment="Left" Height="344" Margin="10,10,0,0" TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="772"/>
        <Button Content="選擇檔案" HorizontalAlignment="Left" Margin="10,373,0,0" VerticalAlignment="Top" Width="75" Click="SelectFile_Click"/>

    </Grid>
</Window>

修改MainWindow.xaml,在介面上放置一個按鈕來選擇檔案,放置一個文字框顯示內容。介面如下:

選擇識別檔案

   private async void SelectFile_Click(object sender, RoutedEventArgs e)
        {
            var openFileDialog = new OpenFileDialog();
            openFileDialog.ShowDialog();
            var file = openFileDialog.FileName;
            this.tbxContent.Text = "正在識別";
            var result = await StartRecognize(file);

            foreach (var page in result.Value)
            {
                this.tbxContent.Text += $"第{page.PageNumber}頁" + "\r\n";
                for (int tableIndex = 0; tableIndex < page.Tables.Count; tableIndex++)
                {
                    this.tbxContent.Text += $"表{tableIndex + 1}" + "\r\n";
                    var table = page.Tables[tableIndex];
                    foreach (var cell in table.Cells)
                    {
                        this.tbxContent.Text += $"行:{cell.RowIndex} 列:{cell.ColumnIndex} 內容:{cell.Text}" + "\r\n";
                    }
                }
            }

        }

選擇一個檔案,然後呼叫StartRecognize方法進行識別,對識別的結果進行顯示。識別的PDF檔案如下:

使用SDK進行識別

        private async Task<Response<FormPageCollection>> StartRecognize(string file)
        {
            string endpoint = "https://xxxx.cognitiveservices.azure.com/";
            string apiKey = "xxxx";
            var credential = new AzureKeyCredential(apiKey);
            var recognizerClient = new FormRecognizerClient(new Uri(endpoint), credential);

            Response<FormPageCollection> formPages = await recognizerClient
            .StartRecognizeContentAsync(File.OpenRead(file))
            .WaitForCompletionAsync();

            return formPages;
        }

直接呼叫StartRecognizeContentAsync進行識別,等待一會就會有結果。

執行一下

讓我們執行一下看看吧:

總結

使用Azure的認知服務進行表單識別可以輕鬆的對JPG,PNG,PDF等非結構化的資料進行資料採集,從而轉換成結構化資料進行儲存以及分析。表單識別器支援無需訓練的識別,如果複雜表單還可以進行自定義模型的訓練,從而提高識別精度。但是目前好像還不支援中文,後續再研究吧。

關注我的公眾號一起玩轉技術