Een Asset Compute-metagegevensworker ontwikkelen

De arbeiders van de Asset Compute van de douane kunnen XMP (XML) gegevens produceren die terug naar AEM worden verzonden en als meta-gegevens op activa worden opgeslagen.

Vaak voorkomende gevallen van gebruik zijn:

  • Integraties met systemen van derden, zoals een PIM (Product Information Management System), waar aanvullende metagegevens moeten worden opgehaald en opgeslagen op het middel
  • Integratie met Adobe-services, zoals Content en Commerce AI, om metagegevens van elementen te verfraaien met extra leerkenmerken voor computers
  • Metagegevens over het element afgeleid van de binaire waarde en opslaan als metagegevens over elementen in AEM as a Cloud Service

Wat u gaat doen

In deze zelfstudie maken we een Asset Compute-worker voor metagegevens die de meest gebruikte kleuren in een afbeeldingselement afleidt, en schrijven we de namen van de kleuren terug naar de metagegevens van het element in AEM. Hoewel de worker zelf standaard is, wordt deze zelfstudie gebruikt om te verkennen hoe Asset Compute-workers kunnen worden gebruikt om metagegevens terug te schrijven naar elementen in AEM as a Cloud Service.

Logische stroom van een aanroep van een Asset Compute-metagegevensworker

De aanroeping van de de meta-gegevensarbeiders van Asset Compute is bijna identiek aan die van binaire vertoning die arbeidersproduceert, met het primaire verschil is het terugkeertype een vertoning van XMP (XML) de waarvan waarden ook aan de meta-gegevens van de activa worden geschreven.

Asset Compute Workers implementeren het Asset Compute SDK worker API-contract in de functie renditionCallback(...) , wat conceptueel is:

  • Input: de originele binaire parameters en van het Profiel van een AEM-element
  • Output: Een XMP (XML) vertoning voortzette aan de activa van AEM als vertoning en aan de meta-gegevens van de activa

de meta-gegevensarbeider van Asset Compute logische stroom

  1. De dienst van de Auteur van AEM roept de de meta-gegevensarbeider van Asset Compute aan, die de activa (1a) verstrekt origineel binair, en (1b) om het even welke die parameters in het Profiel van de Verwerking worden bepaald.
  2. Asset Compute SDK organiseert de uitvoering van de functie van de meta-gegevensarbeider van douaneAsset Compute renditionCallback(...), die een vertoning van XMP (XML) afleidt, die op het binaire element (1a) wordt gebaseerd en om het even welke parameters van het Profiel van de Verwerking (1b).
  3. De Asset Compute-worker slaat de XMP-representatie (XML) op in rendition.path .
  4. De gegevens van XMP (XML) die aan rendition.path worden geschreven worden vervoerd via de SDK van Asset Compute naar de Dienst van de Auteur van AEM en stelt het als (4a) een tekstvertoning en (4b) voortgeduurd aan de de meta-gegevensknoop van activa bloot.

Vorm manifest.yml manifest

Alle arbeiders van Asset Compute moeten in manifest.ymlworden geregistreerd.

Open het project manifest.yml en voeg een arbeidersingang toe die de nieuwe worker, in dit geval metadata-colors vormt.

herinner .yml is gevoelig whitespace.

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 richt aan de arbeidersimplementatie die in de volgende stapwordt gecreeerd. De arbeiders van de naam semantisch (bijvoorbeeld, zou actions/worker/index.js beter kunnen genoemd zijn actions/rendition-circle/index.js), aangezien deze in URL van de arbeidertonen en ook de de naam van de de de testreeksomslag van de arbeiderbepalen.

limits en require-adobe-auth worden op discrete wijze geconfigureerd per worker. In deze worker wordt 512 MB geheugen toegewezen terwijl de code (mogelijk) grote binaire afbeeldingsgegevens inspecteert. De andere limits worden verwijderd om de standaardwaarden te gebruiken.

Een metagegevensworker ontwikkelen metadata-worker

Creeer een nieuw dossier van JavaScript van de meta-gegevensarbeider in het project van Asset Compute bij de weg bepaalde manifest.yml voor de nieuwe worker, bij /actions/metadata-colors/index.js

Npm-modules installeren

