解决Tank and Temple在线测试上传点云过慢的问题
解决Tank and Temple在线测试上传点云过慢的问题
tnt数据集作为mvs的一个标准数据集,进行测试时必须先将本地跑出来的点云用官方的脚本上传到tnt服务器,这一过程速度有时一言难尽,下面给出一个可能的提速办法。
查询最快的ip地址
登录下面的网站:https://tool.chinaz.com/speedtest/t2-website-userdata.storage.googleapis.com 看看哪个ip连接速度最快

找一个你心水的ip地址,记下来,比如我找的是142.250.73.91
修改hosts
sudo vim /etc/hosts
之后将你上面找的ip和t2-website-userdata.storage.googleapis.com写入hosts文件中

之后:wq保存退出即可。
至此,理论上上传的速度就能提高了,当然也不排除这个ip地址虽然在网页上显示很快,但上传依然失败的情况,这种情况下需要换一个ip再试试。
(可选)优化一下上传脚本
自带的上传脚本不显示进度,可以稍微优化一下。
将脚本的def submit_file(filename, credentials_upload)函数替换为下面的内容:
import requests
import socket
from requests_toolbelt import MultipartEncoder, MultipartEncoderMonitor
import os
import sysdef submit_file(filename, credentials_upload):# 读取凭证文件with open(credentials_upload) as f:content = f.readlines()credential_content = [x.strip() for x in content]signature_dict = {}policy_dict = {}for signatureline in credential_content[0:-1]:signaturelinecontent = signatureline.split('###')signature_dict[signaturelinecontent[2]] = signaturelinecontent[1]policy_dict[signaturelinecontent[2]] = signaturelinecontent[0]access_str = credential_content[-1]access_info = access_str.split('###')fsignature = signature_dict[filename]fpolicy = policy_dict[filename]gcs_filename = access_info[1] + filenameclient_id_email = access_info[2]expiration = access_info[3]gs_acl = 'bucket-owner-read'bucket_name = 't2-website-userdata'policy = {'key': gcs_filename,'bucket': bucket_name,'acl': gs_acl,'GoogleAccessId': client_id_email,'policy': fpolicy,'signature': fsignature}# URL 与 IP 解析url = f"http://{bucket_name}.storage.googleapis.com"hostname = f"{bucket_name}.storage.googleapis.com"resolved_ip = socket.gethostbyname(hostname)print(f"Resolved IP for {hostname}: {resolved_ip}")# 上传进度回调def progress_callback(monitor):percent = (monitor.bytes_read / monitor.len) * 100sys.stdout.write(f"\rUpload progress: {percent:.2f}%")sys.stdout.flush()# 构造上传体并绑定进度回调encoder = MultipartEncoder(fields={**policy, 'file': (filename, open(filename, 'rb'))})monitor = MultipartEncoderMonitor(encoder, progress_callback)headers = {'Content-Type': monitor.content_type}print(f"\nStart uploading {filename} ...")session = requests.Session()r = session.post(url, data=monitor, headers=headers)print("\nUpload finished.")print(f"Response status code: {r.status_code}")if r.status_code != 204:print("Upload failed:", r.text)else:print("Upload succeeded.")return r
这样就可以在上传的时候显示解析的ip和上传的进度了。

整体速度还是可以接受的。

