Logotipo de Zephyrnet

Cree un motor de búsqueda de imágenes con Amazon Kendra y Amazon Rekognition

Fecha:

En esta publicación, discutimos una solución de aprendizaje automático (ML) para búsquedas de imágenes complejas usando amazona kendra y Reconocimiento de amazonas. Específicamente, usamos el ejemplo de diagramas de arquitectura para imágenes complejas debido a su incorporación de numerosos íconos visuales y texto diferentes.

Con Internet, buscar y obtener una imagen nunca ha sido tan fácil. La mayoría de las veces, puede ubicar con precisión las imágenes deseadas, como buscar su próximo destino de escapada de vacaciones. Las búsquedas simples suelen tener éxito porque no están asociadas con muchas características. Más allá de las características deseadas de la imagen, los criterios de búsqueda normalmente no requieren detalles significativos para ubicar el resultado requerido. Por ejemplo, si un usuario intenta buscar un tipo específico de botella azul, se mostrarán resultados de muchos tipos diferentes de botellas azules. Sin embargo, es posible que la botella azul deseada no se encuentre fácilmente debido a los términos de búsqueda genéricos.

La interpretación del contexto de búsqueda también contribuye a la simplificación de los resultados. Cuando los usuarios tienen en mente una imagen deseada, intentan enmarcarla en una consulta de búsqueda basada en texto. Comprender los matices entre las consultas de búsqueda de temas similares es importante para proporcionar resultados relevantes y minimizar el esfuerzo requerido por parte del usuario para clasificar manualmente los resultados. Por ejemplo, la consulta de búsqueda "El dueño del perro juega a buscar" busca obtener resultados de imágenes que muestren al dueño de un perro jugando a buscarlo con un perro. Sin embargo, los resultados reales generados pueden centrarse en cambio en un perro que busca un objeto sin mostrar la participación del propietario. Es posible que los usuarios tengan que filtrar manualmente los resultados de imágenes inadecuados cuando se trata de búsquedas complejas.

Para abordar los problemas asociados con las búsquedas complejas, esta publicación describe en detalle cómo puede lograr un motor de búsqueda que sea capaz de buscar imágenes complejas mediante la integración de Amazon Kendra y Amazon Rekognition. Amazon Kendra es un servicio de búsqueda inteligente con tecnología de ML y Amazon Rekognition es un servicio de ML que puede identificar objetos, personas, texto, escenas y actividades a partir de imágenes o videos.

¿Qué imágenes pueden ser demasiado complejas para que se puedan buscar? Un ejemplo son los diagramas de arquitectura, que se pueden asociar con muchos criterios de búsqueda según la complejidad del caso de uso y la cantidad de servicios técnicos requeridos, lo que resulta en un esfuerzo de búsqueda manual significativo para el usuario. Por ejemplo, si los usuarios desean encontrar una solución de arquitectura para el caso de uso de la verificación del cliente, normalmente utilizarán una consulta de búsqueda similar a "Diagramas de arquitectura para la verificación del cliente". Sin embargo, las consultas de búsqueda genéricas abarcarían una amplia gama de servicios y en diferentes fechas de creación de contenido. Los usuarios tendrían que seleccionar manualmente candidatos arquitectónicos adecuados en función de servicios específicos y considerar la relevancia de las opciones de diseño de arquitectura según la fecha de creación del contenido y la fecha de consulta.

La siguiente figura muestra un diagrama de ejemplo que ilustra una solución de arquitectura orquestada de extracción, transformación y carga (ETL).

Para los usuarios que no están familiarizados con las ofertas de servicios que se brindan en la plataforma en la nube, pueden proporcionar diferentes formas y descripciones genéricas al buscar dicho diagrama. Los siguientes son algunos ejemplos de cómo se podría buscar:

  • “Orquestar el flujo de trabajo de ETL”
  • “Cómo automatizar el procesamiento masivo de datos”
  • “Métodos para crear un pipeline de transformación de datos”

Resumen de la solución

Le guiamos a través de los siguientes pasos para implementar la solución:

  1. Entrenar un Etiquetas personalizadas de Amazon Rekognition modelo para reconocer símbolos en diagramas de arquitectura.
  2. Incorpore la detección de texto de Amazon Rekognition para validar los símbolos de los diagramas de arquitectura.
  3. Use Amazon Rekognition dentro de un rastreador web para crear un repositorio para realizar búsquedas
  4. Utilice Amazon Kendra para buscar en el repositorio.

Para proporcionar fácilmente a los usuarios un gran repositorio de resultados relevantes, la solución debe proporcionar una forma automatizada de búsqueda a través de fuentes confiables. Usando diagramas de arquitectura como ejemplo, la solución necesita buscar diagramas de arquitectura a través de enlaces de referencia y documentos técnicos e identificar los servicios presentes. La identificación de palabras clave como casos de uso y verticales de la industria en estas fuentes también permite capturar la información y mostrar al usuario resultados de búsqueda más relevantes.

Teniendo en cuenta el objetivo de cómo se deben buscar los diagramas relevantes, la solución de búsqueda de imágenes debe cumplir tres criterios:

  • Habilitar la búsqueda simple de palabras clave
  • Interpretar las consultas de búsqueda en función de los casos de uso que proporcionan los usuarios
  • Ordenar y ordenar los resultados de la búsqueda

La búsqueda de palabras clave es simplemente buscar "Amazon Rekognition" y mostrar diagramas de arquitectura sobre cómo se usa el servicio en diferentes casos de uso. Alternativamente, los términos de búsqueda se pueden vincular indirectamente al diagrama a través de casos de uso y verticales de la industria que se pueden asociar con la arquitectura. Por ejemplo, la búsqueda de los términos "Cómo organizar la canalización de ETL" arroja resultados de diagramas de arquitectura creados con Pegamento AWS y Funciones de paso de AWS. Clasificar y ordenar los resultados de la búsqueda en función de atributos como la fecha de creación garantizaría que los diagramas de arquitectura sigan siendo relevantes a pesar de las actualizaciones y versiones del servicio. La siguiente figura muestra el diagrama de arquitectura de la solución de búsqueda de imágenes.

Como se ilustra en el diagrama anterior y en la descripción general de la solución, hay dos aspectos principales de la solución. El primer aspecto lo realiza Amazon Rekognition, que puede identificar objetos, personas, texto, escenas y actividades a partir de imágenes o videos. Consiste en modelos preentrenados que se pueden aplicar para analizar imágenes y videos a escala. Con su función de etiquetas personalizadas, Amazon Rekognition le permite adaptar el servicio de ML a sus necesidades comerciales específicas mediante el etiquetado de imágenes recopiladas desde fuentes a través de diagramas de arquitectura en enlaces de referencia confiables y documentos técnicos. Al cargar un pequeño conjunto de imágenes de entrenamiento, Amazon Rekognition carga e inspecciona automáticamente los datos de entrenamiento, selecciona los algoritmos de ML correctos, entrena un modelo y proporciona métricas de rendimiento del modelo. Por lo tanto, los usuarios sin experiencia en ML pueden disfrutar de los beneficios de un modelo de etiquetas personalizadas a través de una llamada API, ya que se reduce una cantidad significativa de gastos generales. La solución aplica etiquetas personalizadas de Amazon Rekognition para detectar logotipos de servicios de AWS en diagramas de arquitectura para permitir que los diagramas de arquitectura se puedan buscar con nombres de servicios. Después del modelado, los servicios detectados de cada imagen del diagrama de arquitectura y sus metadatos, como el origen de la URL y el título de la imagen, se indexan para futuras búsquedas y se almacenan en Amazon DynamoDB, una base de datos NoSQL de clave-valor totalmente administrada, sin servidor, diseñada para ejecutar aplicaciones de alto rendimiento.

El segundo aspecto es compatible con Amazon Kendra, un servicio de búsqueda empresarial inteligente impulsado por ML que le permite buscar en diferentes repositorios de contenido. Con Amazon Kendra, puede buscar resultados, como imágenes o documentos, que se hayan indexado. Estos resultados también se pueden almacenar en diferentes repositorios porque el servicio de búsqueda emplea conectores integrados. Se pueden usar palabras clave, frases y descripciones para la búsqueda, lo que le permite buscar con precisión diagramas relacionados con un caso de uso particular. Por lo tanto, puede crear fácilmente un servicio de búsqueda inteligente con costos de desarrollo mínimos.

