Développer un programme de travail de métadonnées Asset Compute

Les programmes de travail personnalisés Asset Compute peuvent produire des données XMP (XML) qui sont renvoyées à AEM et stockées en tant que métadonnées sur une ressource.

Cas d’utilisation courants :

  • Intégrations à des systèmes tiers, tels qu’un PIM (système Product Information Management), dans lequel des métadonnées supplémentaires doivent être récupérées et stockées sur la ressource.
  • Intégrations à des services Adobe, tels que l’IA de Content and Commerce pour ajouter des métadonnées de ressources à des attributs de machine learning supplémentaires.
  • Dérivation de métadonnées sur la ressource à partir de son fichier binaire et stockage en tant que métadonnées de ressource dans AEM as a Cloud Service.

Ce que vous devez faire

Dans ce tutoriel, nous allons créer un programme de travail de métadonnées Asset Compute qui fournit les couleurs les plus couramment utilisées dans une ressource d’image et qui réécrit les noms des couleurs pour les renvoyer aux métadonnées de la ressource dans AEM. Bien que le programme de travail lui-même soit basique, ce tutoriel l’utilise pour explorer la manière dont les programmes de travail Asset Compute peuvent être utilisés pour écrire des métadonnées sur des ressources dans AEM as a Cloud Service.

Flux logique de l’appel d’un programme de travail de métadonnées Asset Compute

L’appel des programmes de travail de métadonnées d’Asset Compute est presque identique à celui des programmes de travail de génération de rendus binaires, la principale différence étant le type de retour, à savoir XMP (XML), dont les valeurs sont également écrites dans les métadonnées de la ressource.

Les programmes de travail Asset Compute implémentent l’API du programme de travail SDK Asset Compute, dans la fonction renditionCallback(...), qui est conceptuellement :

  • Entrée : paramètres binaires et de profil de traitement binaire d’origine d’une ressource AEM.
  • Sortie : un rendu XMP (XML) conservé dans la ressource AEM en tant que rendu et dans les métadonnées de la ressource.

Flux logique de traitement des métadonnées Asset Compute.

  1. Le service de création AEM appelle le programme de travail de métadonnées d’Asset Compute en fournissant le format binaire d’origine de la ressource (1a) et (1b) tous les paramètres définis dans le profil de traitement.
  2. Le SDK Asset Compute orchestre l’exécution de la fonction renditionCallback(...) du programme de travail personnalisé de métadonnées d’Asset Compute, dérivant un rendu XMP (XML), en fonction du format binaire de la ressource (1a) et de tout paramètre de profil de traitement (1b).
  3. Le programme de travail Asset Compute enregistre la représentation XMP (XML) dans rendition.path.
  4. Les données XMP (XML) écrites dans rendition.path sont transportées via le SDK Asset Compute vers le service de création AEM, sont exposées comme (4a) un rendu texte et (4b) conservées dans le nœud de métadonnées de la ressource.

Configurer le fichier manifest.yml manifest

Tous les programmes de travail Assets Compute doivent être enregistrés dans manifest.yml.

Ouvrez le fichier manifest.yml et ajoutez une entrée de programme de travail qui configure le nouveau programme de travail, dans ce cas, metadata-colors.

Souvenez-vous que .yml est sensible aux espaces.

packages:
  __APP_PACKAGE__:
    license: Apache-2.0
    actions:
      worker:
        function: actions/worker/index.js
        web: 'yes'
        runtime: 'nodejs:12'
        limits:
          timeout: 60000 # in ms
          memorySize: 512 # in MB
          concurrency: 10
        annotations:
          require-adobe-auth: true
      metadata-colors:
        function: actions/metadata-colors/index.js
        web: 'yes'
        runtime: 'nodejs:12'
        limits:
          memorySize: 512 # in MB

function pointe vers l’implémentation du programme de travail créée dans l’étape suivante. Nommez les objets du programme de travail sémantiquement (par exemple, actions/worker/index.js aurait pu être nommé actions/rendition-circle/index.js, ce qui aurait été préférable), comme illustré dans l’URL du programme de travail et déterminez également le nom du dossier de la suite de tests du programme de travail.

Les éléments limits et require-adobe-auth sont configurés discrètement par programme de travail. Dans ce programme de travail, une mémoire de 512 MB est attribuée lorsque le code inspecte (potentiellement) des données d’image binaire volumineuses. Les limits restantes sont supprimées pour utiliser les valeurs par défaut.

Développer un programme de travail de métadonnées metadata-worker

Créez un fichier JavaScript de traitement des métadonnées dans le projet Asset Compute à l’emplacement manifest.yml défini pour le nouveau programme de travail, à l’emplacement /actions/metadata-colors/index.js.

Installer les modules npm

Installez les modules npm supplémentaires (@adobe/asset-compute-xmp, get-image-colors, et color-namer) qui sont utilisés dans ce programme de travail Assets Compute.

$ npm install @adobe/asset-compute-xmp
$ npm install get-image-colors
$ npm install color-namer

Code du programme de travail des métadonnées

Ce programme de travail ressemble beaucoup au programme de travail de génération des rendus, la principale différence réside dans le fait qu’il écrit des données XMP (XML) dans rendition.path pour qu’elles soient enregistrées et renvoyées à AEM.

"use strict";

const { worker, SourceCorruptError } = require("@adobe/asset-compute-sdk");
const fs = require("fs").promises;

// Require the @adobe/asset-compute-xmp module to create XMP
const { serializeXmp } = require("@adobe/asset-compute-xmp");

// Require supporting npm modules to derive image colors from image data
const getColors = require("get-image-colors");
// Require supporting npm modules to convert image colors to color names
const namer = require("color-namer");

exports.main = worker(async (source, rendition, params) => {
  // Perform any necessary source (input) checks
  const stats = await fs.stat(source.path);
  if (stats.size === 0) {
    // Throw appropriate errors whenever an erring condition is met
    throw new SourceCorruptError("source file is empty");
  }
  const MAX_COLORS = 10;
  const DEFAULT_COLORS_FAMILY = 'basic';

  // Read the color family parameter to use to derive the color names
  let colorsFamily = rendition.instructions.colorsFamily || DEFAULT_COLORS_FAMILY;

  if (['basic', 'hex', 'html', 'ntc', 'pantone', 'roygbiv'].indexOf(colorsFamily) === -1) {
      colorsFamily = DEFAULT_COLORS_FAMILY;
  }

  // Use the `get-image-colors` module to derive the most common colors from the image
  let colors = await getColors(source.path, { options: MAX_COLORS });

  // Convert the color Chroma objects to their closest names
  let colorNames = colors.map((color) => getColorName(colorsFamily, color));

  // Serialize the data to XMP metadata
  // These properties are written to the [dam:Asset]/jcr:content/metadata resource
  // This stores
  // - The list of color names is stored in a JCR property named `wknd:colors`
  // - The colors family used to derive the color names is stored in a JCR property named `wknd:colorsFamily`
  const xmp = serializeXmp({
      // Use a Set to de-duplicate color names
      "wknd:colors": [...new Set(colorNames)],
      "wknd:colorsFamily": colorsFamily
    }, {
      // Define any property namespaces used in the above property/value definition
      // These namespaces are automatically registered in AEM if they do not yet exist
      namespaces: {
        wknd: "https://wknd.site/assets/1.0/",
      },
    }
  );

  // Save the XMP metadata to be written back to the asset's metadata node
  await fs.writeFile(rendition.path, xmp, "utf-8");
});

/**
 * Helper function that derives the closest color name for the color, based on the colors family
 *
 * @param {*} colorsFamily the colors name family to use
 * @param {*} color the color to convert to a name
 */
function getColorName(colorsFamily, color) {
    if ('hex' === colorsFamily) {  return color; }

    let names = namer(color.rgb())[colorsFamily];

    if (names.length >= 1) { return names[0].name; }
}

Exécuter localement le programme de travail des métadonnées development-tool

Une fois le code du programme de travail terminé, il peut être exécuté à l’aide de l’outil de développement d’Asset Compute local.

Parce que notre projet d’Asset Compute contient deux programmes de travail (le rendu de cercle précédent et ce programme de travail de metadata-colors), la définition du profil de l’outil de développement Asset Compute répertorie les profils d’exécution pour les deux programmes de travail. La deuxième définition de profil pointe vers le nouveau programme de travail de metadata-colors.

Rendu des métadonnées XML.

  1. À partir de la racine du projet Asset Compute

  2. Exécuter aio app run pour démarrer l’outil de développement Asset Compute

  3. Dans le menu déroulant Sélectionner un fichier…, sélectionnez un exemple d’image à traiter.

  4. Dans la seconde configuration de définition de profil, qui pointe vers le programme de travail de metadata-colors, mettez à jour "name": "rendition.xml", car ce programme de travail génère un rendu XMP (XML). Si vous le souhaitez, vous pouvez ajouter le paramètre colorsFamily (valeurs prises en charge : basic, hex, html, ntc, pantone, roygbiv).

    code language-json
    {
        "renditions": [
            {
                "worker": "...",
                "name": "rendition.xml",
                "colorsFamily": "pantone"
            }
        ]
    }
    
  5. Appuyez sur Exécuter et attendez que le rendu XML soit généré.

    • Les deux programmes de travail étant répertoriés dans la définition du profil, les deux rendus sont générés. Si vous le souhaitez, la définition de profil supérieure pointant vers le programme de travail de rendu de cercle peut être supprimée, afin d’éviter de l’exécuter à partir de l’outil de développement.
  6. La section Rendus prévisualise le rendu généré. Appuyez sur le fichier rendition.xml pour le télécharger, puis ouvrez-le dans VS Code (ou votre éditeur XML/texte favori) pour le consulter.

Tester le programme de travail test

Les programmes de travail de métadonnées peuvent être testés à l’aide du même framework de test d’Asset Compute que les rendus binaires. La seule différence est que le fichier rendition.xxx dans le cas de test doit correspondre au rendu XMP (XML) attendu.

  1. Créez la structure suivante dans le projet Asset Compute :

    code language-none
    /test/asset-compute/metadata-colors/success-pantone/
    
        file.jpg
        params.json
        rendition.xml
    
  2. Utilisez l’exemple de fichier comme file.jpg du cas de test.

  3. Ajoutez le JSON suivant au params.json.

    code language-none
    {
        "fmt": "xml",
        "colorsFamily": "pantone"
    }
    

    Notez que le "fmt": "xml" est requis pour demander à la suite de tests de générer un rendu texte .xml.

  4. Fournissez le XML attendu dans le fichier rendition.xml. Vous pouvez l’obtenir de la manière suivante :

    • Exécutez le fichier d’entrée de test via l’outil de développement et enregistrez le rendu XML (validé).
    code language-none
    <?xml version="1.0" encoding="UTF-8"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:wknd="https://wknd.site/assets/1.0/"><rdf:Description><wknd:colors><rdf:Seq><rdf:li>Silver</rdf:li><rdf:li>Black</rdf:li><rdf:li>Outer Space</rdf:li></rdf:Seq></wknd:colors><wknd:colorsFamily>pantone</wknd:colorsFamily></rdf:Description></rdf:RDF>
    
  5. Exécutez aio app test à partir de la racine du projet Asset Compute pour exécuter toutes les suites de test.

Déployer le programme de travail sur Adobe I/O Runtime deploy

Pour appeler ce nouveau programme de travail des métadonnées à partir d’AEM Assets, il doit être déployé dans Adobe I/O Runtime à l’aide de la commande :

$ aio app deploy

Déploiement de l’application AIO.

Notez que tous les programmes de travail seront déployés dans le projet. Consultez les instructions de déploiement complètes pour savoir comment déployer sur les espaces de travail d’évaluation et de production.

Intégrer aux profils de traitement AEM processing-profile

Appelez le programme de travail à partir d’AEM en créant ou en modifiant un service de profil de traitement personnalisé existant qui appelle ce programme de travail déployé.

