У меня есть модель, настроенная и работающая на Google ML Engine, которую я могу успешно использовать со своего персонального компьютера. Сейчас я пытаюсь настроить облачные функции Firebase, чтобы звонить в мою модель ML Engine. Я очень близок (я думаю), но сейчас я бью стену.
Мои запросы на предсказание принимаются ML Engine, но я не получаю результаты предсказания в функции обратного вызова.
results.predictions
всегда равно нулю, и когда я строковый results
я вижу это:
и Stackdriver показывает успешно отправляемый запрос:
Вы также можете увидеть на панели инструментов ML Engine Models, что Last use time
отображает , когда я вызываю функцию облака.
Но я не могу понять, почему я не получаю результаты прогноза от ML Engine.
Это то, чему я следовал в качестве руководства по настройке моих облачных функций: https://github.com/GoogleCloudPlatform/ml-functions-helpdesk/blob/master/functions/index.js
В настоящее время это моя облачная функция, ей передаются данные изображения в кодировке base64 через data.imageData
, и я подтвердил, что это действительное кодирование изображения, скопировав вывод и запустив запрос прогнозирования с моего компьютера.
const functions = require('firebase-functions');
const {google} = require('googleapis');
exports.analyzeDetection = functions.https.onCall((data, context) => {
if (data.imageData) {
// Auth
google.auth.getApplicationDefault((err, authClient) => {
if (err) {
console.error("getApplicationDefault err " + err);
return {
prediction: "error"
}
}
//[START ml_engine_auth]
if (authClient.createScopedRequired && authClient.createScopedRequired()) {
// https://developers.google.com/identity/protocols/googlescopes#mlv1
authClient = authClient.createScoped(['https://www.googleapis.com/auth/cloud-platform']);
}
//Create authenticated ml engine client
var ml = google.ml({
version: 'v1',
auth: authClient
});
//[END ml_engine_auth]
// Prediction
ml.projects.predict({
name: `projects/my_project_name/models/my_model_name`,
resource: {
instances: [{"b64": data.imageData}]
}
}, (err, result) => {
// The problem is that result is always null
if (err){
console.error('ERROR ', err);
return {
prediction: "error"
}
}
return {
prediction: "add this after the prediction requests are working"//result.predictions[0].predicted
}
});
});
}
});
Примечание: я запутал my_project_name
и my_model_name
, это не то, что они на самом деле говорят.
Я также пробовал несколько различных вариантов параметров прогнозирования, таких как:
name: 'projects/my_project_name/models/my_model_name',
resource: {
instances: [{"image_bytes": {"b64": data.imageData}, "key": "0"}]
}
и
name: 'projects/my_project_name/models/my_model_name',
resource: {
name: 'projects/my_project_name/models/my_model_name',
instances: [{"b64": data.imageData}]
}
но, похоже, все они работают одинаково.
Есть идеи, почему я не получаю результаты прогноза обратно из запроса? Спасибо.