This commit is contained in:
ZhuJW
2026-04-22 13:35:40 +08:00
commit 26a7fdf6c0
40 changed files with 11602 additions and 0 deletions

63
app/utils/bagname.py Normal file
View File

@@ -0,0 +1,63 @@
import re
from datetime import datetime
from typing import Dict, Tuple
# 你 COS 的公共前缀可以做成默认参数,便于不同环境覆盖
DEFAULT_COS_PREFIX = "https://data-miningc01-1318950322.cos.ap-shanghai-adc.myqcloud.com/"
def extract_datetime_from_filename(
bag_filename: str,
cos_prefix: str = DEFAULT_COS_PREFIX,
) -> Tuple[str, Dict[str, str]]:
"""
从 .bag 文件名中提取采集时间,并生成对应的多视角视频 URL。
期望文件名包含片段_{YYYYMMDD}-{HHMMSS}_ 或以 .bag 结尾,例如:
PL162802_event_all_time_event_20250416-193015_0.bag
PL123456_event_all_time_event_20250828-221018.bag
xx_20250524-180926_.bag
xx_20250524-180926_3.bag
返回:
(datetime_full_str, video_urls)
- datetime_full_str: 'YYYY-MM-DD HH:MM:SS'
- video_urls: COS 上该 bag 的多视角视频 URL 字典
异常:
ValueError: 当文件名不匹配预期格式时抛出
"""
# 提取日期时间
match = re.search(r"_(\d{8})-(\d{6})(?:_|\.|$)", bag_filename)
if not match:
raise ValueError(f"文件名格式错误,无法提取时间信息:{bag_filename}")
date_part, time_part = match.groups()
year, month, day = date_part[:4], date_part[4:6], date_part[6:8]
hour, minute, second = time_part[:2], time_part[2:4], time_part[4:6]
datetime_full = f"{year}-{month}-{day} {hour}:{minute}:{second}"
print(f'datetime_full:{datetime_full}')
# 生成视频路径(与现有逻辑一致)
# 去掉 .bag 后缀,再补上 " - {View}.mp4"
base = bag_filename[:-4] if bag_filename.endswith(".bag") else bag_filename
view_map = {
"wide": "Wide",
"left": "Left",
"right": "Right",
"rear_left": "Rear Left",
"rear_right": "Rear Right",
"rear": "Rear",
}
video_urls = {}
for key, label in view_map.items():
video_final_path = f"{base}- {label}.mp4"
# 目录层级momenta/videos/YYYY/MM/DD/{文件名 - {View}.mp4}
video_key = f"momenta/videos/{year}/{month}/{day}/{video_final_path}"
video_urls[key] = f"{cos_prefix}{video_key}"
print(f'v{video_urls}')
return datetime_full, video_urls