Con una comprensión del problema y la solución, las secciones siguientes se sumergen en cómo automatizar el abastecimiento de datos a través del rastreo de diagramas de arquitectura de fuentes confiables. A continuación, recorremos el proceso de generación de un modelo de ML de etiquetas personalizadas con un servicio completamente administrado. Por último, cubrimos la ingesta de datos por un servicio de búsqueda inteligente, impulsado por ML.

Cree un modelo de Amazon Rekognition con etiquetas personalizadas

Antes de obtener cualquier diagrama de arquitectura, necesitamos una herramienta para evaluar si una imagen se puede identificar como un diagrama de arquitectura. Las etiquetas personalizadas de Amazon Rekognition proporcionan un proceso simplificado para crear un modelo de reconocimiento de imágenes que identifica objetos y escenas en imágenes que son específicas para una necesidad comercial. En este caso, usamos las etiquetas personalizadas de Amazon Rekognition para identificar los íconos de los servicios de AWS, luego las imágenes se indexan con los servicios para una búsqueda más relevante con Amazon Kendra. Este modelo no diferencia si una imagen es un diagrama de arquitectura o no; simplemente identifica los iconos de servicio, si los hay. Como tal, puede haber instancias en las que las imágenes que no son diagramas de arquitectura terminen en los resultados de búsqueda. Sin embargo, tales resultados son mínimos.

La siguiente figura muestra los pasos que sigue esta solución para crear un modelo de etiquetas personalizadas de Amazon Rekognition.

Este proceso implica cargar los conjuntos de datos, generar un archivo de manifiesto que haga referencia a los conjuntos de datos cargados y luego cargar este archivo de manifiesto en Amazon Rekognition. Se utiliza una secuencia de comandos de Python para ayudar en el proceso de cargar los conjuntos de datos y generar el archivo de manifiesto. Una vez que se genera correctamente el archivo de manifiesto, se carga en Amazon Rekognition para comenzar el proceso de capacitación del modelo. Para obtener detalles sobre el script de Python y cómo ejecutarlo, consulte el Repositorio GitHub.

Para entrenar el modelo, en el proyecto de Amazon Rekognition, elija Modelo de tren, seleccione el proyecto que desea entrenar, luego agregue cualquier etiqueta relevante y elija Modelo de tren. Para obtener instrucciones sobre cómo iniciar un proyecto de etiquetas personalizadas de Amazon Rekognition, consulte el tutoriales en vídeo. El modelo puede tardar hasta 8 horas en entrenarse con este conjunto de datos.

Cuando finalice el entrenamiento, puede elegir el modelo entrenado para ver los resultados de la evaluación. Para obtener más detalles sobre las diferentes métricas, como precisión, recuperación y F1, consulte Métricas para evaluar tu modelo. Para usar el modelo, vaya a la Modelo de uso tab, deje el número de unidades de inferencia en 1 e inicie el modelo. Entonces podemos usar un AWS Lambda función para enviar imágenes al modelo en base64, y el modelo devuelve una lista de etiquetas y puntuaciones de confianza.

Después de entrenar con éxito un modelo de Amazon Rekognition con etiquetas personalizadas de Amazon Rekognition, podemos usarlo para identificar íconos de servicio en los diagramas de arquitectura que se han rastreado. Para aumentar la precisión de la identificación de servicios en el diagrama de arquitectura, utilizamos otra característica de Amazon Rekognition llamada detección de texto. Para usar esta función, pasamos la misma imagen en base64 y Amazon Rekognition devuelve la lista de texto identificado en la imagen. En las siguientes figuras, comparamos la imagen original y su apariencia después de identificar los servicios en la imagen. La primera figura muestra la imagen original.

La siguiente figura muestra la imagen original con los servicios detectados.

