Todos os produtos
Search
Central de documentação

Intelligent Media Management:Point cloud compression

Última atualização: Jun 27, 2026

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.

    Nota
    • També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.

Importante

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:

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.

    Importante

    A 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.