C# 从Azure计算机视觉API提取文本时出错
我正在测试Azure计算机视觉API,尝试从本地.jpg文件中提取手写文本。我举了以下的例子: 不幸的是,当我运行代码时,抛出了一个异常:C# 从Azure计算机视觉API提取文本时出错,c#,asp.net,azure,api,C#,Asp.net,Azure,Api,我正在测试Azure计算机视觉API,尝试从本地.jpg文件中提取手写文本。我举了以下的例子: 不幸的是,当我运行代码时,抛出了一个异常:System.aggregateeexception:“this.Endpoint”不能为null 我的测试代码当前为: class Program { static string subscriptionKey = Environment.GetEnvironmentVariable("{SUBSCRIPTION-KEY}");
System.aggregateeexception:“this.Endpoint”不能为null
我的测试代码当前为:
class Program
{
static string subscriptionKey = Environment.GetEnvironmentVariable("{SUBSCRIPTION-KEY}");
static string endpoint = Environment.GetEnvironmentVariable("https://{MY-ENDPOINT}.cognitiveservices.azure.com/");
private const string EXTRACT_TEXT_LOCAL_IMAGE = "vision3.jpg";
public static ComputerVisionClient Authenticate(string endpoint, string key)
{
ComputerVisionClient client =
new ComputerVisionClient(new ApiKeyServiceClientCredentials(key))
{ Endpoint = endpoint };
return client;
}
static void Main()
{
Console.WriteLine("Azure Cognitive Services Computer Vision - .NET quickstart example");
Console.WriteLine();
ComputerVisionClient client = Authenticate(endpoint, subscriptionKey);
//ExtractTextUrl(client, EXTRACT_TEXT_URL_IMAGE).Wait();
ExtractTextLocal(client, EXTRACT_TEXT_LOCAL_IMAGE).Wait();
}
public static async Task ExtractTextLocal(ComputerVisionClient client, string localImage)
{
Console.WriteLine("----------------------------------------------------------");
Console.WriteLine("EXTRACT TEXT - LOCAL IMAGE");
Console.WriteLine();
// Helps calucalte starting index to retrieve operation ID
const int numberOfCharsInOperationId = 36;
Console.WriteLine($"Extracting text from local image {Path.GetFileName(localImage)}...");
Console.WriteLine();
using (Stream imageStream = File.OpenRead(localImage))
{
// Read the text from the local image
BatchReadFileInStreamHeaders localFileTextHeaders = await client.BatchReadFileInStreamAsync(imageStream);
// Get the operation location (operation ID)
string operationLocation = localFileTextHeaders.OperationLocation;
// Retrieve the URI where the recognized text will be stored from the Operation-Location header.
string operationId = operationLocation.Substring(operationLocation.Length - numberOfCharsInOperationId);
// Extract text, wait for it to complete.
int i = 0;
int maxRetries = 10;
ReadOperationResult results;
do
{
results = await client.GetReadOperationResultAsync(operationId);
Console.WriteLine("Server status: {0}, waiting {1} seconds...", results.Status, i);
await Task.Delay(1000);
if (maxRetries == 9)
{
Console.WriteLine("Server timed out.");
}
}
while ((results.Status == TextOperationStatusCodes.Running ||
results.Status == TextOperationStatusCodes.NotStarted) && i++ < maxRetries);
// Display the found text.
Console.WriteLine();
var textRecognitionLocalFileResults = results.RecognitionResults;
foreach (TextRecognitionResult recResult in textRecognitionLocalFileResults)
{
foreach (Line line in recResult.Lines)
{
Console.WriteLine(line.Text);
}
}
Console.WriteLine();
}
}
}
它很好用。有人能告诉我为什么我的两个静态字符串变量不能工作吗?因为我不想硬编码这些变量不确定您希望这两行实现什么-
静态字符串subscriptionKey=Environment.GetEnvironmentVariable(“{SUBSCRIPTION-KEY}”);
静态字符串endpoint=Environment.GetEnvironmentVariable(“https://{MY-endpoint}.cognitiveservices.azure.com/”;
您要么选择环境变量,要么分配字符串文本,您试图。。。你想把两者结合起来吗
也许可以阅读
appsettings.json
中的这些秘密。这是为那些正在学习教程并像我一样专注于环境变量的未来人士准备的,他们可以从visual studio添加新变量,转到您的项目属性>>调试
然后添加提供给您的新密钥和值请在将请求发送到API之前或在开始执行代码时尝试添加以下代码
ServicePointManager.SecurityProtocol=SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;
用调试信息编辑了我的第一篇文章请查看
ComputerVisionClient client = Authenticate("https://{END-POINT}.cognitiveservices.azure.com/", "{SUBSCRIPTION-KEY}");