{"id":1658175,"date":"2026-03-12T16:10:40","date_gmt":"2026-03-12T16:10:40","guid":{"rendered":"https:\/\/celebrity.land\/pt\/?p=1658175"},"modified":"2026-03-12T16:10:40","modified_gmt":"2026-03-12T16:10:40","slug":"incorporacoes-multimodais-em-escala-data-lake-de-ia-para-cargas-de-trabalho-de-midia-e-entretenimento","status":"publish","type":"post","link":"https:\/\/celebrity.land\/pt\/incorporacoes-multimodais-em-escala-data-lake-de-ia-para-cargas-de-trabalho-de-midia-e-entretenimento\/","title":{"rendered":"Incorpora\u00e7\u00f5es multimodais em escala: data lake de IA para cargas de trabalho de m\u00eddia e entretenimento"},"content":{"rendered":"\n<figure><\/figure>\n<\/p>\n<div id=\"\">\n<p>Esta postagem mostra como construir um sistema de pesquisa de v\u00eddeo multimodal escalon\u00e1vel que permite a pesquisa em linguagem natural em grandes conjuntos de dados de v\u00eddeo usando <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/nova\/\">Amaz\u00f4nia Nova<\/a> modelos e <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/opensearch-service\/\">Servi\u00e7o Amazon OpenSearch<\/a>. Voc\u00ea aprender\u00e1 como ir al\u00e9m da marca\u00e7\u00e3o manual e das pesquisas baseadas em palavras-chave para permitir a pesquisa sem\u00e2ntica que captura toda a riqueza do conte\u00fado de v\u00eddeo.<\/p>\n<p>Demonstramos isso em grande escala processando 792.270 v\u00eddeos de dois <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/registry.opendata.aws\/\">Registro de dados abertos da AWS<\/a> conjuntos de dados: <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/registry.opendata.aws\/multimedia-commons\/\">Comuns Multim\u00eddia<\/a> (787.479 v\u00eddeos, m\u00e9dia de 37 segundos) e <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/registry.opendata.aws\/mevadata\/\">MEVA<\/a> (4.791 v\u00eddeos, m\u00e9dia de 5 minutos). O processamento de 8.480 horas de conte\u00fado de v\u00eddeo (30,5 milh\u00f5es de segundos) levou 41 horas. Custo total do primeiro ano: US$ 27.328 (com OpenSearch sob demanda) ou US$ 23.632 (com inst\u00e2ncias reservadas do OpenSearch Service). O custo consistia em ingest\u00e3o \u00fanica (US$ 18.088) e Amazon OpenSearch Service anual (US$ 9.240 sob demanda ou US$ 5.544 reservados).<\/p>\n<p>A reparti\u00e7\u00e3o da ingest\u00e3o \u00e9 a seguinte:<\/p>\n<ul>\n<li>Computa\u00e7\u00e3o Amazon Elastic Compute Cloud (Amazon EC2) (4 \u00d7 c7i.48xlarge spot a US$ 2,57\/hora \u00d7 41 horas): US$ 421<\/li>\n<li><a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/bedrock\/\">Base Amaz\u00f4nica<\/a> Embeddings Nova Multimodal (30,5 milh\u00f5es de segundos \u00d7 pre\u00e7o de lote de US$ 0,00056\/segundo): US$ 17.096<\/li>\n<li>Marca\u00e7\u00e3o Nova Pro (792 mil v\u00eddeos \u00d7 600 tokens (m\u00e9dia)): US$ 571<\/li>\n<\/ul>\n<p>A solu\u00e7\u00e3o gera embeddings audiovisuais usando <code>AUDIO_VIDEO_COMBINED<\/code> modo (ver <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/nova\/latest\/userguide\/embeddings-schema.html\">Esquema da API Nova Multimodal Embeddings<\/a>), armazena-os no OpenSearch Service e suporta pesquisa de texto para v\u00eddeo, v\u00eddeo para v\u00eddeo e pesquisa h\u00edbrida.<\/p>\n<h2>Vis\u00e3o geral da solu\u00e7\u00e3o<\/h2>\n<p>A arquitetura consiste em dois fluxos de trabalho principais \u2014 ingest\u00e3o e pesquisa \u2014 que trabalham juntos para permitir a pesquisa multimodal de v\u00eddeos em escala:<\/p>\n<p><strong>Pipeline de ingest\u00e3o de v\u00eddeo:<\/strong><\/p>\n<p>O pipeline de ingest\u00e3o usa quatro <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/ec2\/\">Amazon EC2<\/a> Inst\u00e2ncias c7i.48xlarge com 600 trabalhadores paralelos para processar 19.400 v\u00eddeos por hora. A API ass\u00edncrona tem um limite de simultaneidade de 30 trabalhos simult\u00e2neos por conta (consulte <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/bedrock\/latest\/userguide\/quotas.html\">Cotas Amazon Bedrock<\/a>), ent\u00e3o o pipeline implementa uma fila de trabalhos com sondagem. Os trabalhadores enviam trabalhos at\u00e9 o limite de simultaneidade, pesquisam a conclus\u00e3o e enviam novos trabalhos \u00e0 medida que as vagas ficam dispon\u00edveis. <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/nova\/latest\/userguide\/nova-embeddings.html\">Incorpora\u00e7\u00f5es multimodais do Amazon Nova<\/a> lida com o processamento de v\u00eddeo de forma ass\u00edncrona, segmentando v\u00eddeos em peda\u00e7os de 15 segundos (otimizado para capturar mudan\u00e7as de cena enquanto mant\u00e9m a contagem de incorpora\u00e7\u00f5es gerenci\u00e1vel) e gerando incorpora\u00e7\u00f5es de 1.024 dimens\u00f5es. Essas incorpora\u00e7\u00f5es foram escolhidas em 3072 dimens\u00f5es para uma economia de custos de 3x do ponto de vista de armazenamento com impacto m\u00ednimo na precis\u00e3o. O custo de gera\u00e7\u00e3o de incorpora\u00e7\u00e3o \u00e9 independente das dimens\u00f5es de incorpora\u00e7\u00e3o. <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/nova\/latest\/userguide\/prompting-video-understanding.html\">Amazon Nova Pro<\/a> adiciona de 10 a 15 tags descritivas por v\u00eddeo a partir de uma taxonomia predefinida.<\/p>\n<p>Observa\u00e7\u00e3o: <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/blogs\/aws\/introducing-amazon-nova-2-lite-a-fast-cost-effective-reasoning-model\/\">Amazon Nova 2 Lite<\/a> oferece maior precis\u00e3o com menor custo para tarefas de marca\u00e7\u00e3o. Recomendamos que voc\u00ea considere isso para novas implanta\u00e7\u00f5es. O sistema armazena embeddings em um <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/developerguide\/knn.html\">\u00cdndice OpenSearch k-NN<\/a> para pesquisa sem\u00e2ntica e tags de metadados em um \u00edndice de texto separado para correspond\u00eancia de palavras-chave. Para pesquisa, voc\u00ea pode consultar v\u00eddeos de tr\u00eas maneiras: converter linguagem natural em embeddings para pesquisa de texto para v\u00eddeo, comparar embeddings de v\u00eddeo diretamente para pesquisa de v\u00eddeo para v\u00eddeo ou combinar ambas as abordagens em pesquisa h\u00edbrida.<\/p>\n<p><strong>Tipos de pesquisas habilitadas por esta solu\u00e7\u00e3o:<\/strong><\/p>\n<ol>\n<li><strong>Pesquisa de texto para v\u00eddeo<\/strong> \u2013 Consultas de linguagem natural convertidas em embeddings para correspond\u00eancia de similaridade sem\u00e2ntica<\/li>\n<li><strong>Pesquisa v\u00eddeo para v\u00eddeo<\/strong> \u2013 Encontre conte\u00fado semelhante comparando diretamente os embeddings de v\u00eddeo<\/li>\n<li><strong>Pesquisa h\u00edbrida<\/strong> \u2013 Combina similaridade vetorial (peso de 70%) com correspond\u00eancia de palavras-chave (peso de 30%) para m\u00e1xima precis\u00e3o<\/li>\n<\/ol>\n<h3>Pipeline de ingest\u00e3o de v\u00eddeo<\/h3>\n<p>O diagrama a seguir ilustra o pipeline de ingest\u00e3o e processamento de v\u00eddeo:<\/p>\n<\/p>\n<p><em>Figura 1: Pipeline de ingest\u00e3o de v\u00eddeo mostrando o fluxo do armazenamento de v\u00eddeo S3 por meio de Nova Multimodal Embeddings e Nova Pro para \u00edndices OpenSearch duplos<\/em><\/p>\n<p>O fluxo de trabalho de processamento de v\u00eddeo \u00e9 o seguinte:<\/p>\n<ol>\n<li>Enviar v\u00eddeos para <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/s3\/\">Servi\u00e7o de armazenamento simples da Amazon (Amazon S3)<\/a>.<\/li>\n<li>Processe v\u00eddeos usando <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/bedrock\/latest\/APIReference\/API_runtime_StartAsyncInvoke.html\">API ass\u00edncrona Nova Multimodal Embeddings<\/a>que segmenta v\u00eddeos automaticamente e gera embeddings. Um orquestrador pesquisa a conclus\u00e3o do trabalho (a API ass\u00edncrona tem um limite de 30 trabalhos simult\u00e2neos por conta, consulte <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/bedrock\/latest\/userguide\/quotas.html\">Cotas Amazon Bedrock<\/a>) e recupera resultados do Amazon S3.<\/li>\n<li>Gere tags descritivas usando <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/nova\/latest\/userguide\/prompting-video-understanding.html\">Nova Pro<\/a> (ou <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/ai\/responsible-ai\/nova-2-lite\/overview.html\">Nova Lite<\/a> para melhor precis\u00e3o a um custo menor) a partir de uma taxonomia predefinida para recursos de pesquisa aprimorados.<\/li>\n<li>Incorpora\u00e7\u00f5es de \u00edndice em <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/developerguide\/knn.html\">\u00cdndice OpenSearch k-NN<\/a> e tags no \u00edndice de texto.<\/li>\n<\/ol>\n<h3>Arquitetura de pesquisa de v\u00eddeo<\/h3>\n<p>O diagrama a seguir mostra a arquitetura de pesquisa completa:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2026\/03\/09\/l-ml-200122.png\" \/><\/p>\n<p><em>Figura 2: Arquitetura de pesquisa de v\u00eddeo demonstrando tr\u00eas modos de pesquisa \u2013 texto para v\u00eddeo, v\u00eddeo para v\u00eddeo e pesquisa h\u00edbrida combinando k-NN e BM25<\/em><\/p>\n<p>A arquitetura de pesquisa permite tr\u00eas modos:<\/p>\n<ol>\n<li><strong>Texto para v\u00eddeo \u2013<\/strong> Consultas em linguagem natural<\/li>\n<li><strong>V\u00eddeo para v\u00eddeo<\/strong> \u2013 Descoberta de conte\u00fado semelhante<\/li>\n<li><strong>H\u00edbrido<\/strong> \u2013 Correspond\u00eancia combinada de sem\u00e2ntica e palavras-chave<\/li>\n<\/ol>\n<h2>Pr\u00e9-requisitos<\/h2>\n<p>Antes de come\u00e7ar, voc\u00ea precisar\u00e1 de:<\/p>\n<ol>\n<li>Um <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/free\/\">Conta AWS<\/a> com acesso a <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/bedrock\/\">Base Amaz\u00f4nica<\/a> em <code>us-east-1<\/code> (Os modelos Nova s\u00e3o habilitados por padr\u00e3o com permiss\u00f5es IAM apropriadas)<\/li>\n<li><a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/www.python.org\/downloads\/\">Pit\u00e3o<\/a> 3.9 ou posterior instalado<\/li>\n<li><a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/cli\/\">Interface de linha de comando da AWS (AWS CLI)<\/a> configurado com credenciais apropriadas<\/li>\n<li>Um dom\u00ednio do Amazon OpenSearch Service (r6g.large ou maior recomendado)<\/li>\n<li>Um <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/s3\/\">Amazon S3<\/a> balde para armazenamento de v\u00eddeo e incorpora\u00e7\u00e3o de sa\u00eddas<\/li>\n<li><a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/iam\/\">AWS Identity and Access Management (IAM)<\/a> para Amazon Bedrock, OpenSearch Service e Amazon S3<\/li>\n<\/ol>\n<p>A solu\u00e7\u00e3o usa:<\/p>\n<ol start=\"7\">\n<li>Amazon Bedrock com <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/nova\/latest\/userguide\/nova-embeddings.html\">Incorpora\u00e7\u00f5es Multimodais Nova<\/a> (amazon.nova-2-multimodal-embeddings-v1:0)<\/li>\n<li>Amazon Bedrock com <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/nova\/latest\/userguide\/prompting-video-understanding.html\">Nova Pro<\/a> (us.amazon.nova-pro-v1:0) ou <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/ai\/responsible-ai\/nova-2-lite\/overview.html\">Nova Lite<\/a> (us.amazon.nova-2-lite-v1:0) para marca\u00e7\u00e3o<\/li>\n<li>Amazon OpenSearch Service 2.11 ou posterior com <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/developerguide\/knn.html\">Plug-in k-NN<\/a><\/li>\n<li>Amazon S3 para armazenamento de v\u00eddeo e incorpora\u00e7\u00e3o<\/li>\n<\/ol>\n<h2>Passo a passo<\/h2>\n<h3>Etapa 1: criar fun\u00e7\u00f5es e pol\u00edticas do IAM<\/h3>\n<p>Crie um <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/IAM\/latest\/UserGuide\/id_roles.html\">Fun\u00e7\u00e3o do IAM<\/a> com permiss\u00f5es para invocar modelos do Amazon Bedrock, gravar em \u00edndices OpenSearch e ler\/gravar objetos S3.<\/p>\n<pre><code class=\"lang-json\">{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"bedrock:InvokeModel\",\n        \"bedrock:StartAsyncInvoke\",\n        \"bedrock:GetAsyncInvoke\",\n        \"bedrock:ListAsyncInvoke\"\n      ],\n      \"Resource\": [\n        \"arn:aws:bedrock:us-east-1::foundation-model\/amazon.nova-2-multimodal-embeddings-v1:0\",\n        \"arn:aws:bedrock:us-east-1::foundation-model\/us.amazon.nova-pro-v1:0\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"es:ESHttpPost\",\n        \"es:ESHttpPut\",\n        \"es:ESHttpGet\"\n      ],\n      \"Resource\": \"arn:aws:es:us-east-1:ACCOUNT_ID:domain\/DOMAIN_NAME\/*\"\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:GetObject\",\n        \"s3:PutObject\"\n      ],\n      \"Resource\": [\n        \"arn:aws:s3:::amzn-s3-demo-video-bucket\/*\",\n        \"arn:aws:s3:::amzn-s3-demo-embedding-bucket\/*\"\n      ]\n    }\n  ]\n}\n<\/code><\/pre>\n<h3>Etapa 2: configurar \u00edndices do OpenSearch Service<\/h3>\n<p>Crie dois <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/developerguide\/createupdateindex.html\">\u00cdndices do servi\u00e7o OpenSearch<\/a>: um para incorpora\u00e7\u00f5es de vetores (<a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/developerguide\/knn.html\">k-NN<\/a>) e um para metadados de texto. Esta arquitetura suporta pesquisa sem\u00e2ntica e consultas h\u00edbridas.<\/p>\n<pre><code class=\"lang-python\">from opensearchpy import OpenSearch, RequestsHttpConnection\nfrom requests_aws4auth import AWS4Auth\nimport boto3\n\nsession = boto3.Session()\ncredentials = session.get_credentials()\nawsauth = AWS4Auth(\n    credentials.access_key,\n    credentials.secret_key,\n    session.region_name,\n    'es',\n    session_token=credentials.token\n)\n\nopensearch_client = OpenSearch(\n    hosts=[{'host': 'YOUR_OPENSEARCH_ENDPOINT', 'port': 443}],\n    http_auth=awsauth,\n    use_ssl=True,\n    verify_certs=True,\n    connection_class=RequestsHttpConnection\n)\n\n# Create k-Nearest Neighbors (k-NN) index for embeddings\nknn_index_body = {\n    \"settings\": {\n        \"index.knn\": True,\n        \"number_of_shards\": 2,\n        \"number_of_replicas\": 1\n    },\n    \"mappings\": {\n        \"properties\": {\n            \"video_id\": {\"type\": \"keyword\"},\n            \"segment_index\": {\"type\": \"integer\"},\n            \"timestamp\": {\"type\": \"float\"},\n            \"embedding\": {\n                \"type\": \"knn_vector\",\n                \"dimension\": 1024,\n                \"method\": {\n                    \"name\": \"hnsw\",\n                    \"space_type\": \"cosinesimilarity\",\n                    \"engine\": \"faiss\"\n                }\n            },\n            \"s3_uri\": {\"type\": \"keyword\"}\n        }\n    }\n}\n\nopensearch_client.indices.create(\n    index=\"video-embeddings-knn\",\n    body=knn_index_body\n)\n\n# Create text index for metadata\ntext_index_body = {\n    \"settings\": {\n        \"number_of_shards\": 2,\n        \"number_of_replicas\": 1\n    },\n    \"mappings\": {\n        \"properties\": {\n            \"video_id\": {\"type\": \"keyword\"},\n            \"segment_index\": {\"type\": \"integer\"},\n            \"tags\": {\"type\": \"text\", \"analyzer\": \"standard\"}\n        }\n    }\n}\n\nopensearch_client.indices.create(\n    index=\"video-embeddings-text\",\n    body=text_index_body\n)<\/code><\/pre>\n<h3>Etapa 3: Processar v\u00eddeos com Nova Multimodal Embeddings<\/h3>\n<p>O <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/bedrock\/latest\/APIReference\/API_runtime_StartAsyncInvoke.html\">API ass\u00edncrona Amazon Bedrock<\/a> processa v\u00eddeos e gera incorpora\u00e7\u00f5es. Ele segmenta os v\u00eddeos em peda\u00e7os de 15 segundos e combina informa\u00e7\u00f5es de \u00e1udio e visuais.<\/p>\n<pre><code class=\"lang-python\">import boto3\nimport json\nimport time\n\nbedrock = boto3.client('bedrock-runtime', region_name=\"us-east-1\")\n\ndef generate_video_embeddings(video_s3_uri, output_s3_uri):\n    \"\"\"Generate embeddings for a video using Nova MME async API.\"\"\"\n    \n    # Start async job\n    response = bedrock.start_async_invoke(\n        modelId=\"amazon.nova-2-multimodal-embeddings-v1:0\",\n        modelInput={\n            \"taskType\": \"SEGMENTED_EMBEDDING\",\n            \"segmentedEmbeddingParams\": {\n                \"embeddingPurpose\": \"GENERIC_INDEX\",\n                \"embeddingDimension\": 1024,\n                \"video\": {\n                    \"format\": \"mp4\",\n                    \"embeddingMode\": \"AUDIO_VIDEO_COMBINED\",\n                    \"source\": {\"s3Location\": {\"uri\": video_s3_uri}},\n                    \"segmentationConfig\": {\"durationSeconds\": 15}\n                }\n            }\n        },\n        outputDataConfig={\"s3OutputDataConfig\": {\"s3Uri\": output_s3_uri}}\n    )\n    \n    # Poll for completion\n    invocation_arn = response[\"invocationArn\"]\n    while True:\n        job = bedrock.get_async_invoke(invocationArn=invocation_arn)\n        if job[\"status\"] == \"Completed\":\n            return read_embeddings_from_s3(job[\"outputDataConfig\"][\"s3OutputDataConfig\"][\"s3Uri\"])\n        elif job[\"status\"] in [\"Failed\", \"Expired\"]:\n            raise RuntimeError(f\"Job failed: {job.get('failureMessage')}\")\n        time.sleep(10)\n\ndef manage_concurrent_jobs(bedrock_client, video_queue, max_concurrent=30):\n    \"\"\"Manage 30 concurrent async jobs within quota limits.\"\"\"\n    active_jobs = {}\n    \n    while video_queue or active_jobs:\n        # Submit new jobs up to limit (uses same start_async_invoke call as above)\n        while len(active_jobs) <\/code><\/pre>\n<h3>Etapa 4: gerar tags de metadados com Nova Pro ou Nova Lite<\/h3>\n<p>Gere tags descritivas para v\u00eddeos usando Nova Pro (ou <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/ai\/responsible-ai\/nova-2-lite\/overview.html\">Nova Lite<\/a> para melhor precis\u00e3o a um custo menor) para permitir pesquisa h\u00edbrida que combina correspond\u00eancia sem\u00e2ntica e de palavras-chave.<\/p>\n<pre><code class=\"lang-python\">VALID_TAGS = [\n    \"person\", \"vehicle\", \"animal\", \"building\", \"nature\", \"indoor\", \"outdoor\",\n    \"walking\", \"running\", \"sitting\", \"standing\", \"talking\", \"driving\",\n    \"day\", \"night\", \"sunny\", \"cloudy\", \"urban\", \"rural\", \"beach\", \"forest\",\n    \"sports\", \"music\", \"food\", \"technology\", \"crowd\", \"solo\"\n]\n\ndef generate_tags(video_s3_uri, sample_frame_count=3):\n    \"\"\"Generate descriptive tags using Nova Pro or Nova Lite.\"\"\"\n    \n    prompt = f\"\"\"Analyze this video and select 10-15 tags from this predefined list that best describe the content:\n{', '.join(VALID_TAGS)}\n\nOnly return tags from this list as a comma-separated list. Do not invent new tags.\"\"\"\n    \n    response = bedrock.converse(\n        modelId=\"us.amazon.nova-pro-v1:0\",  # Or use us.amazon.nova-2-lite-v1:0\n        messages=[{\n            \"role\": \"user\",\n            \"content\": [{\n                \"video\": {\n                    \"format\": \"mp4\",\n                    \"source\": {\"s3Location\": {\"uri\": video_s3_uri}}\n                }\n            }, {\n                \"text\": prompt\n            }]\n        }]\n    )\n    \n    # Parse tags from response and validate against taxonomy\n    tags_text = response['output']['message']['content'][0]['text']\n    tags = [tag.strip().lower() for tag in tags_text.split(',')]\n    \n    # Filter to only valid tags from our taxonomy\n    valid_tags = [tag for tag in tags if tag in VALID_TAGS]\n    \n    return valid_tags\n<\/code><\/pre>\n<h3>Etapa 5: Indexar embeddings e tags no OpenSearch Service<\/h3>\n<p>Armazene os embeddings e tags gerados no OpenSearch Service usando <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/developerguide\/indexing.html\">indexa\u00e7\u00e3o em massa<\/a> para efici\u00eancia.<\/p>\n<pre><code class=\"lang-python\">from opensearchpy import helpers\n\ndef index_video_data(video_id, s3_uri, embeddings, tags):\n    \"\"\"Index embeddings and tags in OpenSearch.\"\"\"\n    \n    # Prepare bulk actions for k-NN index\n    knn_actions = []\n    for idx, emb in enumerate(embeddings):\n        doc_id = f\"{video_id}_{idx}\"\n        knn_actions.append({\n            \"_index\": \"video-embeddings-knn\",\n            \"_id\": doc_id,\n            \"_source\": {\n                \"video_id\": video_id,\n                \"segment_index\": idx,\n                \"timestamp\": emb['start_time'],\n                \"embedding\": emb['embedding'],\n                \"s3_uri\": s3_uri\n            }\n        })\n    \n    # Bulk index embeddings\n    helpers.bulk(opensearch_client, knn_actions)\n    \n    # Prepare bulk actions for text index\n    text_actions = []\n    for idx in range(len(embeddings)):\n        doc_id = f\"{video_id}_{idx}\"\n        text_actions.append({\n            \"_index\": \"video-embeddings-text\",\n            \"_id\": doc_id,\n            \"_source\": {\n                \"video_id\": video_id,\n                \"segment_index\": idx,\n                \"tags\": \" \".join(tags)\n            }\n        })\n    \n    # Bulk index tags\n    helpers.bulk(opensearch_client, text_actions)\n    \n    print(f\"Indexed {len(embeddings)} segments for video {video_id}\")\n<\/code><\/pre>\n<h3>Etapa 6: implementar a funcionalidade de pesquisa<\/h3>\n<p>Ap\u00f3s a conclus\u00e3o da ingest\u00e3o, pesquise os v\u00eddeos indexados de tr\u00eas maneiras. A implementa\u00e7\u00e3o visa consultas de baixa lat\u00eancia.<\/p>\n<h4>Inicialize o cliente do OpenSearch Service para pesquisa<\/h4>\n<p>Primeiro, crie o cliente OpenSearch Service para opera\u00e7\u00f5es de pesquisa:<\/p>\n<pre><code class=\"lang-python\">from opensearchpy import OpenSearch, RequestsHttpConnection\nfrom requests_aws4auth import AWS4Auth\nimport boto3\n\ndef create_opensearch_client():\n    \"\"\"Create OpenSearch client with AWS authentication.\"\"\"\n    session = boto3.Session(region_name=\"us-east-1\")\n    credentials = session.get_credentials()\n    awsauth = AWS4Auth(\n        credentials.access_key,\n        credentials.secret_key,\n        'us-east-1',\n        'es',\n        session_token=credentials.token\n    )\n    \n    return OpenSearch(\n        hosts=[{'host': 'YOUR_OPENSEARCH_ENDPOINT', 'port': 443}],\n        http_auth=awsauth,\n        use_ssl=True,\n        verify_certs=True,\n        connection_class=RequestsHttpConnection,\n        timeout=30\n    )\n\n# Create client\nopensearch_client = create_opensearch_client()\n<\/code><\/pre>\n<h4>Pesquisa sem\u00e2ntica de texto para v\u00eddeo<\/h4>\n<p>Converta consultas de linguagem natural em incorpora\u00e7\u00f5es usando a API de sincroniza\u00e7\u00e3o e, em seguida, execute uma pesquisa de similaridade k-NN:<\/p>\n<pre><code class=\"lang-python\">def search_text_to_video(query_text, opensearch_client, k=10):\n    \"\"\"Search videos using natural language query converted to embedding.\"\"\"\n    \n    bedrock_client = boto3.client('bedrock-runtime', region_name=\"us-east-1\")\n    \n    # Use SINGLE_EMBEDDING task type for text-to-embedding conversion\n    # VIDEO_RETRIEVAL purpose optimizes embeddings for searching video content\n    request_body = {\n        \"taskType\": \"SINGLE_EMBEDDING\",\n        \"singleEmbeddingParams\": {\n            \"embeddingPurpose\": \"VIDEO_RETRIEVAL\",\n            \"embeddingDimension\": 1024,\n            \"text\": {\n                \"truncationMode\": \"END\",\n                \"value\": query_text\n            }\n        }\n    }\n    \n    response = bedrock_client.invoke_model(\n        modelId='amazon.nova-2-multimodal-embeddings-v1:0',\n        body=json.dumps(request_body),\n        accept=\"application\/json\",\n        contentType=\"application\/json\"\n    )\n    \n    response_body = json.loads(response['body'].read())\n    # Response structure: {\"embeddings\": [{\"embeddingType\": \"TEXT\", \"embedding\": [...]}]}\n    query_embedding = response_body['embeddings'][0]['embedding']\n    \n    # Perform k-NN search against video embeddings\n    search_body = {\n        \"query\": {\n            \"knn\": {\n                \"embedding\": {\n                    \"vector\": query_embedding,\n                    \"k\": k\n                }\n            }\n        },\n        \"size\": k,\n        \"_source\": [\"video_id\", \"segment_index\", \"timestamp\", \"s3_uri\"]\n    }\n    \n    response = opensearch_client.search(\n        index=\"video-embeddings-knn\",\n        body=search_body\n    )\n    \n    # Extract results\n    return [{'score': hit['_score'], \n             'video_id': hit['_source']['video_id'],\n             'segment_index': hit['_source']['segment_index'],\n             'timestamp': hit['_source'].get('timestamp', 0)} \n            for hit in response['hits']['hits']]\n<\/code><\/pre>\n<h4>Pesquisa de texto com BM25 (correspond\u00eancia de palavras-chave)<\/h4>\n<p>Use a pontua\u00e7\u00e3o OpenSearch BM25 para correspond\u00eancia de palavras-chave em tags sem gerar embeddings:<\/p>\n<pre><code class=\"lang-python\">def search_text_bm25(search_term, opensearch_client, k=10):\n    \"\"\"Search videos using BM25 keyword matching on tags field.\"\"\"\n    \n    # Search text index using match query on tags\n    search_body = {\n        \"query\": {\n            \"match\": {\n                \"tags\": search_term\n            }\n        },\n        \"size\": k,\n        \"_source\": [\"video_id\", \"segment_index\", \"tags\"]\n    }\n    \n    response = opensearch_client.search(\n        index=\"video-embeddings-text\",\n        body=search_body\n    )\n    \n    return response['hits']['hits']  # Extract results (same pattern as above)\n<\/code><\/pre>\n<h4>Pesquisa v\u00eddeo a v\u00eddeo<\/h4>\n<p>Recupere a incorpora\u00e7\u00e3o de um v\u00eddeo existente do OpenSearch Service e pesquise conte\u00fado semelhante \u2013 n\u00e3o \u00e9 necess\u00e1ria nenhuma chamada de API do Amazon Bedrock:<\/p>\n<pre><code class=\"lang-python\">def search_video_to_video(query_video_id, query_segment_index, opensearch_client, k=10):\n    \"\"\"Find similar videos using a reference video segment.\"\"\"\n    \n    # Get the embedding from the reference video segment\n    sample_query = {\n        \"query\": {\n            \"bool\": {\n                \"must\": [\n                    {\"term\": {\"video_id\": query_video_id}},\n                    {\"term\": {\"segment_index\": query_segment_index}}\n                ]\n            }\n        },\n        \"_source\": [\"video_id\", \"segment_index\", \"embedding\"]\n    }\n    \n    sample_response = opensearch_client.search(\n        index=\"video-embeddings-knn\",\n        body=sample_query\n    )\n    \n    if not sample_response['hits']['hits']:\n        return []\n    \n    sample_doc = sample_response['hits']['hits'][0]['_source']\n    query_embedding = sample_doc.get('embedding')\n    \n    # Perform k-NN search with the embedding\n    search_body = {\n        \"query\": {\n            \"knn\": {\n                \"embedding\": {\n                    \"vector\": query_embedding,\n                    \"k\": k\n                }\n            }\n        },\n        \"size\": k,\n        \"_source\": [\"video_id\", \"segment_index\", \"timestamp\"]\n    }\n    \n    response = opensearch_client.search(\n        index=\"video-embeddings-knn\",\n        body=search_body\n    )\n    \n    return response['hits']['hits']  # Extract results as needed\n<\/code><\/pre>\n<h4>Pesquisa h\u00edbrida<\/h4>\n<p>Combine a correspond\u00eancia sem\u00e2ntica de palavras-chave k-NN e BM25 recuperando resultados de ambos os \u00edndices e mesclando com pontua\u00e7\u00e3o ponderada:<\/p>\n<pre><code class=\"lang-python\">def search_hybrid(query_text, opensearch_client, k=10, vector_weight=0.7, text_weight=0.3):\n    \"\"\"Hybrid search combining k-NN semantic search and BM25 text matching.\"\"\"\n    \n    # Generate query embedding (use same code as search_text_to_video above)\n    query_embedding = generate_query_embedding(query_text)  # See text-to-video example\n    \n    # Get k-NN results (same query as search_text_to_video)\n    knn_response = opensearch_client.search(\n        index=\"video-embeddings-knn\",\n        body={\"query\": {\"knn\": {\"embedding\": {\"vector\": query_embedding, \"k\": 20}}}, \"size\": 20}\n    )\n    \n    # Get BM25 text results (same query as search_text_bm25)\n    text_response = opensearch_client.search(\n        index=\"video-embeddings-text\",\n        body={\"query\": {\"match\": {\"tags\": query_text}}, \"size\": 20}\n    )\n    \n    # Combine results with weighted scoring\n    knn_hits = knn_response['hits']['hits']\n    text_hits = text_response['hits']['hits']\n    \n    combined = {}\n    \n    for hit in knn_hits:\n        vid = hit['_source']['video_id']\n        seg = hit['_source']['segment_index']\n        key = f\"{vid}_{seg}\"\n        combined[key] = {\n            'video_id': vid,\n            'segment_index': seg,\n            'tags': hit['_source'].get('tags', ''),\n            'vector_score': hit['_score'],\n            'text_score': 0,\n            'combined_score': hit['_score'] * vector_weight\n        }\n    \n    for hit in text_hits:\n        vid = hit['_source']['video_id']\n        seg = hit['_source']['segment_index']\n        key = f\"{vid}_{seg}\"\n        if key in combined:\n            combined[key]['text_score'] = hit['_score']\n            combined[key]['combined_score'] += hit['_score'] * text_weight\n        else:\n            combined[key] = {\n                'video_id': vid,\n                'segment_index': seg,\n                'tags': hit['_source'].get('tags', ''),\n                'vector_score': 0,\n                'text_score': hit['_score'],\n                'combined_score': hit['_score'] * text_weight\n            }\n    \n    # Sort by combined score and return top k\n    sorted_results = sorted(combined.values(), key=lambda x: x['combined_score'], reverse=True)[:k]\n    \n    return sorted_results\n\n# Usage example - search with natural language query\nquery = \"person walking on beach at sunset\"\nhybrid_results = search_hybrid(query, opensearch_client, k=10)\n\nfor r in hybrid_results:\n    print(f\"Combined: {r['combined_score']:.4f} (Vector: {r['vector_score']:.4f}, Text: {r['text_score']:.4f})\")\n    print(f\"  Video: {r['video_id']}, Segment: {r['segment_index']}\")\n    print(f\"  Tags: {r['tags']}\\n\")\n<\/code><\/pre>\n<h3>Desempenho de pesquisa em escala<\/h3>\n<p>Depois de indexar todos os 792.218 v\u00eddeos, medimos o desempenho da pesquisa em todos os tr\u00eas m\u00e9todos.<\/p>\n<p><strong>As lat\u00eancias de consulta medidas em 792.218 v\u00eddeos s\u00e3o as seguintes:<\/strong><\/p>\n<ul>\n<li>Pesquisa sem\u00e2ntica k-NN: ~76ms (usando <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/blogs\/big-data\/choose-the-k-nn-algorithm-for-your-billion-scale-use-case-with-opensearch\/\">HNSW<\/a> escala logar\u00edtmica)<\/li>\n<li><a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.opensearch.org\/latest\/im-plugin\/similarity\/\">BM25<\/a> pesquisa de texto: ~30ms<\/li>\n<li>Pesquisa h\u00edbrida: ~106ms<\/li>\n<\/ul>\n<p>Ap\u00f3s indexar e armazenar todos os 792.218 v\u00eddeos e gerar embeddings, os requisitos de armazenamento s\u00e3o os seguintes:<\/p>\n<ul>\n<li>\u00cdndice k-NN: 28,8 GB para v\u00eddeos de 792K<\/li>\n<li>\u00cdndice de texto: 1,0 GB para v\u00eddeos de 792K<\/li>\n<li>Total: 29,8 GB (gerenci\u00e1vel em clusters OpenSearch modernos)<\/li>\n<\/ul>\n<p>O algoritmo Hierarchical Navigable Small World (HNSW) usado para pesquisa k-NN fornece complexidade de tempo logar\u00edtmica, o que significa que os tempos de pesquisa crescem lentamente \u00e0 medida que o conjunto de dados aumenta. Todos os tr\u00eas m\u00e9todos de pesquisa mant\u00eam tempos de resposta inferiores a 200 ms, mesmo em escala de v\u00eddeo de 792K, atendendo aos requisitos de produ\u00e7\u00e3o para aplica\u00e7\u00f5es de pesquisa interativas.<\/p>\n<h2>Coisas para saber<\/h2>\n<h3>Considera\u00e7\u00f5es de desempenho e custo<\/h3>\n<p>O tempo de processamento do v\u00eddeo depende da dura\u00e7\u00e3o do v\u00eddeo. Em nossos testes, um v\u00eddeo de 45 segundos levou aproximadamente 70 segundos para ser processado usando a API ass\u00edncrona. O processamento inclui segmenta\u00e7\u00e3o autom\u00e1tica, gera\u00e7\u00e3o de incorpora\u00e7\u00e3o para cada segmento e sa\u00edda para o Amazon S3. As opera\u00e7\u00f5es de pesquisa s\u00e3o escalonadas com efici\u00eancia: nossos testes mostram que, mesmo em v\u00eddeos de 792 mil, a pesquisa sem\u00e2ntica \u00e9 conclu\u00edda em menos de 80 ms, a pesquisa de texto em menos de 30 ms e a pesquisa h\u00edbrida em menos de 11 0 ms. Use incorpora\u00e7\u00f5es de 1.024 dimens\u00f5es em vez de 3.072 para reduzir os custos de armazenamento e, ao mesmo tempo, manter a precis\u00e3o. A Nova Multimodal Embeddings cobra por segundo de entrada de v\u00eddeo (US$ 0,00056\/lote de segundo), portanto, a dura\u00e7\u00e3o do v\u00eddeo \u2014 e n\u00e3o a dimens\u00e3o de incorpora\u00e7\u00e3o ou segmenta\u00e7\u00e3o \u2014 determina o custo de processamento. A API ass\u00edncrona \u00e9 mais econ\u00f4mica do que processar quadros individualmente. Para o OpenSearch Service, o uso de inst\u00e2ncias r6g oferece melhor rela\u00e7\u00e3o custo-desempenho do que os tipos de inst\u00e2ncia anteriores, e voc\u00ea pode implementar camadas para mover dados frios para o Amazon S3 para obter economias adicionais.<\/p>\n<h3>Escalando para produ\u00e7\u00e3o<\/h3>\n<p>Para implanta\u00e7\u00f5es de produ\u00e7\u00e3o com grandes videotecas, considere usar <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/batch\/\">Lote AWS<\/a> para processar v\u00eddeos em paralelo em v\u00e1rias inst\u00e2ncias de computa\u00e7\u00e3o. Voc\u00ea pode particionar seu conjunto de dados de v\u00eddeo e atribuir subconjuntos a diferentes trabalhadores. Monitor <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/developerguide\/managedomains-cloudwatchmetrics.html\">Integridade do cluster do OpenSearch Service<\/a> e dimensione n\u00f3s de dados \u00e0 medida que seu \u00edndice cresce. A arquitetura de dois \u00edndices \u00e9 bem dimensionada porque as pesquisas k-NN e de texto podem ser otimizadas de forma independente.<\/p>\n<h3>Ajuste de precis\u00e3o de pesquisa<\/h3>\n<p>Ajuste os pesos da pesquisa h\u00edbrida com base no seu caso de uso. A divis\u00e3o padr\u00e3o 0,7\/0,3 (vetor\/texto) favorece a similaridade sem\u00e2ntica para a maioria dos cen\u00e1rios. Se voc\u00ea tiver tags de metadados de alta qualidade, aumentar a espessura do texto para 0,5 pode melhorar os resultados. Recomendamos que voc\u00ea teste diferentes configura\u00e7\u00f5es com seu conte\u00fado espec\u00edfico para encontrar um equil\u00edbrio.<\/p>\n<h2>Limpar<\/h2>\n<p>Para evitar cobran\u00e7as cont\u00ednuas, exclua os recursos que voc\u00ea criou:<\/p>\n<ol>\n<li>Exclua o <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/opensearch-service\/latest\/developerguide\/delete-domain.html\">Dom\u00ednio do servi\u00e7o OpenSearch<\/a> no console do Amazon OpenSearch Service<\/li>\n<li>Esvazie e exclua o <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/AmazonS3\/latest\/userguide\/delete-bucket.html\">Baldes S3<\/a> usado para v\u00eddeos e incorpora\u00e7\u00f5es<\/li>\n<li>Exclua qualquer <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/docs.aws.amazon.com\/IAM\/latest\/UserGuide\/id_roles_manage_delete.html\">Fun\u00e7\u00f5es do IAM<\/a> criado especificamente para esta solu\u00e7\u00e3o<\/li>\n<\/ol>\n<p>Observe que as cobran\u00e7as do Amazon Bedrock s\u00e3o baseadas no uso, portanto, nenhuma limpeza \u00e9 necess\u00e1ria para os pr\u00f3prios modelos do Amazon Bedrock.<\/p>\n<h2>Conclus\u00e3o<\/h2>\n<p>Este passo a passo abordou a constru\u00e7\u00e3o de um sistema de pesquisa de v\u00eddeo multimodal para consultas em linguagem natural em conte\u00fado de v\u00eddeo. A solu\u00e7\u00e3o usa modelos Amazon Bedrock Nova para gerar embeddings. Esses embeddings capturam informa\u00e7\u00f5es de \u00e1udio e visuais, armazenam-nas de forma eficiente no OpenSearch Service usando uma arquitetura de dois \u00edndices e fornecem tr\u00eas modos de pesquisa para diferentes casos de uso. A abordagem de processamento ass\u00edncrono \u00e9 dimensionada para lidar com grandes bibliotecas de v\u00eddeo, e o recurso de pesquisa h\u00edbrida combina correspond\u00eancia sem\u00e2ntica e baseada em palavras-chave para m\u00e1xima precis\u00e3o. Voc\u00ea pode ampliar essa base adicionando recursos como pesquisa de similaridade entre v\u00eddeos, implementando armazenamento em cache para consultas pesquisadas com frequ\u00eancia ou integrando-se ao AWS Batch para processamento paralelo de grandes conjuntos de dados.<\/p>\n<p>Para saber mais sobre as tecnologias utilizadas nesta solu\u00e7\u00e3o, consulte <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/blogs\/aws\/amazon-nova-multimodal-embeddings-now-available-in-amazon-bedrock\/\">Incorpora\u00e7\u00f5es multimodais do Amazon Nova<\/a> e <a target=\"_blank\" rel=\"nofollow\" target=\"_blank\" href=\"https:\/\/aws.amazon.com\/blogs\/big-data\/hybrid-search-with-amazon-opensearch-service\/\">Pesquisa h\u00edbrida com Amazon OpenSearch Service<\/a>.<\/p>\n<hr \/>\n<h2>Sobre os autores<\/h2>\n<footer>\n<div class=\"blog-author-box\">\n<div class=\"blog-author-image\">\n          <img decoding=\"async\" loading=\"lazy\" class=\"alignnone wp-image-125849 size-thumbnail\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2026\/03\/09\/l-ml-200123-100x133.png\" alt=\"\" width=\"100\" height=\"133\" \/>\n         <\/div>\n<h3 class=\"lb-h4\">Hammad Ausaf<\/h3>\n<p>Hammad \u00e9 arquiteto principal de solu\u00e7\u00f5es em m\u00eddia e entretenimento. Ele \u00e9 um construtor apaixonado e se esfor\u00e7a para fornecer as melhores solu\u00e7\u00f5es aos clientes da AWS.<\/p>\n<\/p>\n<\/div>\n<div class=\"blog-author-box\">\n<div class=\"blog-author-image\">\n          <img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-thumbnail wp-image-125850\" src=\"https:\/\/d2908q01vomqb2.cloudfront.net\/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59\/2026\/03\/09\/l-ml-200124-100x90.png\" alt=\"\" width=\"100\" height=\"90\" \/>\n         <\/div>\n<h3 class=\"lb-h4\">Rajat Jain<\/h3>\n<p>Rajat \u00e9 gerente t\u00e9cnico de contas em m\u00eddia e entretenimento. Ele \u00e9 um entusiasta de GenAI\/ML e adora construir novas solu\u00e7\u00f5es.<\/p>\n<\/p>\n<\/div>\n<\/footer>\n<p>       <!-- '\"` -->\n      <\/div>\n<p><em>  &#8216;O artigo anterior pode incluir informa\u00e7\u00f5es divulgadas por terceiros&#8217; <\/em><\/p>\n<p><em>  &#8216;Alguns detalhes deste artigo foram extra\u00eddos da seguinte fonte aws.amazon.com&#8217; <\/em><\/p>\n<p><em> \u2018 O artigo anterior foi obtido e traduzido do site internacional da celebrity.land   \u2019 Source Link <\/em><\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>Esta postagem mostra como construir um sistema de pesquisa de v\u00eddeo multimodal escalon\u00e1vel que permite a pesquisa em linguagem natural em grandes conjuntos de dados de v\u00eddeo usando Amaz\u00f4nia Nova modelos e Servi\u00e7o Amazon OpenSearch. Voc\u00ea aprender\u00e1 como ir al\u00e9m da marca\u00e7\u00e3o manual e das pesquisas baseadas em palavras-chave para permitir a pesquisa sem\u00e2ntica que [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1658176,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jnews-multi-image_gallery":[],"jnews_single_post":[],"jnews_primary_category":[],"jnews_override_counter":[],"footnotes":""},"categories":[45],"tags":[],"class_list":["post-1658175","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-entretenimento"],"_links":{"self":[{"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/posts\/1658175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/comments?post=1658175"}],"version-history":[{"count":1,"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/posts\/1658175\/revisions"}],"predecessor-version":[{"id":1658177,"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/posts\/1658175\/revisions\/1658177"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/media\/1658176"}],"wp:attachment":[{"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/media?parent=1658175"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/categories?post=1658175"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/celebrity.land\/pt\/wp-json\/wp\/v2\/tags?post=1658175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}