Installeer de extra npm modules (@adobe/asset-compute-xmp, get-image-colors, en kleur-namer) die in deze worker van Asset Compute wordt gebruikt.

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

Code metagegevensworker

Deze arbeider kijkt zeer gelijkaardig aan de rendition-producerende arbeider, het primaire verschil is het schrijft XMP (XML) gegevens aan rendition.path om terug naar AEM worden bewaard.

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

De metagegevensworker lokaal uitvoeren development-tool

Als de code van de worker is voltooid, kan deze worden uitgevoerd met het lokale Asset Compute Development Tool.

Omdat ons project van Asset Compute twee arbeiders (de vorige cirkelvertoningen deze metadata-colors worker) bevat, maakt de 🔗 profieldefinitie van het Hulpmiddel van de Ontwikkeling van Asset Compute een lijst van uitvoeringsprofielen voor beide arbeiders. De tweede profieldefinitie verwijst naar de nieuwe metadata-colors worker.

de meta-gegevensvertoning van XML

  1. Van de basis van het Asset Compute-project

  2. Uitvoeren aio app run om het Asset Compute Development Tool te starten

  3. In selecteer een dossier… drop down, pluk a steekproefbeeldom te verwerken

  4. In de tweede profieldefinitieconfiguratie, die naar de metadata-colors worker verwijst, werkt u "name": "rendition.xml" bij terwijl deze worker een XMP (XML)-uitvoering genereert. Voeg desgewenst een parameter colorsFamily (ondersteunde waarden basic , hex , html , ntc , pantone , roygbiv ) toe.

    code language-json
    {
        "renditions": [
            {
                "worker": "...",
                "name": "rendition.xml",
                "colorsFamily": "pantone"
            }
        ]
    }
    
  5. Tik Looppas en wacht op de vertoning van XML om te produceren

    • Aangezien beide workers worden vermeld in de profieldefinitie, genereren beide uitvoeringen. Naar keuze, kan de hoogste profieldefinitie die bij de worker van de cirkelvertoningrichten worden geschrapt, vermijden uitvoerend het van het Hulpmiddel van de Ontwikkeling.
  6. De vertoningen sectie previews de geproduceerde vertoning. Tik op de rendition.xml om deze te downloaden en open deze in VS-code (of in uw favoriete XML-/teksteditor) om deze te bekijken.

De worker testen test

De arbeiders van meta-gegevens kunnen worden getest gebruikend het zelfde Asset Compute testende kader zoals binaire vertoningen. Het enige verschil is dat het rendition.xxx -bestand in het testgeval de verwachte XMP (XML)-uitvoering moet zijn.

  1. Maak de volgende structuur in het Asset Compute-project:

    code language-none
    /test/asset-compute/metadata-colors/success-pantone/
    
        file.jpg
        params.json
        rendition.xml
    
  2. Gebruik het steekproefdossierals testcase file.jpg.

  3. Voeg de volgende JSON toe aan de params.json .

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

    Let op: "fmt": "xml" is vereist om de testsuite de instructie te geven een .xml op tekst gebaseerde uitvoering te genereren.

  4. Geef de verwachte XML op in het rendition.xml -bestand. Dit kan worden verkregen door:

    • Het testinvoerbestand uitvoeren via het Development Tool en de (gevalideerde) XML-uitvoering opslaan.
    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. Voer aio app test uit vanaf de basis van het Asset Compute-project om alle testsuites uit te voeren.

De worker distribueren naar Adobe I/O Runtime deploy

Om deze nieuwe meta-gegevensarbeider van AEM Assets aan te halen, moet het aan Adobe I/O Runtime worden opgesteld, gebruikend het bevel:

$ aio app deploy

de implementatie van de audio-app

Merk op dit alle arbeiders in het project zal opstellen. Herzie onverkort opstelt instructiesvoor hoe te aan werkruimten van het Stadium en van de Productie op te stellen.

Integreren met AEM-verwerkingsprofielen processing-profile

Roep de worker van AEM aan door een nieuwe aangepaste verwerkingsprofielservice te maken of door een bestaande aangepaste verwerkingsprofielservice te wijzigen die deze geïmplementeerde worker activeert.

