检测Google Cloud Vision for .NET中的内容不会导致应用程序挂起

时间:2018-02-27 01:11:24

标签: c# .net grpc google-cloud-vision

我刚刚开始玩Google Cloud Vision。我想检测图像中的文字。受官方文档的启发(例如https://cloud.google.com/vision/docs/detecting-texthttps://cloud.google.com/docs/authentication/production)我

  • 创建了一个新项目
  • 将Vision API附加到它,
  • 创建了一个服务帐户并下载了credentials / key-JSON文件,
  • 设置一个VS项目并从NuGET获得所有相关的包。

我的代码如下所示:

using System;
using System.Windows;
using Google.Apis.Auth.OAuth2;
using Google.Cloud.Vision.V1;
using Grpc.Auth;

//...

private void Button_Click(object sender, RoutedEventArgs e)
{
    // Load an image from a local file.
    var image = Image.FromFile(@"C:\!\myimage.png");
    var credential = GoogleCredential.FromFile(@"C:\!\credentials.json");

    var channel = new Grpc.Core.Channel(@"https://vision.googleapis.com/v1/images:annotate",credential.ToChannelCredentials());

    var client = ImageAnnotatorClient.Create(channel);

    var response = client.DetectText(image); // <-- Nothing happens, app hangs, why?
    foreach (var annotation in response)
    {
        if (annotation.Description != null)
            Console.WriteLine(annotation.Description);
    }
}

//...

在单步执行代码时,应用程序会挂起var response = client.DetectText(image);(无例外或任何情况)。如果我使用其他方法(例如DetectLogos(image)DetectLabels(image)),也会发生同样的情况。在检查CPU使用率和网络流量时,没有重要的事情发生(在相关代码行之前或之后)。

我在这里做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:0)

本教程帮助我成功使Vision API正常工作。我甚至尝试过标签,文字和面孔。您只需更新一些JS以及CS,即可使用您想要使用的任何视觉检测。

您需要更改的另一件事是上传图片而不是带网络摄像头的选项,这并不困难。

http://www.c-sharpcorner.com/article/using-google-vision-api-with-asp-net-mvc/

希望它有所帮助。

答案 1 :(得分:0)

提供的网址目标似乎与Vision REST API有关,但您正在创建GRPC频道。您应该将目标更改为:

var channel = new Grpc.Core.Channel(@"http://vision.googleapis.com",credential.ToChannelCredentials());
var client = ImageAnnotatorClient.Create(channel);

或者:

var channel = new Grpc.Core.Channel(ImageAnnotatorClient.DefaultEndpoint.Host, credential.ToChannelCredentials());
var client = ImageAnnotatorClient.Create(channel);

可以在ImageAnnotatorClient class下找到端点信息。

希望这有用。

答案 2 :(得分:0)

将路径传递给.json文件以实例化gRPC服务比它应该更加棘手。我们正在努力让它变得更容易。与此同时,这个样本最相关: https://github.com/GoogleCloudPlatform/dotnet-docs-samples/blob/master/auth/AuthSample/Program.cs#L337

        var credential = GoogleCredential.FromFile(jsonPath)
            .CreateScoped(LanguageServiceClient.DefaultScopes);
        var channel = new Grpc.Core.Channel(
            LanguageServiceClient.DefaultEndpoint.ToString(),
            credential.ToChannelCredentials());
        var client = LanguageServiceClient.Create(channel);

它适用于不同的API,但它是正确的模式。