O Intelligent Media Management (IMM) usa um modelo de recuperação vetorial semântica para buscar dados de mídia com base no significado. Este tópico descreve como usar a recuperação semântica.
Descrição do recurso
O método tradicional de recuperação escalar depende de atributos de metadados, como nome do arquivo, data de criação e formato, para localizar informações. Diferentemente da recuperação escalar, a recuperação semântica emprega um método vetorial para buscar informações com base no significado ou na semântica do conteúdo, como "vista aérea de florestas", "cidade coberta de neve" e "campo no verão passado". Use o recurso de recuperação semântica para buscar dados armazenados no Object Storage Service (OSS) e no Photo and Drive Service.
Cenários
Busca de arquivos de trabalho
Pesquise os arquivos de trabalho desejados com base no conteúdo semântico ou em palavras-chave, como "instruções do sistema ERP", "processo de reparo de dispositivos" e "análise de operações comerciais de 2024". A recuperação semântica facilita a localização de arquivos e aumenta a eficiência no trabalho.
Recuperação multimídia
Integre capacidades rápidas e eficientes de pesquisa e recuperação de dados de mídia às suas aplicações de rede multimídia por meio da recuperação semântica. Por exemplo, implemente esse recurso em uma aplicação de rede social com muitas imagens para permitir que os usuários busquem fotos usando descrições semânticas como "passeio no subúrbio na última primavera", "reunião do Ano Novo Chinês" e "minhas experiências no oceano". Isso proporciona maior conveniência e diversão.
Armazenamento online
Muitos serviços de armazenamento online oferecem pesquisa de arquivos baseada em escalares, utilizando atributos como nomes de arquivos, datas de criação e extensões. Com a recuperação semântica, recupere tipos específicos de dados, como documentos e imagens, de forma eficiente com base no conteúdo semântico.
Recuperação de vídeos de vigilância
Pesquise e recupere vídeos de vigilância usando palavras-chave semânticas, como "vídeo de vigilância externo com neve ontem" e "pomar em dias ensolarados", por meio da recuperação semântica.
Limites
A recuperação semântica suporta apenas imagens e documentos.
Este recurso está disponível somente na região China (Pequim).
A recuperação semântica suporta os seguintes formatos de imagem: JPG, PNG, BMP, GIF, WebP, TIFF, HEIC e AVIF.
O recurso aceita imagens de até 20 MB, cuja largura ou altura não exceda 30.000 pixels e o número total de pixels não ultrapasse 250 milhões. O cálculo do total de pixels de uma imagem dinâmica, como um GIF, segue a fórmula: Largura × Altura × Número de quadros. Para imagens estáticas, como PNG, a fórmula é: Largura × Altura.
O limite de caracteres de um documento é 300.000. Os caracteres que excederem esse limite serão truncados.
A indexação e a análise de dados ocorrem de forma assíncrona. Ao chamar operações de API de indexação, como IndexFileMeta, para criar um índice, use um callback para verificar se a análise foi concluída. O tempo necessário para a análise varia de segundos a minutos, dependendo do tipo, tamanho e complexidade dos dados. Após a conclusão da análise, o mecanismo de armazenamento cria um índice, processo que leva alguns segundos. Somente depois da criação do índice será possível buscar os dados via recuperação semântica.
Pré-requisitos
Crie um índice com base nos metadados do seu cenário de aplicação. Para mais informações, consulte Criar um índice de metadados.
Para o conjunto de dados, selecione o modelo de fluxo de trabalho "Official:CognitionImageManagement" ou "Official:CognitionDocumentManagement". Esses modelos correspondem à recuperação semântica para imagens e documentos, respectivamente.
Caso não precise mais da recuperação semântica, recomendamos excluir o conjunto de dados. Um conjunto de dados extrai metadados do OSS de forma automática e contínua, o que gera taxas de chamada de API.
Faturamento
Faturamento do IMM: A recuperação semântica gera taxas relacionadas ao gerenciamento de metadados. Para mais informações, consulte Itens faturáveis.
Ao usar a recuperação semântica, selecione o modelo de fluxo de trabalho "Official:CognitionImageManagement" ou "Official:CognitionDocumentManagement" para o seu conjunto de dados. Esses modelos destinam-se à recuperação semântica de imagens e documentos, respectivamente, e contêm vários operadores. O operador de recuperação semântica é gratuito, mas os demais operadores são faturados. Para mais detalhes sobre o mapeamento entre modelos e operadores, consulte Modelos de fluxo de trabalho e operadores.
Faturamento do OSS: Para mais informações, consulte Visão geral do faturamento.
Uso
Chame a operação SemanticQuery para pesquisar os metadados no conjunto de dados test-dataset dentro do projeto test-project.
Recuperação semântica de imagens
Por exemplo, suponha que um álbum contenha muitas fotos de viagem, incluindo algumas de pandas tiradas na Base de Pesquisa de Reprodução de Pandas Gigantes de Chengdu em julho de 2020. Para encontrar essas fotos usando recuperação semântica, crie um conjunto de dados para indexar os metadados das imagens. Em seguida, use uma consulta por palavra-chave como "Pandas em Chengdu em julho de 2020" para recuperá-las.
O exemplo a seguir demonstra como buscar arquivos que contenham "Pandas em Chengdu em julho de 2020" no conjunto de dados test-dataset do projeto test-project:
Exemplo de solicitação
{
"ProjectName": "test-project",
"DatasetName": "test-dataset",
"Query": "Pandas in Chengdu in July 2020"
}
Exemplo de resposta
{
"RequestId": "645FB6D9-5EA0-02C9-B253-****",
"Files": [
{
"ProduceTime": "2020-07-19T17:11:11+08:00",
"ObjectACL": "default",
"ContentType": "image/jpeg",
"ProjectName": "test-project",
"Size": 22868,
"URI": "oss://test-bucket/test-object.jpg",
"Addresses": [
{
"Language": "zh-Hans",
"Township": "Sanhe Sub-district",
"AddressLine": "Chengdu Research Base of Giant Panda Breeding, Sanhe Sub-district, Xindu District, Chengdu City, Sichuan Province",
"Country": "China",
"City": "Chengdu",
"District": "Xindu District",
"Province": "Sichuan Province"
}
],
"ObjectType": "file",
"OwnerId": "****",
"FileModifiedTime": "2021-05-13T10:22:44+08:00",
"ImageWidth": 270,
"OSSStorageClass": "Standard",
"MediaType": "image",
"ObjectId": "****",
"CreateTime": "2022-07-06T07:10:18.497753661+08:00",
"Filename": "1.jpg",
"Labels": [
{
"CentricScore": 0.757,
"Language": "zh-Hans",
"LabelConfidence": 0.946,
"LabelName": "Panda",
"LabelLevel": 2,
"ParentLabelName": "Wildlife"
},
...
],
"Orientation": 1,
"EXIF": "...",
"ContentMd5": "HZwoCnxPZ/fvhz4oRJ****",
"ImageHeight": 270,
"ImageScore": {
"OverallQualityScore": 0.719
},
"ETag": "\"1D9C280A7C4F67F7EF873E28449D****\"",
"DatasetName": "test-dataset",
"FileHash": "\"1D9C280A7C4F67F7EF873E2****\"",
"UpdateTime": "2022-07-06T07:10:18.497753661+08:00",
"OSSCRC64": "5634447745650079669",
"OSSTaggingCount": 0,
"LatLong": "34.000000,119.000000",
"OSSObjectType": "Normal"
}
]
}
Exemplo de código (IMM SDK for Python 1.27.3)
# -*- coding: utf-8 -*-
import os
from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> imm20200930Client:
"""
Use your AccessKey ID and AccessKey secret to initialize the client.
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main() -> None:
# The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. To prevent security risks, we recommend that you call API operations or perform routine O&M as a RAM user.
# We recommend that you do not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all the resources within your account may be compromised.
# In this example, the AccessKey pair is read from the environment variables to implement identity verification for API access. For information about how to configure environment variables, visit https://www.alibabacloud.com/help/document_detail/2361894.html.
imm_access_key_id = os.getenv("AccessKeyId")
imm_access_key_secret = os.getenv("AccessKeySecret")
client = Sample.create_client(imm_access_key_id, imm_access_key_secret)
semantic_query_request = imm_20200930_models.SemanticQueryRequest(
query='Pandas in Chengdu in July 2020',
project_name='test-project',
dataset_name='test-dataset',
max_results=100
)
runtime = util_models.RuntimeOptions()
try:
# Print the response of the API operation.
response = client.semantic_query_with_options(semantic_query_request, runtime)
print(response.body.to_map())
except Exception as error:
# Print the error message if necessary.
UtilClient.assert_as_string(error.message)
print(error)
if __name__ == '__main__':
Sample.main()
Recuperação semântica de documentos
Suponha que você armazene diversos documentos em um serviço de armazenamento online. Para recuperar um documento sobre o processo de serviço de TI usando recuperação semântica, crie um conjunto de dados para indexar os documentos e use palavras-chave como "processo de serviço de TI" na busca.
O exemplo abaixo mostra como pesquisar arquivos contendo "IT service process" no conjunto de dados test-dataset do projeto test-project com os seguintes parâmetros de solicitação:
Exemplo de solicitação
{
"ProjectName": "test-project",
"DatasetName": "test-dataset",
"MediaTypes": ["document"],
"Query": "IT service process"
}
Exemplo de resposta
{
"RequestId": "CD870E69-D2E8-031B-BD3E-****",
"Files": [
{
"ObjectACL": "default",
"ContentType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
"ProjectName": "test-project",
"ObjectId": "2f66ba6e902e5ad42341a9e7365b19f6130d4a077e4f57150450e281d0b7afd9",
"Size": 28340,
"CreateTime": "2024-03-08T10:13:19.569053164+08:00",
"Filename": "3839a9a0-c630-420d-ae69-ea24792412fd.docx",
"URI": "oss://test-bucket/test-object.docx",
"ObjectType": "file",
"ContentMd5": "Y7SmYa831Hq1qryuRyl6mg==",
"OwnerId": "****",
"FileModifiedTime": "2024-01-10T16:18:31+08:00",
"ETag": "\"63B4A661AF37D47AB5AABCAE47297A9A\"",
"DatasetName": "test-dataset",
"FileHash": "63B4A661AF37D47AB5AABCAE47297A9A",
"UpdateTime": "2024-03-08T10:13:19.569053164+08:00",
"OSSStorageClass": "Standard",
"MediaType": "document",
"OSSCRC64": "6833019149643646551",
"OSSTaggingCount": 0,
"OSSObjectType": "Normal"
}
]
}
Exemplo de código (IMM SDK for Python 1.27.3)
# -*- coding: utf-8 -*-
import os
from alibabacloud_imm20200930.client import Client as imm20200930Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_imm20200930 import models as imm_20200930_models
from alibabacloud_tea_util import models as util_models
from alibabacloud_tea_util.client import Client as UtilClient
class Sample:
def __init__(self):
pass
@staticmethod
def create_client(
access_key_id: str,
access_key_secret: str,
) -> imm20200930Client:
"""
Initializes a client using an AccessKey ID and an AccessKey Secret.
@param access_key_id:
@param access_key_secret:
@return: Client
@throws Exception
"""
config = open_api_models.Config(
access_key_id=access_key_id,
access_key_secret=access_key_secret
)
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main() -> None:
# We recommend using a RAM user for API calls and routine O&M, as this is more secure. An AccessKey pair from an Alibaba Cloud account grants full permissions on all API operations.
# To prevent security risks, do not hard-code the AccessKey ID and AccessKey Secret in your code. We recommend that you obtain the AccessKey pair from environment variables.
# In this example, the AccessKey pair is obtained from environment variables. For more information about how to configure environment variables, see https://www.alibabacloud.com/help/document_detail/2361894.html.
imm_access_key_id = os.getenv("AccessKeyId")
imm_access_key_secret = os.getenv("AccessKeySecret")
client = Sample.create_client(imm_access_key_id, imm_access_key_secret)
semantic_query_request = imm_20200930_models.SemanticQueryRequest(
query='IT service process',
project_name='test-project',
dataset_name='test-dataset',
media_types=['document'],
max_results=100
)
runtime = util_models.RuntimeOptions()
try:
# Prints the API response.
response = client.semantic_query_with_options(semantic_query_request, runtime)
print(response.body.to_map())
except Exception as error:
# Prints the error message if an exception is caught.
UtilClient.assert_as_string(error.message)
print(error)
if __name__ == '__main__':
Sample.main()