Para garantizar la escalabilidad, usamos una función Lambda, que se expondrá a través de un punto final de API creado con Puerta de enlace API de Amazon. Lambda es un servicio informático basado en eventos y sin servidor que le permite ejecutar código para prácticamente cualquier tipo de aplicación o servicio de back-end sin aprovisionar ni administrar servidores. El uso de una función de Lambda elimina una preocupación común sobre la ampliación cuando se realizan grandes volúmenes de solicitudes al extremo de la API. Lambda ejecuta automáticamente la función para la llamada API específica, que se detiene cuando se completa la invocación, lo que reduce el costo incurrido por el usuario. Debido a que la solicitud se dirigiría al punto de enlace de Amazon Rekognition, no es suficiente que solo la función Lambda sea escalable. Para que el punto de enlace de Amazon Rekognition sea escalable, puede aumentar la unidad de inferencia del punto de enlace. Para obtener más detalles sobre la configuración de la unidad de inferencia, consulte Unidades de inferencia.

El siguiente es un fragmento de código de la función Lambda para el proceso de reconocimiento de imágenes:

const AWS = require("aws-sdk");
const axios = require("axios"); // API to retrieve information about individual services
const SERVICE_API = process.env.SERVICE_API;
// ARN of Amazon Rekognition model
const MODEL_ARN = process.env.MODEL_ARN; const rekognition = new AWS.Rekognition(); exports.handler = async (event) => { const body = JSON.parse(event["body"]); let base64Binary = ""; // Checks if the payload contains a url to the image or the image in base64 if (body.url) { const base64Res = await new Promise((resolve) => { axios .get(body.url, { responseType: "arraybuffer", }) .then((response) => { resolve(Buffer.from(response.data, "binary").toString("base64")); }); }); base64Binary = new Buffer.from(base64Res, "base64"); } else if (body.byte) { const base64Cleaned = body.byte.split("base64,")[1]; base64Binary = new Buffer.from(base64Cleaned, "base64"); } // Pass the contents through the trained Custom Labels model and text detection const [labels, text] = await Promise.all([ detectLabels(rekognition, base64Binary, MODEL_ARN), detectText(rekognition, base64Binary), ]); const texts = text.TextDetections.map((text) => ({ DetectedText: text.DetectedText, ParentId: text.ParentId, })); // Compare between overlapping labels and retain the label with the highest confidence let filteredLabels = removeOverlappingLabels(labels); // Sort all the labels from most to least confident filteredLabels = sortByConfidence(filteredLabels); // Remove duplicate services in the list const services = retrieveUniqueServices(filteredLabels, texts); // Pass each service into the reference document API to retrieve the URL to the documentation const refLinks = await getReferenceLinks(services); var responseBody = { labels: filteredLabels, text: texts, ref_links: refLinks, }; console.log("Response: ", response_body); const response = { statusCode: 200, headers: { "Access-Control-Allow-Origin": "*", // Required for CORS to work }, body: JSON.stringify(responseBody), }; return response;
}; // Code removed to truncate section

Después de crear la función Lambda, podemos proceder a exponerla como una API mediante API Gateway. Para obtener instrucciones sobre cómo crear una API con integración de proxy Lambda, consulte Tutorial: Cree una API REST Hello World con integración de proxy Lambda.

Rastrear los diagramas de arquitectura

Para que la función de búsqueda funcione de manera factible, necesitamos un repositorio de diagramas de arquitectura. Sin embargo, estos diagramas deben provenir de fuentes confiables como Blog de AWS y Guía prescriptiva de AWS. Establecer la credibilidad de las fuentes de datos garantiza que la implementación subyacente y el propósito de los casos de uso sean precisos y bien examinados. El siguiente paso es configurar un rastreador que pueda ayudar a recopilar muchos diagramas de arquitectura para alimentar nuestro repositorio. Creamos un rastreador web para extraer diagramas de arquitectura e información como una descripción de la implementación de las fuentes relevantes. Hay varias formas de lograr construir dicho mecanismo; para este ejemplo, usamos un programa que se ejecuta en Nube informática elástica de Amazon (Amazon EC2). El programa primero obtiene enlaces a publicaciones de blog desde una API de blog de AWS. La respuesta devuelta por la API contiene información de la publicación, como el título, la URL, la fecha y los enlaces a las imágenes que se encuentran en la publicación.

El siguiente es un fragmento de código de la función de JavaScript para el proceso de rastreo web:

