Azure認知服務之表格識別器


認知服務

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

表單識別器

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

引用自微軟Azure文檔

新建表單識別器資源

ab9tkd.png

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

查看秘鑰跟終結點

abCEgP.png
創建完成后,點擊側邊菜單密鑰跟終結點,查看密鑰跟終結點信息,等下調用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,在界面上放置一個按鈕來選擇文件,放置一個文本框顯示內容。界面如下:
abS580.png

選擇識別文件

   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文件如下:
abQaZ9.png

使用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進行識別,等待一會就會有結果。

運行一下

讓我們運行一下看看吧:
abSHrF.gif

總結

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM