Utveckla en metadataarbetare från Asset Compute

Anpassade Asset Compute-arbetare kan producera XMP-data (XML) som skickas tillbaka till AEM och lagras som metadata för en resurs.

Exempel på vanliga användningsområden:

  • Integrering med system från tredje part, t.ex. PIM (Product Information Management System), där ytterligare metadata måste hämtas och lagras på resursen
  • Integrering med Adobes tjänster, som Content och Commerce AI, för att förbättra metadata för materialet med ytterligare inlärningsattribut
  • Hämta metadata om resursen från dess binärfil och lagra den som metadata i resursen i AEM as a Cloud Service

Vad du ska göra

I den här självstudiekursen skapar vi en metadataarbetare från Asset Compute som hämtar de vanligaste färgerna i en bildresurs och skriver tillbaka namnen på färgerna till resursens metadata i AEM. Även om arbetaren själv är grundläggande används den här självstudien för att utforska hur Asset Compute-arbetare kan användas för att skriva tillbaka metadata till resurser i AEM as a Cloud Service.

Logiskt flöde för ett anrop till en Asset Compute-metadataarbetare

Anropet från Asset Compute metadataarbetare är nästan identiskt med anropet från binära återgivningsarbetare, där den primära skillnaden är returtypen är en XMP (XML)-återgivning vars värden också skrivs till resursens metadata.

Asset Compute-arbetare implementerar Asset Compute SDK-arbets-API-kontraktet i funktionen renditionCallback(...) som är begreppsmässigt:

  • Indata: En AEM-resurs ursprungliga binära parametrar och parametrar för Bearbetningsprofil
  • Utdata: En XMP-återgivning (XML) som sparas i AEM-resursen som en återgivning och i resursens metadata

Logiskt arbetsflöde för Asset Compute-metadataarbetare

  1. AEM Author-tjänsten anropar Asset Compute metadataarbetare, som tillhandahåller resursens ursprungliga binärfil (1a) och (1b) alla parametrar som definierats i Bearbetningsprofilen.
  2. Asset Compute SDK organiserar körningen av den anpassade Asset Compute-metadataarbetarens renditionCallback(...)-funktion och härleder en XMP-återgivning (XML) baserat på resursens binära (1a) och eventuella parametrar för Bearbeta profil (1b).
  3. Asset Compute-arbetaren sparar XMP (XML)-representationen i rendition.path.
  4. XMP (XML)-data som skrivs till rendition.path transporteras via Asset Compute SDK till AEM Author Service och visar dem som (4a) en textåtergivning och (4b) beständiga till objektets metadatanod.

Konfigurera manifest.yml manifest

Alla Asset Compute-arbetare måste registreras i manifest.yml.

Öppna projektets manifest.yml och lägg till en arbetarpost som konfigurerar den nya arbetaren, i det här fallet metadata-colors.

Kom ihåg att .yml är blankstegskänslig.

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 pekar på den arbetarimplementering som skapades i nästa steg. Namnge arbetare semantiskt (till exempel kan actions/worker/index.js ha fått ett bättre namn actions/rendition-circle/index.js), eftersom dessa visas i arbetarens URL och även fastställer arbetarens testsvitsmapp.

limits och require-adobe-auth har konfigurerats separat per arbetare. I den här arbetaren tilldelas 512 MB minne när koden undersöker (eventuellt) stora binära bilddata. De andra limits har tagits bort för att använda standardvärden.

Utveckla en metadataarbetare metadata-worker

Skapa en ny JavaScript-fil för metadataarbetare i Asset Compute-projektet på sökvägen defined manifest.yml för den nya arbetaren, på /actions/metadata-colors/index.js

Installera npm-moduler

Installera de extra npm-modulerna (@adobe/asset-compute-xmp, get-image-colors och color-namer) som används i den här Asset Compute-arbetaren.

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

Metadata worker code

Den här arbetaren ser ut ungefär som den återgivningsgenererande arbetaren. Den största skillnaden är att den skriver XMP-data (XML) till rendition.path för att sparas i AEM igen.

"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; }
}

Kör metadataarbetaren lokalt development-tool

När koden är klar kan den köras med det lokala Asset Compute Development Tool.

Eftersom vårt Asset Compute-projekt innehåller två arbetare (den tidigare cirkelrenderingen och den här metadata-colors arbetaren) listas körningsprofiler för båda arbetarna i Asset Compute Development Tool -profildefinitionen. Den andra profildefinitionen pekar på den nya metadata-colors-arbetaren.

XML-metadataåtergivning

  1. Från Asset Compute-projektets rot

  2. Kör aio app run för att starta Asset Compute Development Tool

  3. I listrutan Välj en fil… väljer du en exempelbild att bearbeta

  4. I den andra profildefinitionskonfigurationen, som pekar på arbetaren metadata-colors, uppdaterar du "name": "rendition.xml" när arbetaren genererar en XMP-återgivning (XML). Du kan också lägga till en colorsFamily-parameter (värden som stöds basic, hex, html, ntc, pantone, roygbiv).

    code language-json
    {
        "renditions": [
            {
                "worker": "...",
                "name": "rendition.xml",
                "colorsFamily": "pantone"
            }
        ]
    }
    
  5. Tryck på Kör och vänta på att XML-återgivningen ska generera

    • Eftersom båda arbetarna är listade i profildefinitionen genereras båda återgivningarna. Den övre profildefinitionen som pekar på den cirkelformade återgivningsarbetaren kan också tas bort, så att den inte körs från utvecklingsverktyget.
  6. Avsnittet Återgivningar förhandsvisar den återgivning som genererats. Tryck på rendition.xml för att hämta den och öppna den i VS-koden (eller din favoritredigerare för XML/text) för att granska den.

Testa arbetaren test

Metadataarbetare kan testas med samma Asset Compute-testramverk som binära återgivningar. Den enda skillnaden är att filen rendition.xxx i testfallet måste vara den förväntade XMP-återgivningen (XML).

  1. Skapa följande struktur i Asset Compute-projektet:

    code language-none
    /test/asset-compute/metadata-colors/success-pantone/
    
        file.jpg
        params.json
        rendition.xml
    
  2. Använd exempelfilen som file.jpg för testfallet.

  3. Lägg till följande JSON i params.json.

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

    Observera att "fmt": "xml" krävs för att instruera testsviten att generera en .xml textbaserad återgivning.

  4. Ange förväntad XML i filen rendition.xml. Detta kan erhållas genom att

    • Kör testindatafilen med utvecklingsverktyget och spara den (validerade) XML-återgivningen.
    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. Kör aio app test från roten för Asset Compute-projektet om du vill köra alla testsviter.

Distribuera arbetaren till Adobe I/O Runtime deploy

Om du vill anropa den här nya metadataarbetaren från AEM Assets måste den distribueras till Adobe I/O Runtime med kommandot:

$ aio app deploy

distribution av AIR-app

Observera att detta distribuerar alla arbetare i projektet. Granska de ej förkortade distributionsinstruktionerna för hur du distribuerar till arbetsytorna Stage och Production.

Integrera med AEM bearbetningsprofiler processing-profile

Anropa arbetaren från AEM genom att skapa en ny, eller ändra en befintlig, anpassad bearbetningsprofiltjänst som anropar den här distribuerade arbetaren.

Bearbetar profil

  1. Logga in på AEM as a Cloud Service Author som AEM Administrator

  2. Navigera till Verktyg > Assets > Bearbeta profiler

  3. Skapa en ny, eller redigera och befintlig, bearbetningsprofil

  4. Tryck på fliken Egen och tryck sedan på Lägg till ny

  5. Definiera den nya tjänsten

    • Skapa metadataåtergivning: Växla till aktiv

    • Slutpunkt: https://...adobeioruntime.net/api/v1/web/wkndAemAssetCompute-0.0.1/metadata-colors

      • Det här är URL:en till arbetaren som hämtas under distributionen eller med kommandot aio app get-url. Kontrollera URL-punkterna på rätt arbetsyta baserat på AEM as a Cloud Service-miljön.
    • Tjänsteparametrar

      • Tryck på Lägg till parameter

        • Nyckel: colorFamily
        • Värde: pantone
          • Värden som stöds: basic, hex, html, ntc, pantone, roygbiv
    • MIME-typer

      • Innehåller: image/jpeg, image/png, image/gif, image/svg
        • Detta är de enda MIME-typer som stöds av npm-moduler från tredje part som används för att härleda färgerna.
      • Utesluter: Leave blank
  6. Tryck på Spara längst upp till höger

  7. Använd bearbetningsprofilen på en AEM Assets-mapp om detta inte redan är gjort

Uppdatera metadataschemat metadata-schema

Om du vill granska färgmetadata mappar du två nya fält i bildens metadataram till de nya metadataegenskaper som arbetaren fyller i.

Metadataschema

  1. Gå till Verktyg > Assets > Metadatascheman i AEM Author-tjänsten.

  2. Navigera till standard och markera och redigera bild och lägg till skrivskyddade formulärfält för att visa de genererade färgmetadata

  3. Lägg till en enkelradig text

    • Fältetikett: Colors Family
    • Mappa till egenskap: ./jcr:content/metadata/wknd:colorsFamily
    • Regler > Fält > Inaktivera redigering: Markerat
  4. Lägg till en flervärdestext

    • Fältetikett: Colors
    • Mappa till egenskap: ./jcr:content/metadata/wknd:colors
  5. Tryck på Spara längst upp till höger

Bearbetar resurser

Resursinformation

  1. I AEM Author går du till Assets > Filer
  2. Navigera till mappen, eller undermappen, som Bearbetningsprofilen tillämpas på
  3. Överför en ny bild (JPEG, PNG, GIF eller SVG) till mappen eller bearbeta om befintliga bilder med den uppdaterade Bearbetningsprofilen
  4. När bearbetningen är klar markerar du resursen och trycker på egenskaper i det övre åtgärdsfältet för att visa dess metadata
  5. Granska metadatafälten Colors Family och Colors 🔗 för metadata som skrivits tillbaka från den anpassade metadataarbetaren i Asset Compute.

När färgmetadata skrivs till resursens metadata på [dam:Asset]/jcr:content/metadata-resursen indexeras den här metadata, vilket gör det möjligt att identifiera resurser med dessa termer via sökning. De kan även skrivas tillbaka till resursens binärfil om DAM Metadata Writeback -arbetsflödet anropas.

Metadataåtergivning i AEM Assets

AEM Assets metadataåtergivningsfil

Den XMP-fil som genereras av Asset Compute metadataarbetare lagras också som en separat återgivning av resursen. Den här filen används vanligtvis inte, i stället används de värden som används för objektets metadatanod, men rå XML-utdata från arbetaren är tillgängliga i AEM.

metadata-colors worker code on Github

Den sista metadata-colors/index.js är tillgänglig på Github på:

Den sista test/asset-compute/metadata-colors-testsviten är tillgänglig på Github på:

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