Os métodos comuns de compressão de nuvem de pontos incluem amostragem, ajuste de formas geométricas e o método octree. Este tópico descreve como compactar dados de nuvem de pontos com o método octree.
Visão geral
Uma nuvem de pontos é um conjunto formado por muitos pontos. Armazenar nuvens de pontos consome muita memória e não é ideal para transmissão. A largura de banda disponível geralmente é insuficiente para transmitir diretamente nuvens de pontos não compactadas na camada de rede. Por isso, a compactação dessas nuvens é necessária. O recurso de compressão de nuvem de pontos do Intelligent Media Management (IMM) analisa e processa as informações espaço-temporais dos dados da nuvem de pontos. Isso reduz significativamente o volume de dados e os custos de armazenamento, oferecendo uma solução de codificação e decodificação em tempo real e de alta qualidade para esses dados.
Cenários
A compressão de nuvem de pontos aplica-se aos seguintes cenários.
|
Cenário |
Descrição |
|
Condução autônoma |
Compacta dados de nuvem de pontos gerados por varreduras de radar em cenários de condução autônoma. |
|
Patrimônio cultural digital |
Oferece uma solução de compressão para informações de nuvem de pontos de relíquias culturais em cenários de patrimônio digital. |
|
Cidade inteligente |
Compacta eficazmente informações de nuvem de pontos provenientes da reconstrução 3D de cidades, permitindo renderização e exibição fluidas dos dados. |
|
Realidade mista |
Fornece capacidades de codificação e decodificação em tempo real para dados de nuvem de pontos em cenários de realidade mista. |
Pré-requisitos
Crie um par de AccessKey. Para mais informações, consulte Criar um par de AccessKey.
Ative o OSS, crie um bucket e faça upload de arquivos para esse bucket. Para mais informações, consulte Fazer upload de arquivos.
Ative o IMM. Para mais informações, consulte Ativar o IMM.
-
Crie um projeto no console do IMM. Para mais informações, consulte Criar um projeto.
NotaTambém é possível chamar a operação CreateProject para criar um projeto. Para mais informações, consulte Criar um projeto.
Chame a operação ListProjects para listar todos os projetos em uma região especificada.
Procedimento
Chame a operação CreateCompressPointCloudTask para compactar dados de nuvem de pontos.
As informações da tarefa são retidas por apenas sete dias. Após esse período, não é mais possível recuperá-las. Para obter as informações da tarefa prontamente, utilize um dos seguintes métodos:
Chame a operação GetTask ou ListTasks para visualizar as informações da tarefa.
Ative o Message Service (MNS) na mesma região do Intelligent Media Management (IMM) e configure uma assinatura para receber notificações rápidas sobre a tarefa. Para mais informações sobre o formato de notificação assíncrona, consulte Formato de mensagem de notificação assíncrona. Para mais informações sobre o SDK do MNS, consulte Etapa 4: Receber e excluir mensagens.
Ative o ApsaraMQ for RocketMQ na mesma região do IMM e crie uma instância do RocketMQ 4.0, um tópico e um grupo de consumidores para receber notificações rápidas sobre a tarefa. Para mais informações sobre o formato de notificação assíncrona, consulte Formato de mensagem de notificação assíncrona. Para mais informações sobre como usar o ApsaraMQ for RocketMQ, consulte Usar SDKs HTTP para enviar e receber mensagens normais.
Ative e integre o EventBridge na mesma região do IMM para receber notificações rápidas sobre a tarefa. Para mais informações, consulte Eventos do Intelligent Media Management (IMM).
Informações de compressão
Nome do projeto: test-project
URI do OSS do arquivo de nuvem de pontos: oss://test-bucket/test-object.pcd
Algoritmo de compressão: Octree
URI do OSS do arquivo de saída: oss://test-bucket/test-target-object
Visão geral do algoritmo de compressão
O Octree é um algoritmo de compressão comum, utilizado principalmente para comprimir e representar dados 3D. Ele divide um espaço 3D em uma série de cubos de tamanho igual. Cada cubo se subdivide em oito subcubos, que podem ser divididos novamente em subcubos menores, e assim sucessivamente.
Ao armazenar apenas os nós com dados válidos, o método octree reduz significativamente o espaço de armazenamento. Esse método é frequentemente usado para comprimir e representar dados 3D, como dados de nuvem de pontos e dados volumétricos. Ao selecionar estratégias adequadas de divisão e mesclagem, você diminui a sobrecarga de armazenamento e transmissão, mantendo a precisão dos dados.
Exemplo de solicitação
{
"ProjectName": "test-project",
"SourceURI": "oss://test-bucket/test-object.pcd",
"UserData": "{\"ID\":\"testuid\",\"Name\": \"test-user\",\"Avatar\": \"http://test.com/testuid\"}",
"TargetURI": "oss://test-bucket/test-target-object",
"PointCloudFileFormat": "pcd",
"CompressMethod": "octree",
"PointCloudFields": "[\"xyz\"]",
"OctreeOption": "{\"PointResolution\": 0.001, \"OctreeResolution\": 0.01, \"DoVoxelGridDownDownSampling\": false, \"LibraryName\": \"pcl\"}",
"KdtreeOption": "{\"CompressionLevel\": 8, \"QuantizationBits\": 10, \"LibraryName\": \"draco\"}"
}
Exemplo de resposta
{
"TaskId": "PointCloudCompress-091d9b4a-8726-47bf-b699-d24c7daff63c",
"RequestId": "8B0EEA2E-35FE-500F-BCDB-E2E7CA11DF7A",
"EventId": "180-1S7Q8gHbVXJf2lekgesKvlNM1VR"
}
Código de exemplo
O código de exemplo a seguir mostra como compactar uma nuvem de pontos usando o SDK para Python.
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import os
import sys
from typing import List
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
)
# Specify the endpoint of IMM.
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
# An Alibaba Cloud account AccessKey has permissions to call all API operations. We recommend that you use a Resource Access Management (RAM) user to call API operations or perform routine O&M.
# We strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. This may cause an AccessKey leak and threaten the security of all resources in your account.
# This example shows how to obtain an AccessKey from an environment variable for identity verification when you call an API operation.
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)
octree_option = imm_20200930_models.OctreeOption(
point_resolution=0.001,
octree_resolution=0.01,
do_voxel_grid_down_down_sampling=False,
library_name='pcl'
)
create_compress_point_cloud_task_request = imm_20200930_models.CreateCompressPointCloudTaskRequest(
source_uri='oss://test-bucket/test-object.pcd',
target_uri='oss://test-bucket/test-target-object',
point_cloud_file_format='pcd',
compress_method='octree',
point_cloud_fields=[
'[\"xyz\"]'
],
project_name='test-project',
octree_option=octree_option
)
runtime = util_models.RuntimeOptions()
try:
# If you copy the code to run it, print the return value of the API operation.
client.create_compress_point_cloud_task_with_options(create_compress_point_cloud_task_request, runtime)
except Exception as error:
# If an error occurs, print the error message.
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
# An Alibaba Cloud account AccessKey has permissions to call all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
# We strongly recommend that you do not save your AccessKey ID and AccessKey secret in your project code. This may cause an AccessKey leak and threaten the security of all resources in your account.
# This example shows how to obtain an AccessKey from an environment variable for identity verification when you call an API operation.
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)
octree_option = imm_20200930_models.OctreeOption(
point_resolution=0.001,
octree_resolution=0.01,
do_voxel_grid_down_down_sampling=False,
library_name='pcl'
)
create_compress_point_cloud_task_request = imm_20200930_models.CreateCompressPointCloudTaskRequest(
source_uri='oss://test-bucket/test-object.pcd',
target_uri='oss://test-bucket/test-target-object',
point_cloud_file_format='pcd',
compress_method='octree',
point_cloud_fields=[
'[\"xyz\"]'
],
project_name='test-project',
octree_option=octree_option
)
runtime = util_models.RuntimeOptions()
try:
# If you copy the code to run it, print the return value of the API operation.
await client.create_compress_point_cloud_task_with_options_async(create_compress_point_cloud_task_request, runtime)
except Exception as error:
# If an error occurs, print the error message.
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
Faturamento
Durante a compressão da nuvem de pontos, os seguintes itens faturáveis são gerados para o OSS e o IMM:
-
Para o OSS: Para preços detalhados, consulte Preços do OSS.
API
Item faturável
Descrição
GetObject
Solicitações GET
As taxas são calculadas com base no número de solicitações bem-sucedidas.
Tráfego de saída pela internet
Se você chamar a operação GetObject usando um endpoint público (por exemplo, oss-cn-hangzhou.aliyuncs.com) ou um endpoint de aceleração (por exemplo, oss-accelerate.aliyuncs.com), serão cobradas taxas pelo tráfego de saída pela internet. Essas taxas são baseadas no volume de dados.
Volume de dados recuperados de Acesso Infrequente
Se os dados recuperados forem de Acesso Infrequente, serão cobradas taxas pelo volume de dados recuperados. Essas taxas são baseadas no volume de dados recuperados.
Volume de dados recuperados com acesso em tempo real a objetos Archive
Se você ler um objeto Archive de um bucket com acesso em tempo real a objetos Archive ativado, serão cobradas taxas pelo volume de dados recuperados. Essas taxas são baseadas no volume de dados recuperados.
Aceleração de transferência
Se você ativar a aceleração de transferência e usar um endpoint de aceleração para acessar seu bucket, serão cobradas taxas pela aceleração de transferência. Essas taxas são baseadas no volume de dados.
-
Para o IMM: Para preços detalhados, consulte Itens faturáveis do IMM.
ImportanteA partir das 11:00 de 28 de julho de 2025 (UTC+8), o recurso de compressão de nuvem de pontos do IMM se tornará um serviço pago. Para mais informações, consulte Anúncio de ajuste de faturamento do IMM.
API
Item faturável
Descrição
CreateCompressPointCloudTask
PointCloudCompress
As taxas são calculadas com base no número de solicitações bem-sucedidas.