Logo Zephyrnet

Xây dựng công cụ tìm kiếm hình ảnh với Amazon Kendra và Amazon Rekognition

Ngày:

Trong bài đăng này, chúng tôi thảo luận về giải pháp máy học (ML) cho các tìm kiếm hình ảnh phức tạp bằng cách sử dụng Amazon KendraNhận thức lại Amazon. Cụ thể, chúng tôi sử dụng ví dụ về sơ đồ kiến ​​trúc cho các hình ảnh phức tạp do chúng kết hợp nhiều biểu tượng và văn bản trực quan khác nhau.

Với internet, việc tìm kiếm và lấy hình ảnh chưa bao giờ dễ dàng hơn thế. Hầu hết thời gian, bạn có thể định vị chính xác hình ảnh mong muốn của mình, chẳng hạn như tìm kiếm điểm đến cho kỳ nghỉ tiếp theo của bạn. Các tìm kiếm đơn giản thường thành công vì chúng không liên quan đến nhiều đặc điểm. Ngoài các đặc điểm hình ảnh mong muốn, tiêu chí tìm kiếm thường không yêu cầu các chi tiết quan trọng để xác định kết quả được yêu cầu. Ví dụ: nếu người dùng cố gắng tìm kiếm một loại chai màu xanh cụ thể, kết quả của nhiều loại chai màu xanh khác nhau sẽ được hiển thị. Tuy nhiên, chai màu xanh mong muốn có thể không dễ dàng tìm thấy do các cụm từ tìm kiếm chung chung.

Diễn giải ngữ cảnh tìm kiếm cũng góp phần đơn giản hóa kết quả. Khi người dùng có một hình ảnh mong muốn trong đầu, họ sẽ cố gắng đưa hình ảnh này vào một truy vấn tìm kiếm dựa trên văn bản. Việc hiểu các sắc thái giữa các truy vấn tìm kiếm cho các chủ đề tương tự là rất quan trọng để cung cấp các kết quả có liên quan và giảm thiểu nỗ lực mà người dùng cần để sắp xếp các kết quả theo cách thủ công. Ví dụ: truy vấn tìm kiếm “Chủ chó chơi trò nhặt đồ” tìm cách trả về kết quả hình ảnh cho thấy chủ chó đang chơi trò chơi trò nhặt đồ với một chú chó. Tuy nhiên, thay vào đó, kết quả thực tế được tạo ra có thể tập trung vào việc một con chó lấy đồ vật mà không thể hiện sự tham gia của chủ sở hữu. Người dùng có thể phải lọc thủ công các kết quả hình ảnh không phù hợp khi xử lý các tìm kiếm phức tạp.

Để giải quyết các vấn đề liên quan đến các tìm kiếm phức tạp, bài đăng này mô tả chi tiết cách bạn có thể đạt được một công cụ tìm kiếm có khả năng tìm kiếm các hình ảnh phức tạp bằng cách tích hợp Amazon Kendra và Amazon Rekognition. Amazon Kendra là một dịch vụ tìm kiếm thông minh được hỗ trợ bởi ML và Amazon Rekognition là một dịch vụ ML có thể xác định đối tượng, con người, văn bản, cảnh và hoạt động từ hình ảnh hoặc video.

Những hình ảnh nào có thể quá phức tạp để có thể tìm kiếm được? Một ví dụ là sơ đồ kiến ​​trúc, sơ đồ này có thể được liên kết với nhiều tiêu chí tìm kiếm tùy thuộc vào mức độ phức tạp của trường hợp sử dụng và số lượng dịch vụ kỹ thuật được yêu cầu, dẫn đến nỗ lực tìm kiếm thủ công đáng kể cho người dùng. Ví dụ: nếu người dùng muốn tìm giải pháp kiến ​​trúc cho trường hợp sử dụng xác minh khách hàng, thông thường họ sẽ sử dụng truy vấn tìm kiếm tương tự như “Sơ đồ kiến ​​trúc để xác minh khách hàng”. Tuy nhiên, các truy vấn tìm kiếm chung sẽ mở rộng trên nhiều loại dịch vụ và qua các ngày tạo nội dung khác nhau. Người dùng sẽ cần chọn thủ công các ứng cử viên kiến ​​trúc phù hợp dựa trên các dịch vụ cụ thể và xem xét mức độ phù hợp của các lựa chọn thiết kế kiến ​​trúc theo ngày tạo nội dung và ngày truy vấn.

Hình dưới đây cho thấy một sơ đồ ví dụ minh họa giải pháp kiến ​​trúc trích xuất, biến đổi và tải (ETL) được phối hợp.

Đối với những người dùng không quen thuộc với các dịch vụ được cung cấp trên nền tảng đám mây, họ có thể cung cấp các cách thức và mô tả chung khác nhau khi tìm kiếm sơ đồ như vậy. Sau đây là một số ví dụ về cách nó có thể được tìm kiếm:

  • “Sắp xếp quy trình công việc ETL”
  • “Cách tự động hóa xử lý dữ liệu hàng loạt”
  • “Các phương pháp tạo đường ống để chuyển đổi dữ liệu”

Tổng quan về giải pháp

Chúng tôi hướng dẫn bạn các bước sau để triển khai giải pháp:

  1. đào tạo một Nhãn tùy chỉnh Rekognition của Amazon mô hình nhận biết ký hiệu trong sơ đồ kiến ​​trúc.
  2. Kết hợp tính năng phát hiện văn bản của Amazon Rekognition để xác thực các ký hiệu sơ đồ kiến ​​trúc.
  3. Sử dụng Amazon Rekognition bên trong trình thu thập dữ liệu web để xây dựng kho lưu trữ để tìm kiếm
  4. Sử dụng Amazon Kendra để tìm kiếm kho lưu trữ.

Để dễ dàng cung cấp cho người dùng kho lưu trữ lớn các kết quả có liên quan, giải pháp sẽ cung cấp cách tìm kiếm tự động thông qua các nguồn đáng tin cậy. Sử dụng sơ đồ kiến ​​trúc làm ví dụ, giải pháp cần tìm kiếm thông qua các liên kết tham khảo và tài liệu kỹ thuật cho sơ đồ kiến ​​trúc và xác định các dịch vụ hiện có. Việc xác định các từ khóa như trường hợp sử dụng và ngành dọc trong các nguồn này cũng cho phép thu thập thông tin và để hiển thị kết quả tìm kiếm phù hợp hơn cho người dùng.

Xem xét mục tiêu tìm kiếm sơ đồ có liên quan như thế nào, giải pháp tìm kiếm hình ảnh cần đáp ứng ba tiêu chí:

  • Cho phép tìm kiếm từ khóa đơn giản
  • Giải thích các truy vấn tìm kiếm dựa trên các trường hợp sử dụng mà người dùng cung cấp
  • Sắp xếp và sắp xếp kết quả tìm kiếm

Tìm kiếm từ khóa chỉ đơn giản là tìm kiếm “Amazon Rekognition” và được hiển thị sơ đồ kiến ​​trúc về cách sử dụng dịch vụ trong các trường hợp sử dụng khác nhau. Ngoài ra, các cụm từ tìm kiếm có thể được liên kết gián tiếp với sơ đồ thông qua các trường hợp sử dụng và ngành dọc có thể được liên kết với kiến ​​trúc. Ví dụ: tìm kiếm cụm từ “Cách phối hợp đường ống ETL” sẽ trả về kết quả của các sơ đồ kiến ​​trúc được xây dựng bằng Keo AWSChức năng bước AWS. Sắp xếp và sắp xếp thứ tự kết quả tìm kiếm dựa trên các thuộc tính như ngày tạo sẽ đảm bảo các sơ đồ kiến ​​trúc vẫn phù hợp bất chấp các bản cập nhật và phát hành dịch vụ. Hình dưới đây cho thấy sơ đồ kiến ​​trúc của giải pháp tìm kiếm hình ảnh.