import axios from "axios";
import puppeteer from "puppeteer";
import { putItemDDB, identifyImageHighConfidence, getReferenceList,
} from "./utils.js"; /** Global variables */
const blogPostsApi = process.env.BLOG_POSTS_API;
const IMAGE_URL_PATTERN = "<pattern in the url that identified as link to image>";
const DDB_Table = process.env.DDB_Table; // Function that retrieves URLs of records from a public API
function getURLs(blogPostsApi) { // Return a list of URLs return axios .get(blogPostsApi) .then((response) => { var data = response.data.items; console.log("RESPONSE:"); const blogLists = data.map((blog) => [ blog.item.additionalFields.link, blog.item.dateUpdated, ]); return blogLists; }) .catch((error) => console.error(error));
} // Function that crawls content of individual URLs
async function crawlFromUrl(urls) { const browser = await puppeteer.launch({ executablePath: "/usr/bin/chromium-browser", }); // const browser = await puppeteer.launch(); const page = await browser.newPage(); let numOfValidArchUrls = 0; for (let index = 0; index < urls.length; index++) { console.log("index: ", index); let blogURL = urls[index][0]; let dateUpdated = urls[index][1]; await page.goto(blogURL); console.log("blogUrl:", blogURL); console.log("date:", dateUpdated); // Identify and get image from post based on URL pattern const images = await page.evaluate(() => Array.from(document.images, (e) => e.src) ); const filter1 = images.filter((img) => img.includes(IMAGE_URL_PATTERN)); console.log("all images:", filter1); // Validate if image is an architecture diagram for (let index_1 = 0; index_1 < filter1.length; index_1++) { const imageUrl = filter1[index_1]; const rekog = await identifyImageHighConfidence(imageUrl); if (rekog) { if (rekog.labels.size >= 2) { console.log("Rekog.labels.size = ", rekog.labels.size); console.log("Selected image url = ", imageUrl); let articleSection = []; let metadata = await page.$$('span[property="articleSection"]'); for (let i = 0; i < metadata.length; i++) { const element = metadata[i]; const value = await element.evaluate( (el) => el.textContent, element ); console.log("value: ", value); articleSection.push(value); } const title = await page.title(); const allRefLinks = await getReferenceList( rekog.labels, rekog.textServices ); numOfValidArchUrls = numOfValidArchUrls + 1; putItemDDB( blogURL, dateUpdated, imageUrl, articleSection.toString(), rekog, { L: allRefLinks }, title, DDB_Table ); console.log("numOfValidArchUrls = ", numOfValidArchUrls); } } if (rekog && rekog.labels.size >= 2) { break; } } } console.log("valid arch : ", numOfValidArchUrls); await browser.close();
} async function startCrawl() { // Get a list of URLs // Extract architecture image from those URLs const urls = await getURLs(blogPostsApi); if (urls) console.log("Crawling urls completed"); else { console.log("Unable to crawl images"); return; } await crawlFromUrl(urls);
} startCrawl();

Con este mecanismo, podemos rastrear fácilmente cientos y miles de imágenes de diferentes blogs. Sin embargo, necesitamos un filtro que solo acepte imágenes que contengan contenido de un diagrama de arquitectura, que en nuestro caso son iconos de servicios de AWS, para filtrar imágenes que no sean diagramas de arquitectura.

Este es el propósito de nuestro modelo de Amazon Rekognition. Los diagramas pasan por el proceso de reconocimiento de imágenes, que identifica los íconos de servicio y determina si podría considerarse como un diagrama de arquitectura válido.

El siguiente es un fragmento de código de la función que envía imágenes al modelo de Amazon Rekognition:

