|
|
@@ -338,25 +338,43 @@ class PTZCamera:
|
|
|
"""
|
|
|
if zoom is None:
|
|
|
zoom = self.ptz_config['default_zoom']
|
|
|
-
|
|
|
+
|
|
|
# 应用坐标偏移校准
|
|
|
offset_x, offset_y = self.ptz_config['coordinate_offset']
|
|
|
x_ratio = max(0, min(1, x_ratio + offset_x))
|
|
|
y_ratio = max(0, min(1, y_ratio + offset_y))
|
|
|
-
|
|
|
+
|
|
|
# 从配置获取视野参数
|
|
|
pan_range = self.ptz_config.get('pan_range', (0, 180))
|
|
|
tilt_range = self.ptz_config.get('tilt_range', (-45, 45))
|
|
|
pan_center = self.ptz_config.get('pan_center', 90)
|
|
|
tilt_center = self.ptz_config.get('tilt_center', 0)
|
|
|
-
|
|
|
+
|
|
|
# 将画面比例转换为角度
|
|
|
# x_ratio=0 对应 pan_range[0], x_ratio=1 对应 pan_range[1]
|
|
|
pan = pan_range[0] + (pan_range[1] - pan_range[0]) * x_ratio
|
|
|
-
|
|
|
+
|
|
|
# y_ratio=0.5 对应 tilt_center, y_ratio=0 对应 tilt_range[0], y_ratio=1 对应 tilt_range[1]
|
|
|
tilt = tilt_range[0] + (tilt_range[1] - tilt_range[0]) * y_ratio
|
|
|
-
|
|
|
+
|
|
|
+ # 应用方向修正
|
|
|
+ # 1. 检查安装类型,吸顶安装需要反转tilt
|
|
|
+ mount_type = self.ptz_config.get('mount_type', 'wall')
|
|
|
+ tilt_flip = self.ptz_config.get('tilt_flip', False)
|
|
|
+
|
|
|
+ # 吸顶安装时自动反转tilt方向
|
|
|
+ if mount_type == 'ceiling' or tilt_flip:
|
|
|
+ # 反转tilt:原来的正角度变负,负角度变正
|
|
|
+ tilt = -tilt
|
|
|
+ print(f"[PTZCamera] 吸顶安装,tilt方向修正: {-tilt} -> {tilt}")
|
|
|
+
|
|
|
+ # 2. 应用pan方向修正
|
|
|
+ pan_flip = self.ptz_config.get('pan_flip', False)
|
|
|
+ if pan_flip:
|
|
|
+ # 反转pan方向(180度偏移)
|
|
|
+ pan = (pan + 180) % 360
|
|
|
+ print(f"[PTZCamera] pan方向翻转: {(pan - 180) % 360} -> {pan}")
|
|
|
+
|
|
|
return (pan, tilt, zoom)
|
|
|
|
|
|
def move_to_target(self, x_ratio: float, y_ratio: float,
|