本快速入门将使用适用于 C# 的计算机视觉 SDK 从图像中提取手写文本或印刷体文本。 如果你愿意,可以从 GitHub 上的认知服务 Csharp 视觉存储库下载本指南中的代码作为完整的示例应用。
- 计算机视觉订阅密钥。 你可以按照创建认知服务帐户中的说明订阅计算机视觉并获取密钥。
- 任何版本的 Visual Studio 2015 或 2017。
- Microsoft.Azure.CognitiveServices.Vision.ComputerVision 客户端库 NuGet 包。 不需下载程序包。 下面提供了安装说明。
若要运行此示例,请执行以下步骤:
在 Visual Studio 中创建一个新的 Visual C# 控制台应用。
安装计算机视觉客户端库 NuGet 包。
- 在菜单上,单击“工具”,然后依次选择“NuGet 包管理器”、“管理解决方案的 NuGet 包” 。
- 单击“浏览” 选项卡,在“搜索” 框中键入“Microsoft.Azure.CognitiveServices.Vision.ComputerVision”。
- 选择显示的 Microsoft.Azure.CognitiveServices.Vision.ComputerVision,单击项目名称旁边的复选框,然后单击“安装” 。
将
Program.cs
替换为以下代码。BatchReadFileAsync
和BatchReadFileInStreamAsync
方法分别为远程图像和本地图像包装批量读取 API。GetReadOperationResultAsync
方法包装获取读取操作结果 API。using Microsoft.Azure.CognitiveServices.Vision.ComputerVision; using Microsoft.Azure.CognitiveServices.Vision.ComputerVision.Models; using System; using System.IO; using System.Threading.Tasks; namespace ExtractText { class Program { // subscriptionKey = "0123456789abcdef0123456789ABCDEF" private const string subscriptionKey = "<Subscription key>"; // localImagePath = @"C:\Documents\LocalImage.jpg" private const string localImagePath = @"<LocalImage>"; private const string remoteImageUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Cursive_Writing_on_Notebook_paper.jpg/800px-Cursive_Writing_on_Notebook_paper.jpg"; private const int numberOfCharsInOperationId = 36; static void Main(string[] args) { ComputerVisionClient computerVision = new ComputerVisionClient( new ApiKeyServiceClientCredentials(subscriptionKey), new System.Net.Http.DelegatingHandler[] { }); computerVision.Endpoint = "https://api.cognitive.azure.cn"; Console.WriteLine("Images being analyzed ..."); var t1 = ExtractRemoteTextAsync(computerVision, remoteImageUrl); var t2 = ExtractLocalTextAsync(computerVision, localImagePath); Task.WhenAll(t1, t2).Wait(5000); Console.WriteLine("Press ENTER to exit"); Console.ReadLine(); } // Read text from a remote image private static async Task ExtractRemoteTextAsync( ComputerVisionClient computerVision, string imageUrl) { if (!Uri.IsWellFormedUriString(imageUrl, UriKind.Absolute)) { Console.WriteLine( "\nInvalid remoteImageUrl:\n{0} \n", imageUrl); return; } // Start the async process to read the text BatchReadFileHeaders textHeaders = await computerVision.BatchReadFileAsync( imageUrl); await GetTextAsync(computerVision, textHeaders.OperationLocation); } // Recognize text from a local image private static async Task ExtractLocalTextAsync( ComputerVisionClient computerVision, string imagePath) { if (!File.Exists(imagePath)) { Console.WriteLine( "\nUnable to open or read localImagePath:\n{0} \n", imagePath); return; } using (Stream imageStream = File.OpenRead(imagePath)) { // Start the async process to recognize the text BatchReadFileInStreamHeaders textHeaders = await computerVision.BatchReadFileInStreamAsync( imageStream); await GetTextAsync(computerVision, textHeaders.OperationLocation); } } // Retrieve the recognized text private static async Task GetTextAsync( ComputerVisionClient computerVision, string operationLocation) { // Retrieve the URI where the recognized text will be // stored from the Operation-Location header string operationId = operationLocation.Substring( operationLocation.Length - numberOfCharsInOperationId); Console.WriteLine("\nCalling GetHandwritingRecognitionOperationResultAsync()"); ReadOperationResult result = await computerVision.GetReadOperationResultAsync(operationId); // Wait for the operation to complete int i = 0; int maxRetries = 10; while ((result.Status == TextOperationStatusCodes.Running || result.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries) { Console.WriteLine( "Server status: {0}, waiting {1} seconds...", result.Status, i); await Task.Delay(1000); result = await computerVision.GetReadOperationResultAsync(operationId); } // Display the results Console.WriteLine(); var recResults = result.RecognitionResults; foreach (TextRecognitionResult recResult in recResults) { foreach (Line line in recResult.Lines) { Console.WriteLine(line.Text); } } Console.WriteLine(); } } }
将
<Subscription Key>
替换为有效订阅密钥。如有必要,将
computerVision.Endpoint
更改为与订阅密钥关联的 Azure 区域。将
<LocalImage>
替换为本地图像的路径和文件名。(可选)将
remoteImageUrl
设置为另一图像。运行该程序。
成功的响应会输出每个图像的各行已识别文本。
Calling GetHandwritingRecognitionOperationResultAsync()
Calling GetHandwritingRecognitionOperationResultAsync()
Server status: Running, waiting 1 seconds...
Server status: Running, waiting 1 seconds...
dog
The quick brown fox jumps over the lazy
Pack my box with five dozen liquor jugs
探索用于分析图像、检测名人和地标、创建缩略图以及提取印刷体文本和手写文本的计算机视觉 API。