Metode umum untuk kompresi point cloud meliputi pengambilan sampel, fitting bentuk geometris, dan metode octree. Topik ini menjelaskan cara mengompres data point cloud menggunakan metode octree.
Ikhtisar
Point cloud merupakan kumpulan sejumlah besar titik. Penyimpanannya memerlukan memori yang besar dan tidak ideal untuk transmisi. Bandwidth yang tersedia seringkali tidak mencukupi untuk mentransmisikan point cloud yang belum dikompresi secara langsung melalui jaringan. Oleh karena itu, point cloud perlu dikompresi. Fitur kompresi point cloud dari Intelligent Media Management (IMM) menganalisis dan memproses informasi spasial-temporal dari data point cloud, sehingga secara signifikan mengurangi volume data dan biaya penyimpanan, serta menyediakan solusi enkode dan dekode berkualitas tinggi secara waktu nyata.
Skenario
Kompresi point cloud dapat digunakan dalam skenario berikut.
Skenario | Deskripsi |
Autonomous driving | Mengompresi data point cloud yang dihasilkan oleh pemindaian radar dalam skenario autonomous driving. |
Digital cultural heritage | Menyediakan solusi kompresi untuk informasi point cloud artefak budaya dalam skenario warisan digital. |
Smart city | Secara efektif mengompresi informasi point cloud dari rekonstruksi kota 3D untuk memungkinkan rendering dan tampilan data yang lancar. |
Mixed reality | Menyediakan kemampuan enkode dan dekode waktu nyata untuk data point cloud dalam skenario mixed reality. |
Prasyarat
Pasangan AccessKey telah dibuat dan diperoleh. Untuk informasi selengkapnya, lihat Create an AccessKey pair.
OSS telah diaktifkan, bucket telah dibuat, dan objek telah diunggah ke bucket tersebut. Untuk informasi selengkapnya, lihat Upload objects.
IMM telah diaktifkan. Untuk informasi selengkapnya, lihat Activate IMM.
Proyek telah dibuat di Konsol IMM. Untuk informasi selengkapnya tentang cara membuat proyek menggunakan Konsol IMM, lihat Create a project.
CatatanAnda juga dapat memanggil operasi CreateProject untuk membuat proyek. Untuk informasi selengkapnya, lihat CreateProject.
Anda dapat memanggil operasi ListProjects untuk menanyakan proyek yang sudah ada di wilayah tertentu. Untuk informasi selengkapnya, lihat ListProjects.
Prosedur
Panggil operasi CreateCompressPointCloudTask untuk mengompresi data point cloud.
Informasi tugas disimpan selama tujuh hari sejak tugas dimulai. Informasi tersebut tidak dapat diambil setelah periode tujuh hari berakhir. Anda dapat menggunakan salah satu metode berikut untuk menanyakan informasi tugas:
Di wilayah tempat proyek IMM berada, konfigurasikan langganan Simple Message Queue (SMQ) untuk menerima notifikasi informasi tugas. Untuk informasi selengkapnya, lihat Asynchronous message examples. Untuk informasi tentang MNS SDK, lihat Step 4: Receive and delete the message.
Di wilayah tempat proyek IMM berada, buat instans ApsaraMQ for RocketMQ 4.0, topik, dan kelompok untuk menerima notifikasi tugas. Untuk informasi selengkapnya, lihat Asynchronous message examples. Untuk informasi tentang cara menggunakan ApsaraMQ for RocketMQ, lihat Use HTTP client SDKs to send and subscribe to normal messages.
Di wilayah tempat proyek IMM berada, gunakan EventBridge untuk menerima notifikasi informasi tugas. Untuk informasi selengkapnya, lihat IMM events.
Informasi kompresi
Nama proyek: test-project
URI OSS file point cloud: oss://test-bucket/test-object.pcd
Algoritma kompresi: Octree
URI OSS file output: oss://test-bucket/test-target-object
Kompresi Ikhtisar algoritma
Octree adalah algoritma kompresi umum yang terutama digunakan untuk kompresi dan representasi data 3D. Algoritma ini membagi ruang 3D menjadi serangkaian kubus berukuran sama. Setiap kubus dibagi menjadi delapan sub-kubus, yang dapat dibagi lebih lanjut menjadi sub-kubus yang lebih kecil, dan seterusnya.
Dengan hanya menyimpan node yang berisi data valid, metode octree secara signifikan mengurangi kebutuhan ruang penyimpanan. Metode ini sering digunakan untuk kompresi dan representasi data 3D, seperti data point cloud dan data volumetrik. Dengan menerapkan strategi pembagian dan penggabungan yang tepat, Anda dapat mengurangi overhead penyimpanan dan transmisi sekaligus mempertahankan presisi data.
Contoh permintaan
{
"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\"}"
}Contoh respons
{
"TaskId": "PointCloudCompress-091d9b4a-8726-47bf-b699-d24c7daff63c",
"RequestId": "8B0EEA2E-35FE-500F-BCDB-E2E7CA11DF7A",
"EventId": "180-1S7Q8gHbVXJf2lekgesKvlNM1VR"
}Kode contoh
Kode contoh berikut menunjukkan cara mengompresi point cloud menggunakan Python SDK.
# -*- 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:
"""
Menginisialisasi klien menggunakan ID AccessKey dan rahasia AccessKey.
@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
)
# Tentukan titik akhir IMM.
config.endpoint = f'imm.cn-beijing.aliyuncs.com'
return imm20200930Client(config)
@staticmethod
def main(
args: List[str],
) -> None:
# AccessKey akun Alibaba Cloud memiliki izin untuk memanggil semua operasi API. Kami menyarankan agar Anda menggunakan pengguna Resource Access Management (RAM) untuk memanggil operasi API atau melakukan O&M rutin.
# Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey dan rahasia AccessKey Anda dalam kode proyek Anda. Hal ini dapat menyebabkan kebocoran AccessKey dan mengancam keamanan semua sumber daya dalam akun Anda.
# Contoh ini menunjukkan cara memperoleh AccessKey dari variabel lingkungan untuk verifikasi identitas saat Anda memanggil operasi API.
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:
# Jika Anda menyalin kode ini untuk menjalankannya, cetak nilai kembali dari operasi API.
client.create_compress_point_cloud_task_with_options(create_compress_point_cloud_task_request, runtime)
except Exception as error:
# Jika terjadi kesalahan, cetak pesan kesalahan.
UtilClient.assert_as_string(error.message)
@staticmethod
async def main_async(
args: List[str],
) -> None:
# AccessKey akun Alibaba Cloud memiliki izin untuk memanggil semua operasi API. Kami menyarankan agar Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan O&M rutin.
# Kami sangat menyarankan agar Anda tidak menyimpan ID AccessKey dan rahasia AccessKey Anda dalam kode proyek Anda. Hal ini dapat menyebabkan kebocoran AccessKey dan mengancam keamanan semua sumber daya dalam akun Anda.
# Contoh ini menunjukkan cara memperoleh AccessKey dari variabel lingkungan untuk verifikasi identitas saat Anda memanggil operasi API.
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:
# Jika Anda menyalin kode ini untuk menjalankannya, cetak nilai kembali dari operasi API.
await client.create_compress_point_cloud_task_with_options_async(create_compress_point_cloud_task_request, runtime)
except Exception as error:
# Jika terjadi kesalahan, cetak pesan kesalahan.
UtilClient.assert_as_string(error.message)
if __name__ == '__main__':
Sample.main(sys.argv[1:])
Penagihan
Selama kompresi point cloud, item yang dapat ditagih berikut dihasilkan untuk OSS dan IMM:
Untuk OSS: Untuk harga detail, lihat Harga OSS.
API
Item yang dapat ditagih
Deskripsi
GetObject
Permintaan GET
Biaya dihitung berdasarkan jumlah permintaan yang berhasil.
Lalu lintas keluar melalui internet
Jika Anda memanggil operasi GetObject menggunakan titik akhir publik (misalnya, oss-cn-hangzhou.aliyuncs.com) atau titik akhir percepatan (misalnya, oss-accelerate.aliyuncs.com), biaya akan dikenakan untuk lalu lintas keluar melalui internet. Biaya ini didasarkan pada volume data.
Volume data Akses Jarang yang diambil
Jika data yang diambil merupakan data Akses Jarang, biaya akan dikenakan untuk volume data Akses Jarang yang diambil. Biaya ini didasarkan pada volume data yang diambil.
Volume data yang diambil menggunakan akses waktu nyata untuk objek Arsip
Jika Anda membaca objek Arsip dari bucket yang diaktifkan fitur akses waktu nyata untuk objek Arsip, biaya akan dikenakan untuk volume data yang diambil. Biaya ini didasarkan pada volume data yang diambil.
Akselerasi transfer
Jika Anda mengaktifkan akselerasi transfer dan menggunakan titik akhir percepatan untuk mengakses bucket Anda, biaya akan dikenakan untuk akselerasi transfer. Biaya ini didasarkan pada volume data.
Untuk IMM: Untuk harga detail, lihat Item yang dapat ditagih IMM.
PentingMulai pukul 11.00 pada 28 Juli 2025 (UTC+8), fitur kompresi point cloud IMM akan menjadi layanan berbayar. Untuk informasi selengkapnya, lihat Pengumuman Penyesuaian Penagihan IMM.
API
Item yang dapat ditagih
Deskripsi
CreateCompressPointCloudTask
PointCloudCompress
Biaya dihitung berdasarkan jumlah permintaan yang berhasil.