Profil de traitement.

  1. Connectez-vous au service de création d’AEM as a Cloud Service en tant qu’Administrateur ou administratrice AEM.

  2. Accédez à Outils > Ressources > Profils de traitement.

  3. Créez ou modifiez un profil de traitement.

  4. Appuyez sur l’onglet Personnalisé et appuyez sur Ajouter nouveau.

  5. Définir le nouveau service

    • Créer un rendu de métadonnées  : appuyez sur le bouton (bascule) pour activer la fonctionnalité.

    • Point d’entrée : https://...adobeioruntime.net/api/v1/web/wkndAemAssetCompute-0.0.1/metadata-colors.

      • Il s’agit de l’URL du programme de travail obtenue lors du deploiement ou à l’aide de la commande aio app get-url. Assurez-vous que l’URL pointe vers le bon espace de travail en fonction de l’environnement AEM as a Cloud Service.
    • Paramètres de service

      • Appuyez sur Ajouter un paramètre.

        • Clé : colorFamily
        • Valeur : pantone
          • Valeurs prises en charge : basic, hex, html, ntc, pantone, roygbiv
    • Types MIME

      • Inclut :, image/jpeg, image/png, image/gif, image/svg
        • Il s’agit des seuls types MIME pris en charge par les modules npm tiers utilisés pour extraire les couleurs.
      • Exclut : Leave blank
  6. Appuyez sur Enregistrer en haut à droite.

  7. Appliquez le profil de traitement à un dossier AEM Assets si ce n’est pas déjà fait.

Mettre à jour le schéma de métadonnées metadata-schema

Pour passer en revue les métadonnées des couleurs, mappez deux nouveaux champs du schéma de métadonnées de l’image avec les nouvelles propriétés de données de métadonnées renseignées par le programme de travail.

Schéma de métadonnées.

  1. Dans le service de création d’AEM, accédez à Outils > Ressources > Schémas de métadonnées.

  2. Accédez aux paramètres par défaut, sélectionnez et modifiez l’image, puis ajoutez des champs de formulaire en lecture seule pour exposer les métadonnées de couleur générées.

  3. Ajoutez un texte monoligne.

    • Libellé du champ  : Colors Family
    • Associer à la propriété  : ./jcr:content/metadata/wknd:colorsFamily
    • Règles > Champ > Désactiver la modification  : coché.
  4. Ajoutez un texte à plusieurs valeurs.

    • Libellé du champ  : Colors
    • Associer à la propriété  : ./jcr:content/metadata/wknd:colors
  5. Appuyez sur Enregistrer en haut à droite.

Traiter des ressources

Détails de la ressource.

  1. Dans le service de création d’AEM, accédez à Ressources > Fichiers.
  2. Accédez au dossier, ou sous-dossier, auquel le profil de traitement est appliqué.
  3. Chargez une nouvelle image (JPEG, PNG, GIF ou SVG) dans le dossier ou retraitez les images existantes à l’aide du profil de traitement mis à jour.
  4. Une fois le traitement terminé, sélectionnez la ressource et appuyez sur Propriétés dans la barre d’actions supérieure pour afficher ses métadonnées.
  5. Consultez les champs de métadonnées Colors Family et Colors pour les métadonnées écrites à partir du programme de travail de métadonnées d’Asset Compute personnalisé.

Avec les métadonnées de couleur écrites dans les métadonnées de la ressource, sur la ressource [dam:Asset]/jcr:content/metadata, ces métadonnées sont indexées, ce qui augmente la capacité de découverte de ressources à l’aide de ces termes par le biais d’une recherche. Elles peuvent même être réécrites dans le fichier binaire de la ressource, si par la suite le workflow Écriture différée des métadonnées de gestion des ressources numériques est appelé dessus.

Rendu des métadonnées dans AEM Assets

Fichier de rendu de métadonnées dans AEM Assets.

Le fichier XMP généré par le programme de travail des métadonnées d’Asset Compute est également stocké en tant que rendu distinct sur la ressource. Ce fichier n’est généralement pas utilisé. En revanche, les valeurs appliquées au nœud de métadonnées de la ressource sont utilisées, mais la sortie XML brute du programme de travail est disponible dans AEM.

Code du programme de travail des couleurs de métadonnées sur Github

Le metadata-colors/index.js final est disponible sur Github à l’adresse :

La suite de tests du test/asset-compute/metadata-colors final est disponible sur Github à l’adresse :

recommendation-more-help
4859a77c-7971-4ac9-8f5c-4260823c6f69