Như được minh họa trong sơ đồ trước và trong phần tổng quan về giải pháp, có hai khía cạnh chính của giải pháp. Khía cạnh đầu tiên được thực hiện bởi Amazon Rekognition, có thể xác định đối tượng, con người, văn bản, cảnh và hoạt động từ hình ảnh hoặc video. Nó bao gồm các mô hình được đào tạo trước có thể được áp dụng để phân tích hình ảnh và video trên quy mô lớn. Với tính năng nhãn tùy chỉnh, Amazon Rekognition cho phép bạn điều chỉnh dịch vụ ML cho phù hợp với nhu cầu kinh doanh cụ thể của mình bằng cách gắn nhãn hình ảnh được đối chiếu từ tìm nguồn thông qua sơ đồ kiến ​​trúc trong các liên kết tham khảo đáng tin cậy và tài liệu kỹ thuật. Bằng cách tải lên một tập hợp nhỏ các hình ảnh đào tạo, Amazon Rekognition tự động tải và kiểm tra dữ liệu đào tạo, chọn thuật toán ML phù hợp, đào tạo một mô hình và cung cấp các chỉ số hiệu suất của mô hình. Do đó, người dùng không có kiến ​​thức chuyên môn về ML có thể tận hưởng lợi ích của mô hình nhãn tùy chỉnh thông qua lệnh gọi API, vì đã giảm được một lượng chi phí đáng kể. Giải pháp áp dụng Nhãn tùy chỉnh Amazon Rekognition để phát hiện logo dịch vụ AWS trên sơ đồ kiến ​​trúc để cho phép tìm kiếm sơ đồ kiến ​​trúc bằng tên dịch vụ. Sau khi lập mô hình, các dịch vụ được phát hiện của từng hình ảnh sơ đồ kiến ​​trúc và siêu dữ liệu của nó, như nguồn gốc URL và tiêu đề hình ảnh, được lập chỉ mục cho các mục đích tìm kiếm trong tương lai và được lưu trữ trong Máy phát điện Amazon, cơ sở dữ liệu NoSQL khóa-giá trị, được quản lý hoàn toàn, không có máy chủ, được thiết kế để chạy các ứng dụng hiệu năng cao.

Khía cạnh thứ hai được hỗ trợ bởi Amazon Kendra, một dịch vụ tìm kiếm doanh nghiệp thông minh được hỗ trợ bởi ML cho phép bạn tìm kiếm trên các kho lưu trữ nội dung khác nhau. Với Amazon Kendra, bạn có thể tìm kiếm kết quả, chẳng hạn như hình ảnh hoặc tài liệu, đã được lập chỉ mục. Các kết quả này cũng có thể được lưu trữ trên các kho lưu trữ khác nhau vì dịch vụ tìm kiếm sử dụng các trình kết nối tích hợp sẵn. Từ khóa, cụm từ và mô tả có thể được sử dụng để tìm kiếm, cho phép bạn tìm kiếm chính xác các sơ đồ có liên quan đến một trường hợp sử dụng cụ thể. Do đó, bạn có thể dễ dàng xây dựng một dịch vụ tìm kiếm thông minh với chi phí phát triển tối thiểu.

Với sự hiểu biết về vấn đề và giải pháp, các phần tiếp theo đi sâu vào cách tự động hóa việc tìm nguồn dữ liệu thông qua việc thu thập thông tin sơ đồ kiến ​​trúc từ các nguồn đáng tin cậy. Sau đó, chúng tôi sẽ hướng dẫn quy trình tạo mô hình ML nhãn tùy chỉnh với dịch vụ được quản lý hoàn toàn. Cuối cùng, chúng tôi đề cập đến việc nhập dữ liệu bằng một dịch vụ tìm kiếm thông minh, được hỗ trợ bởi ML.

Tạo mô hình Amazon Rekognition với nhãn tùy chỉnh

Trước khi có được bất kỳ sơ đồ kiến ​​trúc nào, chúng ta cần một công cụ để đánh giá xem một hình ảnh có thể được xác định là sơ đồ kiến ​​trúc hay không. Amazon Rekognition Custom Labels cung cấp một quy trình hợp lý hóa để tạo mô hình nhận dạng hình ảnh giúp xác định các đối tượng và cảnh trong hình ảnh dành riêng cho nhu cầu kinh doanh. Trong trường hợp này, chúng tôi sử dụng Nhãn tùy chỉnh Amazon Rekognition để xác định các biểu tượng dịch vụ AWS, sau đó hình ảnh được lập chỉ mục với các dịch vụ để tìm kiếm phù hợp hơn bằng Amazon Kendra. Mô hình này không phân biệt hình ảnh có phải là sơ đồ kiến ​​trúc hay không; nó chỉ đơn giản là xác định các biểu tượng dịch vụ, nếu có. Do đó, có thể có những trường hợp hình ảnh không phải là sơ đồ kiến ​​trúc xuất hiện trong kết quả tìm kiếm. Tuy nhiên, kết quả như vậy là tối thiểu.

Hình dưới đây cho thấy các bước mà giải pháp này thực hiện để tạo mô hình Nhãn tùy chỉnh Amazon Rekognition.

Quá trình này bao gồm việc tải tập dữ liệu lên, tạo tệp kê khai tham chiếu đến tập dữ liệu đã tải lên, sau đó tải tệp kê khai này lên Amazon Rekognition. Tập lệnh Python được sử dụng để hỗ trợ quá trình tải lên bộ dữ liệu và tạo tệp kê khai. Sau khi tạo thành công tệp kê khai, tệp này sẽ được tải lên Amazon Rekognition để bắt đầu quá trình đào tạo mô hình. Để biết chi tiết về tập lệnh Python và cách chạy nó, hãy tham khảo Repo GitHub.

Để huấn luyện mô hình, trong dự án Amazon Rekognition, hãy chọn Mô hình tàu hỏa, chọn dự án bạn muốn đào tạo, sau đó thêm bất kỳ thẻ có liên quan nào và chọn Mô hình tàu hỏa. Để biết hướng dẫn về cách bắt đầu dự án Nhãn tùy chỉnh Amazon Rekognition, hãy tham khảo tài liệu có sẵn video hướng dẫn. Mô hình có thể mất tới 8 giờ để đào tạo với tập dữ liệu này.

Khi quá trình đào tạo hoàn tất, bạn có thể chọn mô hình đã đào tạo để xem kết quả đánh giá. Để biết thêm chi tiết về các số liệu khác nhau như độ chính xác, thu hồi và F1, hãy tham khảo Các số liệu để đánh giá mô hình của bạn. Để sử dụng mô hình, hãy điều hướng đến Sử dụng mô hình tab, để số lượng đơn vị suy luận là 1 và bắt đầu mô hình. Sau đó, chúng ta có thể sử dụng một AWS Lambda chức năng gửi hình ảnh đến mô hình trong base64 và mô hình trả về danh sách nhãn và điểm tin cậy.

Sau khi đào tạo thành công mô hình Amazon Rekognition với Nhãn tùy chỉnh Amazon Rekognition, chúng ta có thể sử dụng nó để xác định các biểu tượng dịch vụ trong sơ đồ kiến ​​trúc đã được thu thập thông tin. Để tăng độ chính xác của việc xác định các dịch vụ trong sơ đồ kiến ​​trúc, chúng tôi sử dụng một tính năng khác của Amazon Rekognition có tên là phát hiện văn bản. Để sử dụng tính năng này, chúng tôi chuyển cùng một ảnh trong base64 và Amazon Rekognition trả về danh sách văn bản được xác định trong ảnh. Trong các hình sau đây, chúng tôi so sánh hình ảnh gốc và hình ảnh trông như thế nào sau khi các dịch vụ trong hình ảnh được xác định. Con số đầu tiên cho thấy hình ảnh ban đầu.

Hình dưới đây hiển thị hình ảnh gốc với các dịch vụ được phát hiện.

Để đảm bảo khả năng mở rộng, chúng tôi sử dụng hàm Lambda, hàm này sẽ được hiển thị thông qua điểm cuối API được tạo bằng cách sử dụng Cổng API Amazon. Lambda là dịch vụ điện toán hướng sự kiện, không cần máy chủ, cho phép bạn chạy mã cho hầu như mọi loại ứng dụng hoặc dịch vụ phụ trợ mà không cần cung cấp hoặc quản lý máy chủ. Việc sử dụng hàm Lambda giúp loại bỏ mối lo ngại chung về việc mở rộng quy mô khi khối lượng lớn yêu cầu được gửi đến điểm cuối API. Lambda tự động chạy chức năng cho lệnh gọi API cụ thể, chức năng này sẽ dừng khi lệnh gọi hoàn tất, nhờ đó giảm chi phí phát sinh cho người dùng. Vì yêu cầu sẽ được chuyển hướng đến điểm cuối Amazon Rekognition, nên chỉ có chức năng Lambda có khả năng thay đổi quy mô là không đủ. Để điểm cuối Amazon Rekognition có thể thay đổi quy mô, bạn có thể tăng đơn vị suy luận của điểm cuối. Để biết thêm chi tiết về cấu hình đơn vị suy luận, hãy tham khảo Các đơn vị suy luận

Sau đây là đoạn mã của hàm Lambda cho quy trình nhận dạng hình ảnh:

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

Sau khi tạo hàm Lambda, chúng ta có thể tiếp tục hiển thị hàm này dưới dạng API bằng API Gateway. Để biết hướng dẫn về cách tạo API có tích hợp proxy Lambda, hãy tham khảo Hướng dẫn: Xây dựng API Hello World REST với tích hợp proxy Lambda.

Thu thập thông tin sơ đồ kiến ​​trúc

Để tính năng tìm kiếm có thể hoạt động khả thi, chúng ta cần một kho sơ đồ kiến ​​trúc. Tuy nhiên, các sơ đồ này phải bắt nguồn từ các nguồn đáng tin cậy như Blog AWSHướng dẫn theo quy định của AWS. Việc thiết lập độ tin cậy của các nguồn dữ liệu đảm bảo việc triển khai cơ bản và mục đích của các trường hợp sử dụng là chính xác và được kiểm tra kỹ lưỡng. Bước tiếp theo là thiết lập trình thu thập thông tin có thể giúp thu thập nhiều sơ đồ kiến ​​trúc để đưa vào kho lưu trữ của chúng tôi. Chúng tôi đã tạo một trình thu thập dữ liệu web để trích xuất các sơ đồ kiến ​​trúc và thông tin như mô tả về việc triển khai từ các nguồn có liên quan. Có nhiều cách để bạn có thể đạt được việc xây dựng một cơ chế như vậy; trong ví dụ này, chúng tôi sử dụng một chương trình chạy trên Đám mây điện toán đàn hồi Amazon (Amazon EC2). Trước tiên, chương trình lấy liên kết đến các bài đăng trên blog từ API Blog AWS. Phản hồi được trả về từ API chứa thông tin của bài đăng, chẳng hạn như tiêu đề, URL, ngày tháng và các liên kết đến hình ảnh được tìm thấy trong bài đăng.

Sau đây là đoạn mã của hàm JavaScript dành cho quá trình thu thập thông tin trên 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();

