Ich habe ein geschultes Modell (CNN) in der Google Cloud Platform bereitgestellt, von dem ich Vorhersagen mithilfe der Python-Clientbibliothek oder des Befehls gcloud
erhalten kann.Google Cloud Machine Learning-API DotNet-Client - Vorhersageanforderung fehlgeschlagen
ich jetzt versuchen, den Dot Net Client v1.25 (https://github.com/google/google-api-dotnet-client/tree/v1.25.0) zu verwenden, um Vorhersagen zu erhalten, aber die Anforderung fehlschlägt mit {"error": "Missing "instances" field in request body."}
obwohl die JSON ich das Senden bin von der Form ist:
{"instances": [{"image":<base64ImageData>, "key":"1"}]}
Ich kann die Bibliothek verwenden, um eine Liste der verfügbaren Modelle mit der List()
Methode zu erhalten.
-Code lautet wie folgt:
using System;
using System.Text;
using Google.Apis.Auth.OAuth2;
using System.IO;
using Google.Apis.Services;
using Google.Apis.CloudMachineLearningEngine.v1beta1.Data;
using Newtonsoft.Json;
namespace GoogleCloudTesting
{
Class Program
{
static void Main(string[] args)
{
GoogleCredential credential = GoogleCredential.GetApplicationDefaultAsync().Result;
var service = new Google.Apis.CloudMachineLearningEngine.v1beta1.CloudMachineLearningEngineService(
new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Testing"
}
);
string jsonImagesPath = @"c:\path\to\images.json"; // {"instances": [{"image":<base64imagedata>, "key":"1"}]}
string json = File.ReadAllText(jsonImagesPath);
var request = new GoogleCloudMlV1beta1PredictRequest
{
HttpBody = new GoogleApiHttpBody { Data = json }
};
var predictRequest = service.Projects.Predict(request, "projects/my_project/models/my_model/versions/V1");
var result = predictRequest.Execute();
Console.WriteLine(result.Data); // null
}
}
}
Jede geschätzt Hilfe, danke.
https://cloud.google.com/ml-engine/reference/rest/v1/projects/predict schlagen Base64-codierten Daten durch ein JSON Objekt ersetzt werden muss, mit einem einzelnen Attribut namens 'b64'. Also müssen Sie vielleicht verwenden: {"Instanzen": [{"image": {"b64": ""}, "Schlüssel": "1"}]} –
Chris
Ich sehe einen feinen Unterschied im Vergleich zur Python-Version (https://cloud.google.com/ml-engine/docs/how-tos/online-predict#requesting_predictions), aber ich kenne die .net-Bibliothek nicht gut genug, um sie mit Sicherheit zu beheben. Der Unterschied ist, dass HttpBody in Python nicht verwendet wird. Stattdessen etwas wie service.Projects.Predict (body = json, name = "projects/mein_projekt/models/my_model/versions/V1"). Auch hier kann ich nicht garantieren, dass das funktioniert, aber ich bin mir ziemlich sicher, dass das Problem der HttpBody ist. – rhaertel80
Bitte folgen Sie den Anweisungen hier: https://googlecloudplatform.github.io/google-cloud-dotnet/docs/faq.html#how-can-i-trace-requests-and-responses-in-rest-based-apis um die HTTP-Anforderungsheader und den Hauptteil auszugeben. Dann poste hier den Dump. –