yolo11/main/CameraConfigure.py

112 lines
3.5 KiB
Python
Raw Normal View History

2025-04-16 16:19:53 +08:00
import requests
import json
def load_config(config_path="stattioncfg.json"):
"""
从JSON配置文件加载配置信息
:param config_path: 配置文件路径默认当前目录config.json
:return: 配置字典成功时None失败时
"""
try:
with open(config_path, "r", encoding="utf-8") as f:
config = json.load(f)
# 验证必要字段
if "station_name" not in config:
print("配置错误:缺少 station_name 字段")
return None
return config
except FileNotFoundError:
print(f"配置文件 {config_path} 未找到")
return None
except json.JSONDecodeError:
print("配置文件解析失败请检查JSON格式")
return None
def get_camera_rtsp_config(station_name):
"""
获取指定变电站的摄像头RTSP配置信息
:param station_name: 变电站名称字符串
:return: 包含摄像头配置的列表成功时None失败时
"""
# 接口地址
url = "http://192.168.110.229:38091/api/services/isas/VideoElectronicFence/GetVideoCameraRTSPConfigure"
# 请求参数
params = {
"stationName": station_name
}
try:
# 发送GET请求
response = requests.get(url, params=params, timeout=10)
if response.status_code != 200:
print(f"请求失败HTTP状态码{response.status_code}")
return None
json_data = response.json()
if not json_data.get("success", False):
print(f"接口返回错误:{json_data.get('result', {}).get('message', '未知错误')}")
return None
result = json_data.get("result", {})
if not (result.get("flag", False) and "resultData" in result):
print("未找到有效的摄像头配置数据")
return None
# 提取并处理摄像头配置
cameras = result["resultData"]
for cam in cameras:
# 转换ROI格式
roi = cam.get('roi', '0,0,0,0')
if isinstance(roi, str):
cam['roi'] = tuple(map(int, roi.split(',')))
elif isinstance(roi, list):
cam['roi'] = tuple(map(int, roi))
else:
cam['roi'] = (0, 0, 0, 0)
# 补全RTSP参数
# rtsp_url = cam['url']
# if 'transportmode' not in rtsp_url:
# connector = '&' if '?' in rtsp_url else '?'
# cam['url'] = f"{rtsp_url}{connector}"
print(f"成功获取 {result['totalCount']} 个摄像头配置")
return cameras
except requests.exceptions.RequestException as e:
print(f"请求发生异常:{str(e)}")
return None
except ValueError:
print("响应解析失败无效的JSON格式")
return None
# 更新后的使用示例
if __name__ == "__main__":
# 从配置文件加载设置
config = load_config()
if not config:
exit(1)
station = config["station_name"]
print(f"正在查询变电站:{station}")
cameras = get_camera_rtsp_config(station)
if cameras:
print("\n摄像头列表:")
for idx, camera in enumerate(cameras, 1):
print(f"\n摄像头 {idx}:")
print(f"名称:{camera['name']}")
print(f"ID{camera['id']}")
print(f"RTSP地址{camera['url']}")
print(f"ROI区域{camera['roi']}")