Với cơ chế này, chúng ta có thể dễ dàng thu thập hàng trăm, hàng nghìn hình ảnh từ các blog khác nhau. Tuy nhiên, chúng tôi cần một bộ lọc chỉ chấp nhận hình ảnh chứa nội dung của sơ đồ kiến ​​trúc, trong trường hợp của chúng tôi là biểu tượng của dịch vụ AWS, để lọc ra những hình ảnh không phải là sơ đồ kiến ​​trúc.

Đây là mục đích của mô hình Amazon Rekognition của chúng tôi. Các sơ đồ trải qua quy trình nhận dạng hình ảnh, quy trình này xác định các biểu tượng dịch vụ và xác định xem nó có thể được coi là sơ đồ kiến ​​trúc hợp lệ hay không.

Sau đây là đoạn mã của chức năng gửi hình ảnh đến mô hình 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));
}

Sau khi vượt qua kiểm tra nhận dạng hình ảnh, kết quả được trả về từ mô hình Amazon Rekognition và thông tin liên quan đến mô hình này được nhóm vào siêu dữ liệu của riêng chúng. Sau đó, siêu dữ liệu được lưu trữ trong bảng DynamoDB, nơi bản ghi sẽ được sử dụng để nhập vào Amazon Kendra.

Sau đây là đoạn mã của hàm lưu trữ siêu dữ liệu của sơ đồ trong 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); } });
}

Nhập siêu dữ liệu vào Amazon Kendra

Sau khi các sơ đồ kiến ​​trúc trải qua quá trình nhận dạng hình ảnh và siêu dữ liệu được lưu trữ trong DynamoDB, chúng ta cần một cách để sơ đồ có thể tìm kiếm được trong khi tham chiếu nội dung trong siêu dữ liệu. Cách tiếp cận này là có một công cụ tìm kiếm có thể được tích hợp với ứng dụng và có thể xử lý một lượng lớn truy vấn tìm kiếm. Do đó, chúng tôi sử dụng Amazon Kendra, một dịch vụ tìm kiếm doanh nghiệp thông minh.

Chúng tôi sử dụng Amazon Kendra làm thành phần tương tác của giải pháp vì khả năng tìm kiếm mạnh mẽ của nó, đặc biệt là với việc sử dụng ngôn ngữ tự nhiên. Điều này thêm một lớp đơn giản bổ sung khi người dùng đang tìm kiếm sơ đồ gần nhất với những gì họ đang tìm kiếm. Amazon Kendra cung cấp một số trình kết nối nguồn dữ liệu để nhập và kết nối nội dung. Giải pháp này sử dụng trình kết nối tùy chỉnh để nhập thông tin của sơ đồ kiến ​​trúc từ DynamoDB. Để định cấu hình nguồn dữ liệu cho chỉ mục Amazon Kendra, bạn có thể sử dụng chỉ mục hiện có hoặc tạo một chỉ mục mới.

Các sơ đồ được thu thập sau đó phải được nhập vào chỉ mục Amazon Kendra đã được tạo. Hình dưới đây cho thấy quy trình về cách các sơ đồ được lập chỉ mục.

Đầu tiên, các sơ đồ được chèn vào DynamoDB sẽ tạo một sự kiện Đặt thông qua Luồng Amazon DynamoDB. Sự kiện kích hoạt hàm Lambda hoạt động như một nguồn dữ liệu tùy chỉnh cho Amazon Kendra và tải sơ đồ vào chỉ mục. Để biết hướng dẫn về cách tạo trình kích hoạt Luồng DynamoDB cho hàm Lambda, hãy tham khảo Hướng dẫn: Sử dụng AWS Lambda với Amazon DynamoDB Streams

Sau khi tích hợp hàm Lambda với DynamoDB, chúng ta cần nhập các bản ghi sơ đồ được gửi tới hàm vào chỉ mục Amazon Kendra. Chỉ mục chấp nhận dữ liệu từ nhiều loại nguồn khác nhau và việc nhập các mục vào chỉ mục từ hàm Lambda có nghĩa là nó phải sử dụng cấu hình nguồn dữ liệu tùy chỉnh. Để biết hướng dẫn về cách tạo nguồn dữ liệu tùy chỉnh cho chỉ mục của bạn, hãy tham khảo Trình kết nối nguồn dữ liệu tùy chỉnh.

