Google AutoML Vision - Как вызвать несколько прогнозов - PullRequest
0 голосов
/ 08 сентября 2018

Я создаю размещенное в Firebase веб-приложение, основанное на презентации Google I / O '17, где Google AutoML Vision может сфотографировать облако и сказать вам, какой тип облака он использует на основе своего обучения машинному обучению. Код, который я использую, допускает только один вызов, и я думаю, что это связано со следующим фрагментом кода:

     // Get only the first prediction response
        let data = response[0]['payload'];
        predictions[data[0].displayName] = data[0].classification.score;

Из того, что я могу сказать из документации Google, [0] соответствует annotateImageID. Проблема с кодом, передающим 0, состоит в том, что веб-приложение не может получать прогнозы для более чем одного изображения.

Ниже приведена вся часть кода, требующая отправки результатов в веб-приложение:

exports.callCustomModel = functions.storage.object().onFinalize(event => {
const file = gcsClient.bucket(event.bucket).file(event.name);
let destination = '/tmp/' + event.name.replace(/\s/g, '');
return file.download({destination: destination})
    .then(() => {
        if(sizeOf(destination).width > 600) {
            console.log('scaling image down...');
            return resizeImg(destination);
        } else {
            return destination;
        }     
    })
    .then(() => {
        let bitmap = fs.readFileSync(destination);
        let data = new Buffer(bitmap).toString('base64');
        return callAutoMLAPI(data);  
    })
    .then((response) => {
        let predictions = {};

        // Get only the first prediction response
        let data = response[0]['payload'];
        predictions[data[0].displayName] = data[0].classification.score;

        if (Object.keys(predictions).length === 0) {
            predictions = {"predictionErr": "No high confidence predictions found"};
        }
        return db.collection('images').doc(event.name).set(predictions);
    })
    .then(() => {
        // Delete tmp image file to clean up resources
        return new Promise((resolve, reject) => {
            fs.unlinkSync(destination, (err) => {
            if (err) {
                reject(err);
            } else {
                resolve();
            }
            });
        });
    })

1 Ответ

0 голосов
/ 14 января 2019

response.payload имея все прогнозы выше ваших пороговых наборов.

...