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等非結構化的資料進行資料採集,從而轉換成結構化資料進行儲存以及分析。表單識別器支援無需訓練的識別,如果複雜表單還可以進行自定義模型的訓練,從而提高識別精度。但是目前好像還不支援中文,後續再研究吧。