import axios from "axios";
import AWS from "aws-sdk"; // Configuration
AWS.config.update({ region: process.env.REGION }); /** Global variables */
// API to identify images
const LABEL_API = process.env.LABEL_API;
// API to get relevant documentations of individual services
const DOCUMENTATION_API = process.env.DOCUMENTATION_API;
// Create the DynamoDB service object
const dynamoDB = new AWS.DynamoDB({ apiVersion: "2012-08-10" }); // Function to identify image using an API that calls Amazon Rekognition model
function identifyImageHighConfidence(image_url) { return axios .post(LABEL_API, { url: image_url, }) .then((res) => { let data = res.data; let rekogLabels = new Set(); let rekogTextServices = new Set(); let rekogTextMetadata = new Set(); data.labels.forEach((element) => { if (element.Confidence >= 40) rekogLabels.add(element.Name); }); data.text.forEach((element) => { if ( element.DetectedText.includes("AWS") || element.DetectedText.includes("Amazon") ) { rekogTextServices.add(element.DetectedText); } else { rekogTextMetadata.add(element.DetectedText); } }); rekogTextServices.delete("AWS"); rekogTextServices.delete("Amazon"); return { labels: rekogLabels, textServices: rekogTextServices, textMetadata: Array.from(rekogTextMetadata).join(", "), }; }) .catch((error) => console.error(error));
}

Después de pasar la verificación de reconocimiento de imágenes, los resultados devueltos por el modelo de Amazon Rekognition y la información relevante se agrupan en sus propios metadatos. Luego, los metadatos se almacenan en una tabla de DynamoDB donde el registro se usaría para ingerir en Amazon Kendra.

El siguiente es un fragmento de código de la función que almacena los metadatos del diagrama en DynamoDB:

// Code removed to truncate section // Function that PUTS item into Amazon DynamoDB table
function putItemDDB( originUrl, publishDate, imageUrl, crawlerData, rekogData, referenceLinks, title, tableName
) { console.log("WRITE TO DDB"); console.log("originUrl : ", originUrl); console.log("publishDate: ", publishDate); console.log("imageUrl: ", imageUrl); let write_params = { TableName: tableName, Item: { OriginURL: { S: originUrl }, PublishDate: { S: formatDate(publishDate) }, ArchitectureURL: { S: imageUrl, }, Metadata: { M: { crawler: { S: crawlerData, }, Rekognition: { M: { labels: { S: Array.from(rekogData.labels).join(", "), }, textServices: { S: Array.from(rekogData.textServices).join(", "), }, textMetadata: { S: rekogData.textMetadata, }, }, }, }, }, Reference: referenceLinks, Title: { S: title, }, }, }; dynamoDB.putItem(write_params, function (err, data) { if (err) { console.log("*** DDB Error", err); } else { console.log("Successfuly inserted in DDB", data); } });
}

Ingerir metadatos en Amazon Kendra

Después de que los diagramas de arquitectura pasan por el proceso de reconocimiento de imágenes y los metadatos se almacenan en DynamoDB, necesitamos una forma de buscar los diagramas mientras se hace referencia al contenido de los metadatos. El enfoque para esto es tener un motor de búsqueda que pueda integrarse con la aplicación y pueda manejar una gran cantidad de consultas de búsqueda. Por lo tanto, utilizamos Amazon Kendra, un servicio de búsqueda empresarial inteligente.

Utilizamos Amazon Kendra como componente interactivo de la solución debido a sus poderosas capacidades de búsqueda, particularmente con el uso de lenguaje natural. Esto agrega una capa adicional de simplicidad cuando los usuarios buscan diagramas que se acerquen más a lo que están buscando. Amazon Kendra ofrece una serie de conectores de fuentes de datos para ingerir y conectar contenidos. Esta solución utiliza un conector personalizado para incorporar la información de los diagramas de arquitectura de DynamoDB. Para configurar una fuente de datos en un índice de Amazon Kendra, puede usar un índice existente o crear un nuevo índice.

Los diagramas rastreados luego deben incorporarse al índice de Amazon Kendra que se ha creado. La siguiente figura muestra el flujo de cómo se indexan los diagramas.

Primero, los diagramas insertados en DynamoDB crean un evento Put a través de Secuencias de Amazon DynamoDB. El evento activa la función Lambda que actúa como una fuente de datos personalizada para Amazon Kendra y carga los diagramas en el índice. Para obtener instrucciones sobre cómo crear un disparador de DynamoDB Streams para una función de Lambda, consulte Tutorial: Uso de AWS Lambda con Amazon DynamoDB Streams

Después de integrar la función Lambda con DynamoDB, debemos ingerir los registros de los diagramas enviados a la función en el índice de Amazon Kendra. El índice acepta datos de varios tipos de fuentes, y la ingesta de elementos en el índice desde la función Lambda significa que tiene que usar la configuración de fuente de datos personalizada. Para obtener instrucciones sobre cómo crear una fuente de datos personalizada para su índice, consulte Conector de fuente de datos personalizado.

