Desarrollo de un trabajador de metadatos de Asset compute
Los trabajadores de Asset compute XMP AEM personalizadas pueden producir datos (XML) de la que se envían de vuelta a los recursos y se almacenan como metadatos en un recurso.
Los casos de uso comunes incluyen:
- Integraciones con sistemas de terceros, como un PIM (sistema de administración de información del producto), donde se deben recuperar y almacenar metadatos adicionales en el recurso
- Integraciones con servicios de Adobe, como contenido e IA de Commerce, para aumentar los metadatos de los recursos con atributos de aprendizaje automático adicionales
- Obtener metadatos sobre el recurso a partir de su binario y almacenarlos como metadatos de recurso en AEM as a Cloud Service
Qué va a hacer
En este tutorial crearemos un asistente de metadatos de Asset compute AEM que deriva los colores más utilizados en un recurso de imagen y escribe los nombres de los colores de nuevo en los metadatos del recurso en el formato de metadatos. Aunque el propio trabajador es básico, este tutorial lo utiliza para explorar cómo se pueden utilizar los trabajadores de Assets computes para escribir metadatos en los recursos de AEM as a Cloud Service.
Flujo lógico de una invocación del trabajador de metadatos de Asset compute
La invocación de los trabajadores de metadatos de Asset compute XMP es casi idéntica a la de los trabajadores que generan la representación binaria, con la diferencia principal de que el tipo de valor devuelto es una representación de tipo de datos (XML) cuyos valores también se escriben en los metadatos del recurso.
Los trabajadores de asset compute implementan el contrato de API de trabajo del SDK de Asset compute, en la función renditionCallback(...)
, que conceptualmente es:
- AEM Entrada: Parámetros binarios y de perfil de procesamiento originales de un recurso de la lista de distribución
- XMP AEM Resultado: Una representación de tipo (XML) persistió en el recurso en forma de representación y en los metadatos del recurso.
- El servicio de creación de la Asset compute invoca al trabajador de metadatos de la AEM, proporcionando el binario original (1a) del recurso y (1b) cualquier parámetro definido en el perfil de procesamiento.
- El SDK de Asset compute organiza la ejecución de la función
renditionCallback(...)
del trabajador de metadatos de Asset compute XMP personalizado, derivando una representación de (XML), basada en el binario (1a) del recurso y en cualquier parámetro del perfil de procesamiento (1b). - El trabajador de la Asset compute XMP guarda la representación de la (XML) en
rendition.path
. - Los datos (XML) de la Asset compute AEM escritos en
rendition.path
se transportan a través del SDK de la XMP al servicio de autor de la publicación y se exponen como (4a) una representación de texto y (4b) persistieron en el nodo de metadatos del recurso.
Configuración de manifest.yml manifest
Todos los trabajadores de Asset compute deben estar registrados en manifest.yml.
Abra manifest.yml
del proyecto y agregue una entrada de trabajo que configure el nuevo trabajador, en este caso metadata-colors
.
Recuerde que .yml
distingue entre espacios en blanco.
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
señala a la implementación de trabajador creada en el siguiente paso. Asigne un nombre semántico a los trabajadores (por ejemplo, actions/worker/index.js
podría haberse denominado mejor actions/rendition-circle/index.js
), tal como se muestra en la URL del trabajador y también determine el nombre de la carpeta del grupo de pruebas de worker.
limits
y require-adobe-auth
se configuran de forma discreta por trabajador. En este trabajador, se asigna 512 MB
de memoria a medida que el código inspecciona (potencialmente) datos de imágenes binarias grandes. Los otros limits
se han eliminado para utilizar los valores predeterminados.
Desarrollo de un trabajador de metadatos metadata-worker
Cree un nuevo archivo JavaScript de trabajo de metadatos en el proyecto de Asset compute en la ruta manifest.yml definido para el nuevo trabajador, en /actions/metadata-colors/index.js
Instalación de módulos npm
Instale los módulos npm adicionales (@adobe/asset-compute-xmp, get-image-colors y color-namer) que se utilizan en este trabajador de Asset compute.
$ npm install @adobe/asset-compute-xmp
$ npm install get-image-colors
$ npm install color-namer
Código de trabajo de metadatos
XMP AEM Este trabajador tiene un aspecto muy similar al trabajador que genera la representación, la diferencia principal es que escribe datos (XML) en el rendition.path
para que se vuelvan a guardar en el.
"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; }
}
Ejecute el trabajador de metadatos localmente development-tool
Una vez completado el código de trabajo, se puede ejecutar mediante la herramienta de desarrollo de Assets computes local.
Debido a que nuestro proyecto de Asset compute contiene dos empleados (la representación circular anterior y este metadata-colors
), la definición de perfil Herramienta de desarrollo de Asset compute enumera los perfiles de ejecución de ambos. La segunda definición de perfil apunta al nuevo trabajador metadata-colors
.
-
Desde la raíz del proyecto de Asset compute
-
Ejecutar
aio app run
para iniciar la herramienta de desarrollo de Asset compute -
En la lista desplegable Seleccionar un archivo…, elija una imagen de muestra para procesar
-
XMP En la segunda configuración de definición de perfil, que apunta al trabajador
metadata-colors
, actualice"name": "rendition.xml"
a medida que este trabajador genere una representación de (XML). Opcionalmente, agregue un parámetrocolorsFamily
(valores compatiblesbasic
,hex
,html
,ntc
,pantone
,roygbiv
).code language-json { "renditions": [ { "worker": "...", "name": "rendition.xml", "colorsFamily": "pantone" } ] }
-
Pulse Ejecutar y espere a que se genere la representación XML
- Dado que ambos trabajadores se enumeran en la definición del perfil, se generarán ambas representaciones. Opcionalmente, se puede eliminar la definición del perfil superior que señala al trabajador de representación circular para evitar ejecutarlo desde la herramienta de desarrollo.
-
La sección Representaciones obtiene una vista previa de la representación generada. Pulse
rendition.xml
para descargarlo y ábralo en VS Code (o su editor de texto/XML favorito) para revisarlo.
Prueba del trabajador test
Los trabajadores de metadatos se pueden probar con el mismo marco de pruebas de Asset compute que las representaciones binarias. XMP La única diferencia es que el archivo rendition.xxx
en el caso de prueba debe ser la representación esperada de los archivos de datos (XML) de los archivos de datos (XML).
-
Cree la siguiente estructura en el proyecto de Asset compute:
code language-none /test/asset-compute/metadata-colors/success-pantone/ file.jpg params.json rendition.xml
-
Use el archivo de muestra como
file.jpg
del caso de prueba. -
Agregue el siguiente JSON a
params.json
.code language-none { "fmt": "xml", "colorsFamily": "pantone" }
Tenga en cuenta que
"fmt": "xml"
es necesario para indicar al grupo de pruebas que genere una representación basada en texto de.xml
. -
Proporcione el XML esperado en el archivo
rendition.xml
. Esto se puede obtener mediante:- Ejecutar el archivo de entrada de prueba mediante la herramienta de desarrollo y guardar la representación XML (validada).
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>
-
Ejecute
aio app test
desde la raíz del proyecto de Asset compute para ejecutar todos los grupos de pruebas.
Implementación del trabajador en Adobe I/O Runtime deploy
Para invocar este nuevo trabajador de metadatos desde AEM Assets, debe implementarse en Adobe I/O Runtime mediante el comando:
$ aio app deploy
Tenga en cuenta que esto implementará todos los trabajadores del proyecto. Revise las instrucciones de implementación sin abreviar para ver cómo implementar en los espacios de trabajo de ensayo y producción.
AEM Integración con Perfiles de procesamiento de processing-profile
AEM Invoque el trabajador desde la creación de un nuevo servicio de perfil de procesamiento personalizado, o modifique uno existente, que invoque este trabajador implementado.
-
Inicie sesión en el servicio de AEM as a Cloud Service AEM Author como Administrador de la aplicación
-
Vaya a Herramientas > Assets > Perfiles de procesamiento
-
Crear un nuevo perfil de procesamiento o editar y uno existente
-
Pulse la pestaña Personalizar y luego pulse Agregar nuevo
-
Defina el nuevo servicio
-
Crear representación de metadatos: cambiar a activo
-
Punto final:
https://...adobeioruntime.net/api/v1/web/wkndAemAssetCompute-0.0.1/metadata-colors
- Dirección URL del trabajador obtenida durante la implementación o mediante el comando
aio app get-url
. Asegúrese de que la dirección URL apunta al espacio de trabajo correcto en función del entorno de AEM as a Cloud Service.
- Dirección URL del trabajador obtenida durante la implementación o mediante el comando
-
Parámetros de servicio
-
Pulse Agregar parámetro
- Clave:
colorFamily
- Valor:
pantone
- Valores compatibles:
basic
,hex
,html
,ntc
,pantone
,roygbiv
- Valores compatibles:
- Clave:
-
-
Tipos MIME
- Incluye:
image/jpeg
,image/png
,image/gif
,image/svg
- Estos son los únicos tipos MIME admitidos por los módulos npm de terceros utilizados para derivar los colores.
- Exclusiones:
Leave blank
- Incluye:
-
-
Pulse Guardar en la parte superior derecha
-
Aplicar el perfil de procesamiento a una carpeta de AEM Assets si aún no lo ha hecho
Actualizar el esquema de metadatos metadata-schema
Para revisar los metadatos de colores, asigne dos nuevos campos del esquema de metadatos de la imagen a las nuevas propiedades de datos de metadatos que rellena el trabajador.
-
AEM En el servicio de autor de la, vaya a Herramientas > Assets > Esquemas de metadatos
-
Vaya a default, seleccione y edite image, y agregue campos de formulario de solo lectura para exponer los metadatos de color generados
-
Agregar texto de una sola línea
- Etiqueta de campo:
Colors Family
- Asignar a propiedad:
./jcr:content/metadata/wknd:colorsFamily
- Reglas > Campo > Deshabilitar edición: Comprobado
- Etiqueta de campo:
-
Agregar texto con varios valores
- Etiqueta de campo:
Colors
- Asignar a propiedad:
./jcr:content/metadata/wknd:colors
- Etiqueta de campo:
-
Pulse Guardar en la parte superior derecha
Procesando recursos
- AEM En el servicio de autor de la, vaya a Assets > Archivos
- Vaya a la carpeta o subcarpeta a la que se aplica el perfil de procesamiento
- Cargue una nueva imagen (JPEG, PNG, GIF o SVG) en la carpeta, o vuelva a procesar las imágenes existentes usando el Perfil de procesamiento actualizado
- Cuando finalice el procesamiento, seleccione el recurso y pulse propiedades en la barra de acciones superior para mostrar sus metadatos
- Revise los
Colors Family
yColors
campos de metadatos para los metadatos escritos desde el trabajador de metadatos de Asset compute personalizado.
Con los metadatos de color escritos en los metadatos del recurso, en el recurso [dam:Asset]/jcr:content/metadata
, estos metadatos se indexan con una mayor capacidad de detección de recursos mediante estos términos mediante la búsqueda, y se pueden volver a escribir en el archivo binario del recurso si, después, se invoca el flujo de trabajo DAM Metadata Writeback en él.
Representación de metadatos en AEM Assets
XMP El archivo de datos generado por el trabajador de metadatos de Asset compute también se almacena como una representación discreta en el recurso. AEM Este archivo no se utiliza generalmente, sino que se utilizan los valores aplicados al nodo de metadatos del recurso, pero la salida XML sin procesar del trabajador está disponible en el modo de ejecución de la.
código de trabajo metadata-colors en Github
El metadata-colors/index.js
final está disponible en Github en:
El grupo de pruebas test/asset-compute/metadata-colors
final está disponible en Github en: