Utiliser une fonction JavaScript Firebase pour exécuter un modèle dans Google Cloud Platform

Feb 02 2023
Supposons que vous ayez un projet Firebase associé à votre application et que vous ayez créé un modèle de machine learning sous le même projet dans Google Cloud Platform (GCP). Maintenant, vous vous demandez peut-être comment effectuer une inférence à l'aide du modèle dans GCP, via l'authentification Firebase dans l'application.

Supposons que vous ayez un projet Firebase associé à votre application et que vous ayez créé un modèle de machine learning sous le même projet dans Google Cloud Platform (GCP). Maintenant, vous vous demandez peut-être comment effectuer une inférence à l'aide du modèle dans GCP, via l'authentification Firebase dans l'application. Vous pouvez utiliser une fonction JavaScript Firebase pour le faire.

(Cela a été testé avec Ubuntu 18.04 et Node.js 14)

0. Prérequis

  • Un projet Firebase associé à votre application (par exemple : ID du projet = {PROJECT_ID})
  • Un modèle de machine learning dans le même projet {PROJECT_ID} sur GCP
  • Node.js 14 et npm (vous pouvez les installer en utilisant nvm )

Ouvrez un terminal et exécutez ce qui suit.

npm install -g firebase-tools

Supposons que le répertoire local du projet soit {LOCAL_DIR} sur Desktop. Créez-le et accédez-y.

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

Exécutez les commandes suivantes une par une avec précaution, tout en vous référant aux notes ci-dessous comme guide sur la façon de naviguer dans les invites générées par elles.

firebase login

firebase init firestore

firebase init functions

  • Il vous sera demandé de vous connecter via le navigateur et de vous authentifier.
  • Choisissez le bon projet Firebase ( {PROJECT_ID} ) lorsque vous y êtes invité.
  • Choisissez JavaScript (js) comme langage.
  • « elsint » n'est pas nécessaire pour cela.
  • Choisissez oui pour installer les dépendances.

Nous aurons besoin du package googleapis .

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

Ouvrez « {LOCAL_DIR}/functions/package.json » avec votre IDE préféré (par exemple, VS Code) et modifiez la section « moteurs » comme suit.

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

Ouvrez « {LOCAL_DIR}/functions/index.js » avec votre IDE préféré.

Définissons les termes suivants. Vous devez les remplacer par vos coordonnées.

  • Nom du modèle = {MODEL_NAME}
  • Model region = {MODEL_REGION} — (Assurez-vous que la région du modèle est la même que la région de la fonction ; en particulier pour de meilleures performances. Par défaut = us-central1 )
  • Nom de la fonction Firebase = {ML_FUNCTION}
  • Entrée de la fonction = entrée du modèle = un dictionnaire comme {"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;

}
);

Allez au terminal et exécutez ce qui suit.

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

PS —

Pour savoir comment appeler une fonction Firebase depuis votre application (iOS, Android etc), vous pouvez vous référer à cette documentation officielle de Google.

Les références

  • 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