El siguiente es un fragmento de código de la función Lambda sobre cómo se puede indexar un diagrama de manera personalizada:

import json
import os
import boto3 KENDRA = boto3.client("kendra")
INDEX_ID = os.environ["INDEX_ID"]
DS_ID = os.environ["DS_ID"] def lambda_handler(event, context): dbRecords = event["Records"] # Loop through items from Amazon DynamoDB for row in dbRecords: rowData = row["dynamodb"]["NewImage"] originUrl = rowData["OriginURL"]["S"] publishedDate = rowData["PublishDate"]["S"] architectureUrl = rowData["ArchitectureURL"]["S"] title = rowData["Title"]["S"] metadata = rowData["Metadata"]["M"] crawlerMetadata = metadata["crawler"]["S"] rekognitionMetadata = metadata["Rekognition"]["M"] rekognitionLabels = rekognitionMetadata["labels"]["S"] rekognitionServices = rekognitionMetadata["textServices"]["S"] concatenatedText = ( f"{crawlerMetadata} {rekognitionLabels} {rekognitionServices}" ) add_document( dsId=DS_ID, indexId=INDEX_ID, originUrl=originUrl, architectureUrl=architectureUrl, title=title, publishedDate=publishedDate, text=concatenatedText, ) return # Function to add the diagram into Kendra index
def add_document(dsId, indexId, originUrl, architectureUrl, title, publishedDate, text): document = get_document( dsId, indexId, originUrl, architectureUrl, title, publishedDate, text ) documents = [document] result = KENDRA.batch_put_document(IndexId=indexId, Documents=documents) print("result:" + json.dumps(result)) return True # Frame the diagram into a document that Kendra accepts
def get_document(dsId, originUrl, architectureUrl, title, publishedDate, text): document = { "Id": originUrl, "Title": title, "Attributes": [ {"Key": "_data_source_id", "Value": {"StringValue": dsId}}, {"Key": "_source_uri", "Value": {"StringValue": architectureUrl}}, {"Key": "_created_at", "Value": {"DateValue": publishedDate}}, {"Key": "publish_date", "Value": {"DateValue": publishedDate}}, ], "Blob": text, } return document

El factor importante que permite buscar en los diagramas es la clave Blob en un documento. Esto es lo que analiza Amazon Kendra cuando los usuarios proporcionan su entrada de búsqueda. En este código de ejemplo, la clave Blob contiene una versión resumida del caso de uso del diagrama concatenado con la información detectada del proceso de reconocimiento de imágenes. Esto permite a los usuarios buscar diagramas de arquitectura basados ​​en casos de uso como "Detección de fraude" o por nombres de servicio como "Amazon Kendra".

Para ilustrar un ejemplo de cómo se ve la clave Blob, el siguiente fragmento hace referencia al diagrama ETL inicial que presentamos anteriormente en esta publicación. Contiene una descripción del diagrama que se obtuvo cuando se rastreó, así como los servicios que identificó el modelo de Amazon Rekognition.

{ ..., "Blob": "Build and orchestrate ETL pipelines using Amazon Athena and AWS Step Functions Amazon Athena, AWS Step Functions, Amazon S3, AWS Glue Data Catalog "
}

Buscar con Amazon Kendra

Después de unir todos los componentes, los resultados de una búsqueda de ejemplo de "análisis en tiempo real" se ven como la siguiente captura de pantalla.

Al buscar este caso de uso, produce diferentes diagramas de arquitectura. Los usuarios cuentan con estos diferentes métodos de la carga de trabajo específica que intentan implementar.

Limpiar