Sau đây là đoạn mã của hàm Lambda về cách lập chỉ mục cho sơ đồ theo cách tùy chỉnh:

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

Yếu tố quan trọng giúp sơ đồ có thể tìm kiếm được là phím Blob trong tài liệu. Đây là những gì Amazon Kendra xem xét khi người dùng cung cấp thông tin tìm kiếm của họ. Trong mã ví dụ này, khóa Blob chứa phiên bản tóm tắt trường hợp sử dụng của sơ đồ được nối với thông tin được phát hiện từ quy trình nhận dạng hình ảnh. Điều này cho phép người dùng tìm kiếm sơ đồ kiến ​​trúc dựa trên các trường hợp sử dụng, chẳng hạn như “Phát hiện gian lận” hoặc theo tên dịch vụ như “Amazon Kendra”.

Để minh họa một ví dụ về giao diện của khóa Blob, đoạn mã sau đây tham chiếu sơ đồ ETL ban đầu mà chúng tôi đã giới thiệu trước đó trong bài đăng này. Nó chứa một mô tả về sơ đồ thu được khi nó được thu thập thông tin, cũng như các dịch vụ được mô hình Amazon Rekognition xác định.

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

Tìm kiếm với Amazon Kendra

Sau khi chúng tôi kết hợp tất cả các thành phần lại với nhau, kết quả tìm kiếm ví dụ về “phân tích thời gian thực” sẽ giống như ảnh chụp màn hình sau.

Bằng cách tìm kiếm trường hợp sử dụng này, nó tạo ra các sơ đồ kiến ​​trúc khác nhau. Người dùng được cung cấp các phương pháp khác nhau về khối lượng công việc cụ thể mà họ đang cố triển khai.

Làm sạch

Hoàn thành các bước trong phần này để dọn dẹp các tài nguyên bạn đã tạo như một phần của bài đăng này:

  1. Xóa API:
    1. Trên bảng điều khiển Cổng API, chọn API sẽ bị xóa.
    2. trên Hoạt động menu, chọn Xóa bỏ.
    3. Chọn Xóa bỏ xác nhận.
  2. Xóa bảng DynamoDB:
    1. Trên bảng điều khiển DynamoDB, chọn Bàn trong khung điều hướng.
    2. Chọn bảng bạn đã tạo và chọn Xóa bỏ.
    3. Nhập xóa khi được nhắc xác nhận.
    4. Chọn Xóa bảng xác nhận.
  3. Xóa chỉ mục Amazon Kendra:
    1. Trên bảng điều khiển Amazon Kendra, chọn Chỉ số trong khung điều hướng.
    2. Chọn chỉ mục bạn đã tạo và chọn Xóa bỏ
    3. Nhập lý do khi được nhắc xác nhận.
    4. Chọn Xóa bỏ xác nhận.
  4. Xóa dự án Amazon Rekognition:
    1. Trên bảng điều khiển Amazon Rekognition, chọn Sử dụng Nhãn tùy chỉnh trong ngăn điều hướng, sau đó chọn Dự án.
    2. Chọn dự án bạn đã tạo và chọn Xóa bỏ.
    3. Nhập Xóa khi được nhắc xác nhận.
    4. Chọn Xóa tập dữ liệu và mô hình được liên kết xác nhận.
  5. Xóa hàm Lambda:
    1. Trên bảng điều khiển Lambda, chọn chức năng cần xóa.
    2. trên Hoạt động menu, chọn Xóa bỏ.
    3. Nhập Xóa khi được nhắc xác nhận.
    4. Chọn Xóa bỏ xác nhận.

Tổng kết

