我试图从xamarin C #android应用程序代码调用google cloud vision api。我已经设置了环境变量,但仍然无法调用api。所以我决定通过传递凭证json文件来调用它,但现在我收到错误反序列化JSON凭证数据
这是我的代码
string jsonPath = @"C:/Users/abcde/Documents/AndroidApp/My Project-d38b212eadaf.json";
var credential = GoogleCredential.FromJson(jsonPath);
var channel = new Grpc.Core.Channel(ImageAnnotatorClient.DefaultEndpoint.ToString(), credential.ToChannelCredentials());
var client = ImageAnnotatorClient.Create(channel);
var image = Image.FromFile(@"C:/Users/abcde/Documents/AndroidApp/bg.jpg");
var response = client.DetectLabels(image);
foreach (var annotation in response)
{
if (annotation.Description != null)
Console.WriteLine(annotation.Description);
}
像C:/Users/abcde/Documents/AndroidApp/My Project-d38b212eadaf.json
这样的道路永远不会起作用。这是一个Windows文件系统。
此外,您必须从设备或模拟器开始推理。该设备不能只访问您的Windows文件系统并获取该文件。您必须以某种方式在设备上获取该文件,并使用.NET中的Path
对象导航到正确的路径。甚至可能通过依赖服务来获得每个平台的正确路径。
那有意义吗?
var credential = GoogleCredential.FromJson(jsonPath);
是不正确的,因为FromJson
需要一个JSON字符串,而不是JSON文件的路径:
/// <summary>
/// Loads credential from a string containing JSON credential data.
/// <para>
/// The string can contain a Service Account key file in JSON format from the Google Developers
/// Console or a stored user credential using the format supported by the Cloud SDK.
/// </para>
/// </summary>
public static GoogleCredential FromJson(string json) => defaultCredentialProvider.CreateDefaultCredentialFromJson(json);
因此,您需要将文件的内容加载到JSON字符串中,然后调用FromJson
。