Profiel van de Verwerking

  1. Login aan de dienst van de Auteur van AEM as a Cloud Service als Beheerder van AEM

  2. Navigeer aan Hulpmiddelen > Assets > de Profielen van de Verwerking

  3. creeer nieuw, of geef en bestaand uit, het Profiel van de Verwerking

  4. Tik het Eigen lusje, en de Tik voeg Nieuw toe

  5. De nieuwe service definiëren

    • creeer de Vertoning van Meta-gegevens: Wissel aan actief

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

      • Dit is URL aan de worker die tijdens wordt verkregen steltof het gebruiken van het bevel aio app get-url op. Zorg ervoor dat de URL-punten zich op de juiste werkruimte bevinden, op basis van de AEM as a Cloud Service-omgeving.
    • Parameters van de Dienst

      • Tik voeg Parameter toe

        • Sleutel: colorFamily
        • Waarde: pantone
          • Ondersteunde waarden: basic, hex, html, ntc, pantone, roygbiv
    • MIME Types

      • omvat: image/jpeg, image/png, image/gif, image/svg
        • Dit zijn de enige MIME types die door de derde npm modules worden gesteund die worden gebruikt om de kleuren af te leiden.
      • sluit uit: Leave blank
  6. Tik sparen in het hoogste recht

  7. Verwerkingsprofiel toepassen op een AEM Assets-map als dit nog niet is gebeurd

Metagegevensschema bijwerken metadata-schema

Als u de metagegevens van kleuren wilt bekijken, wijst u twee nieuwe velden in het metagegevensschema van de afbeelding toe aan de nieuwe eigenschappen van de metagegevens die de worker vult.

Metadataschema

  1. In de dienst van de Auteur van AEM, navigeer aan Hulpmiddelen > Assets > de Schema's van Meta-gegevens

  2. Navigeer in gebrek en selecteer en geef beeld uit en voeg read-only vormgebieden toe om de geproduceerde kleurenmeta-gegevens bloot te stellen

  3. Voeg a Enige Tekst van de Lijn toe

    • Etiket van het Gebied: Colors Family
    • Kaart aan bezit: ./jcr:content/metadata/wknd:colorsFamily
    • Regels > Gebied > onbruikbaar maken geeft uit: Gecontroleerd
  4. Voeg a Meerdere Tekst van de Waarde toe

    • Etiket van het Gebied: Colors
    • Kaart aan bezit: ./jcr:content/metadata/wknd:colors
  5. Tik sparen in het hoogste recht

Bezig met verwerken van elementen

Details van Activa

  1. In de dienst van de Auteur van AEM, navigeer aan Assets > Dossiers
  2. Navigeer naar de map (of submap) waarop het verwerkingsprofiel is toegepast
  3. Upload een nieuw beeld (JPEG, PNG, GIF of SVG) aan de omslag, of verwerk bestaande beelden opnieuw gebruikend het bijgewerkte Profiel van de Verwerking
  4. Wanneer de verwerking volledig is, selecteer de activa, en tik eigenschappen in de hoogste actiebar om zijn meta-gegevens te tonen
  5. Herzie Colors Family en Colors meta-gegevensgebiedenvoor de meta-gegevens die terug van de de meta-gegevensarbeider van douaneAsset Compute worden geschreven.

Met de kleurenmeta-gegevens die aan de meta-gegevens van de activa worden geschreven, op het [dam:Asset]/jcr:content/metadata middel, wordt deze meta-gegevens geïndexeerd verhoogde activa ontdekken-capaciteit gebruikend deze termijnen via onderzoek, en zij kunnen zelfs aan het binaire getal van de activa worden geschreven als toen DAM het 2} werkschema van Meta-gegevens Writeback {op het wordt aangehaald.

Metagegevensuitvoering in AEM Assets

dossier van de meta-gegevensvertoning van AEM Assets

Het XMP-bestand dat daadwerkelijk door de Asset Compute-metagegevensworker wordt gegenereerd, wordt ook opgeslagen als een aparte uitvoering op het element. Dit bestand wordt over het algemeen niet gebruikt, maar de toegepaste waarden op het metagegevensknooppunt van het element worden gebruikt, maar de onbewerkte XML-uitvoer van de worker is beschikbaar in AEM.

metadata-colors worker code on Github

De laatste metadata-colors/index.js is beschikbaar op Github op:

De laatste test/asset-compute/metadata-colors testsuite is beschikbaar op Github op:

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