Trong bài đăng này, chúng tôi đã trình bày một ví dụ về cách bạn có thể tìm kiếm thông tin từ hình ảnh một cách thông minh. Điều này bao gồm quá trình đào tạo mô hình Amazon Rekognition ML hoạt động như một bộ lọc cho hình ảnh, tự động hóa thu thập thông tin hình ảnh, đảm bảo độ tin cậy và hiệu quả, cũng như truy vấn sơ đồ bằng cách đính kèm nguồn dữ liệu tùy chỉnh cho phép lập chỉ mục các mục một cách linh hoạt hơn . Để tìm hiểu sâu hơn về việc triển khai các mã, hãy tham khảo Repo GitHub.

Bây giờ bạn đã hiểu cách cung cấp xương sống của kho lưu trữ tìm kiếm tập trung cho các tìm kiếm phức tạp, hãy thử tạo công cụ tìm kiếm hình ảnh của riêng bạn. Để biết thêm thông tin về các tính năng cốt lõi, hãy tham khảo Bắt đầu với Amazon Rekognition Custom Labels, Kiểm duyệt nội dung, và Hướng dẫn dành cho nhà phát triển Amazon Kendra. Nếu bạn mới sử dụng Nhãn tùy chỉnh Amazon Rekognition, hãy dùng thử bằng Bậc miễn phí của chúng tôi, kéo dài 3 tháng và bao gồm 10 giờ đào tạo miễn phí mỗi tháng và 4 giờ suy luận miễn phí mỗi tháng.


Về các tác giả

Ryan thấy là Kiến trúc sư giải pháp tại AWS. Làm việc tại Singapore, anh làm việc với khách hàng để xây dựng các giải pháp nhằm giải quyết các vấn đề kinh doanh của họ cũng như điều chỉnh tầm nhìn kỹ thuật để giúp chạy các khối lượng công việc có quy mô linh hoạt và hiệu quả hơn trên đám mây.

James Ong Jia Xiang là Giám đốc giải pháp khách hàng tại AWS. Anh chuyên về Chương trình tăng tốc di chuyển (MAP), nơi anh giúp khách hàng và đối tác triển khai thành công các chương trình di chuyển quy mô lớn sang AWS. Có trụ sở tại Singapore, ông cũng tập trung vào việc thúc đẩy các sáng kiến ​​chuyển đổi doanh nghiệp và hiện đại hóa trên khắp APJ thông qua các cơ chế có thể mở rộng. Để giải trí, anh ấy thích các hoạt động tự nhiên như leo núi và lướt sóng.

Hàng Dương là Kiến trúc sư giải pháp tại AWS. Làm việc tại Hà Nội, Việt Nam, cô tập trung vào việc thúc đẩy việc áp dụng đám mây trên toàn quốc bằng cách cung cấp các giải pháp đám mây có tính khả dụng cao, an toàn và có thể mở rộng cho khách hàng của mình. Ngoài ra, cô ấy thích xây dựng và tham gia vào các dự án tạo mẫu khác nhau. Cô cũng đam mê lĩnh vực máy học.

Trịnh Võ là Kiến trúc sư giải pháp tại AWS, có trụ sở tại Thành phố Hồ Chí Minh, Việt Nam. Cô tập trung làm việc với khách hàng ở các ngành và đối tác khác nhau tại Việt Nam để tạo ra các cấu trúc và bản trình diễn của nền tảng AWS hoạt động ngược với nhu cầu kinh doanh của khách hàng và đẩy nhanh việc áp dụng công nghệ AWS phù hợp. Cô thích thám hiểm hang động và leo núi để giải trí.

Wai Kin Tham là Kiến trúc sư đám mây tại AWS. Làm việc tại Singapore, công việc hàng ngày của anh ấy liên quan đến việc giúp khách hàng di chuyển sang đám mây và hiện đại hóa hệ thống công nghệ của họ trên đám mây. Khi rảnh rỗi, anh tham gia các lớp học Muay Thái và Nhu thuật Brazil.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img