Complete los pasos de esta sección para limpiar los recursos que creó como parte de esta publicación:

  1. Eliminar la API:
    1. En la consola de API Gateway, seleccione la API que desea eliminar.
    2. En Acciones menú, seleccione Borrar.
    3. Elige Borrar para confirmar.
  2. Elimine la tabla de DynamoDB:
    1. En la consola DynamoDB, elija Mesas en el panel de navegación.
    2. Seleccione la tabla que creó y elija Borrar.
    3. Ingrese eliminar cuando se le solicite confirmación.
    4. Elige Eliminar tabla para confirmar.
  3. Eliminar el índice de Amazon Kendra:
    1. En la consola de Amazon Kendra, elija Índices en el panel de navegación.
    2. Seleccione el índice que creó y elija Borrar
    3. Introduzca un motivo cuando se le solicite confirmación.
    4. Elige Borrar para confirmar.
  4. Elimine el proyecto de Amazon Rekognition:
    1. En la consola de Amazon Rekognition, elija Usar etiquetas personalizadas en el panel de navegación, luego elija Proyectos.
    2. Seleccione el proyecto que creó y elija Borrar.
    3. Ingrese Eliminar cuando se le solicite confirmación.
    4. Elige Eliminar conjuntos de datos y modelos asociados para confirmar.
  5. Eliminar la función Lambda:
    1. En la consola de Lambda, seleccione la función que desea eliminar.
    2. En Acciones menú, seleccione Borrar.
    3. Ingrese Eliminar cuando se le solicite confirmación.
    4. Elige Borrar para confirmar.

Resumen

En esta publicación, mostramos un ejemplo de cómo puede buscar información de forma inteligente a partir de imágenes. Esto incluye el proceso de entrenamiento de un modelo de aprendizaje automático de Amazon Rekognition que actúa como filtro de imágenes, la automatización del rastreo de imágenes, lo que garantiza la credibilidad y la eficiencia, y la consulta de diagramas al adjuntar una fuente de datos personalizada que permite una forma más flexible de indexar elementos. . Para profundizar en la implementación de los códigos, consulte el Repositorio GitHub.

Ahora que sabe cómo proporcionar la columna vertebral de un repositorio de búsqueda centralizado para búsquedas complejas, intente crear su propio motor de búsqueda de imágenes. Para obtener más información sobre las funciones principales, consulte Introducción a las etiquetas personalizadas de Amazon Rekognition, Moderación de contenido, y la Guía para desarrolladores de Amazon Kendra. Si es nuevo en las etiquetas personalizadas de Amazon Rekognition, pruébelo con nuestra capa gratuita, que dura 3 meses e incluye 10 horas de capacitación gratuitas al mes y 4 horas de inferencia gratuitas al mes.


Acerca de los autores

ryan ver es arquitecto de soluciones en AWS. Con sede en Singapur, trabaja con los clientes para crear soluciones que resuelvan sus problemas comerciales, así como para adaptar una visión técnica para ayudar a ejecutar cargas de trabajo más escalables y eficientes en la nube.

James Ong Jia Xiang es gerente de soluciones para clientes en AWS. Se especializa en el Programa de aceleración de la migración (MAP), donde ayuda a los clientes y socios a implementar con éxito programas de migración a gran escala a AWS. Con sede en Singapur, también se enfoca en impulsar iniciativas de modernización y transformación empresarial en APJ a través de mecanismos escalables. Para el ocio, disfruta de actividades en la naturaleza como el trekking y el surf.

colgar duong es arquitecto de soluciones en AWS. Con sede en Hanoi, Vietnam, se enfoca en impulsar la adopción de la nube en su país al proporcionar soluciones en la nube altamente disponibles, seguras y escalables para sus clientes. Además, le gusta construir y participa en varios proyectos de creación de prototipos. También le apasiona el campo del aprendizaje automático.

Trinh Vo es arquitecto de soluciones en AWS, con sede en la ciudad de Ho Chi Minh, Vietnam. Se enfoca en trabajar con clientes de diferentes industrias y socios en Vietnam para diseñar arquitecturas y demostraciones de la plataforma AWS que funcionen a la inversa de las necesidades comerciales del cliente y aceleren la adopción de la tecnología AWS adecuada. Le gusta la espeleología y el senderismo por ocio.

Wai Kin Tham es un arquitecto de la nube en AWS. Con sede en Singapur, su trabajo diario consiste en ayudar a los clientes a migrar a la nube y modernizar su pila de tecnología en la nube. En su tiempo libre asiste a clases de Muay Thai y Brazilian Jiu Jitsu.

punto_img

Información más reciente

punto_img