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