Utilizzo di una funzione JavaScript Firebase per eseguire un modello in Google Cloud Platform

Feb 02 2023
Supponiamo che tu abbia un progetto Firebase associato alla tua app e che tu abbia creato un modello di machine learning nell'ambito dello stesso progetto in Google Cloud Platform (GCP). Ora ti starai chiedendo come eseguire l'inferenza utilizzando il modello in GCP, tramite l'autenticazione Firebase nell'app.

Supponiamo che tu abbia un progetto Firebase associato alla tua app e che tu abbia creato un modello di machine learning nell'ambito dello stesso progetto in Google Cloud Platform (GCP). Ora ti starai chiedendo come eseguire l'inferenza utilizzando il modello in GCP, tramite l'autenticazione Firebase nell'app. Puoi utilizzare una funzione JavaScript Firebase per farlo.

(Questo è stato testato con Ubuntu 18.04 e Node.js 14)

0. Prerequisiti

  • Un progetto Firebase associato alla tua app (ad es. ID progetto = {PROJECT_ID})
  • Un modello di machine learning nell'ambito dello stesso progetto {PROJECT_ID} su GCP
  • Node.js 14 e npm (puoi installarli usando nvm )

Apri un terminale ed esegui quanto segue.

npm install -g firebase-tools

Supponiamo che la directory del progetto locale sia {LOCAL_DIR} su Desktop. Crealo e naviga verso di esso.

mkdir -p ~/Desktop/{LOCAL_DIR}
cd ~/Desktop/{LOCAL_DIR}

Esegui attentamente i seguenti comandi uno per uno, facendo riferimento alle note sottostanti come guida su come navigare tra i prompt generati da essi.

firebase login

firebase init firestore

firebase init functions

  • Ti verrà chiesto di accedere tramite il browser e di autenticarti.
  • Scegli il progetto Firebase corretto ( {PROJECT_ID} ) quando richiesto.
  • Scegli JavaScript (js) come lingua.
  • " elsint " non è necessario per questo.
  • Scegli sì per l'installazione delle dipendenze.

Avremo bisogno del pacchetto googleapis .

cd ~/Desktop/{LOCAL_DIR}/functions
npm i googleapis

Apri " {LOCAL_DIR}/functions/package.json" con il tuo IDE preferito (ad esempio — VS Code) e modifica la sezione " engines " come segue.

"engines": {
    "node": "14"
  },

Apri " {LOCAL_DIR}/functions/index.js" con il tuo IDE preferito.

Definiamo i seguenti termini. Dovresti sostituirli con i tuoi dati.

  • Nome modello = {MODEL_NAME}
  • Regione del modello = {MODEL_REGION} — (Assicurati che la regione del modello sia la stessa della regione della funzione; soprattutto per prestazioni migliori. Predefinito = us-central1 )
  • Nome funzione Firebase = {ML_FUNCTION}
  • Input alla funzione = input al modello = un dizionario come {“key_str”: “val_str”, “key_int”: 2, “key_arr”: [1.25, 0.76, 3.84]}

const functions = require("firebase-functions");

const admin = require("firebase-admin");

admin.initializeApp(functions.config().firebase);

const googleapis_pack = require("googleapis");

const ml = googleapis_pack.google.ml({version:"v1", rootUrl:"https://{MODEL_REGION}-ml.googleapis.com"});

exports.{ML_FUNCTION} = functions.https.onCall(async(data, context)=>
{
    const key_str = data.key_str;
    const key_int = data.key_int;
    const key_arr = data.key_arr;

    const instance = {"key_str":key_str, "key_int":key_int, "key_arr":key_arr};

    const model = "{MODEL_NAME}";

    const { credential } = await googleapis_pack.google.auth.getApplicationDefault();

    const modelName = "projects/{PROJECT_ID}/models/" + model;

    const results = await ml.projects.predict({
        auth: credential,
        name: modelName,
        requestBody: instance
    });

    return results.data;

}
);

Vai al terminale ed esegui quanto segue.

cd ~/Desktop/{LOCAL_DIR}
firebase deploy --only functions

PS—

Per scoprire come chiamare una funzione Firebase dalla tua app (iOS, Android ecc.), puoi fare riferimento a questa documentazione ufficiale di Google.

Riferimenti

  • https://firebase.google.com/docs/functions/get-started
  • https://github.com/nvm-sh/nvm/blob/master/README.md
  • https://firebase.google.com/docs/functions/callable