Perl zoneminder自动跟踪zmtrack.pl修改以设置PTZ最大YX边界

Perl zoneminder自动跟踪zmtrack.pl修改以设置PTZ最大YX边界,perl,zoneminder,Perl,Zoneminder,我使用zoneminder对设施进行安全保护,并使用TrendNet TV-IP612P PTZ网络摄像机记录曲棍球比赛。我可以用HTTP命令控制ptz的移动,没有问题。我正在使用zoneminder附带的自动跟踪脚本zmtrack.pl来跟踪运动。它可以工作,但我想限制相机可以平移和倾斜的最大YX范围边界。摄像机位于冰场中心侧的天花板上 我相信,通过修改zmtrack.pl Perl脚本(见下文),可以限制平移和倾斜X&Y值,即顶部、底部、左侧和右侧 谢谢任何人能提供的帮助 !/usr/bi

我使用zoneminder对设施进行安全保护,并使用TrendNet TV-IP612P PTZ网络摄像机记录曲棍球比赛。我可以用HTTP命令控制ptz的移动,没有问题。我正在使用zoneminder附带的自动跟踪脚本zmtrack.pl来跟踪运动。它可以工作,但我想限制相机可以平移和倾斜的最大YX范围边界。摄像机位于冰场中心侧的天花板上

我相信,通过修改zmtrack.pl Perl脚本(见下文),可以限制平移和倾斜X&Y值,即顶部、底部、左侧和右侧

谢谢任何人能提供的帮助

!/usr/bin/perl-wT ========================================================================== ZoneMinder实验PTZ跟踪脚本,$Date:2009-06-08 10:11:56+0100 Mon,08 Jun 2009$,$Revision:2908$ 版权C 2001-2008菲利普·库姆斯 这个程序是自由软件;您可以重新分发它和/或 根据GNU通用公共许可证的条款对其进行修改 由自由软件基金会出版;任何一个版本2 许可证的版本,或由您选择任何更高版本。 这个节目的发布是希望它会有用, 但无任何保证;甚至没有任何关于 适销性或适合某一特定目的。见 有关更多详细信息,请参阅GNU通用公共许可证。 您应该已经收到GNU通用公共许可证的副本 与此同时,;如果没有,请写信给自由软件 基金会,59寺庙广场-套房330,波士顿,MA 02111-1307,USA. ========================================================================== 此脚本用于触发和取消来自外部源的警报 使用任意基于文本的格式 严格使用; 使用字节; ========================================================================== 用户配置 ========================================================================== 使用恒定睡眠时间=>10000;以微秒为单位 ========================================================================== 从现在开始不要改变任何事情 ========================================================================== 仅包括来自系统的perl路径 使用ZoneMinder; 使用DBI; 使用POSIX; 使用数据::转储程序; 使用Getopt::Long; 使用时间:雇佣qw usleep; $| = 1; $ENV{PATH}='/bin:/usr/bin'; $ENV{SHELL}='/bin/sh',如果存在$ENV{SHELL}; 删除@ENV{qwIFS CDPATH ENV BASH_ENV}; 我的$mid=0; 次级用途 { 打印 用法:zmtrack.pl-m,-monitor=] 参数包括:- -m、 -monitor=-Id要跟踪的监视器 ; 出口-1; } 如果GetOptions'monitor=s'=>\$mid { 用法 } 罗吉尼特; 日志信号; 我的$INTERBART_mid=$mid=~/^\d+$/; $mid=$T\U mid; 打印跟踪器守护程序$mid从.strftime“%y/%m/%d%H:%m:%S”,localtime开始。\n; my$dbh=zmDbConnect; my$sql=select C.*,M.*从监视器中作为M左键将控件作为C连接到M.ControlId=C.Id上,其中M.Id=?; my$sth=$dbh->prepare\u缓存的$sql或Fatal无法准备“$sql”:。$dbh->errstr; my$res=$sth->execute$mid或Fatal无法执行“$sql”:。$sth->errstr; 我的$monitor=$sth->fetchrow\u hashref; 如果$班长 { 打印找不到监视器“$mid”\n; 出口-1; } 如果$监视器->{可控} { 打印监视器“$mid”不可控制\n; 出口-1; } 如果$监视器->{TrackMotion} { 打印监视器“$mid”未配置为跟踪运动\n; 出口-1; } 如果$监视器->{CanMoveMap} { 打印监视器“$mid”无法在地图模式下移动; 如果$monitor->{CanMoveRel} { 打印,返回到伪映射模式\n; } 其他的 { 打印\n; 出口-1; } } 调试找到id为“$monitor”的监视器\n; 退出-1如果!zmMemVerify$monitor; 分挂起 { 我的$monitor=班次; zmMonitorSuspend$monitor; } 分简历 { 我的$monitor=班次; sleep$monitor->{TrackDelay}; zmMonitorResume$监视器; } 副轨道 { 我的$monitor=班次; 我的$x,$y=@; 我的$INTERBART_x=$x=~/^\d+$/;$x=$INTERBART_x; 我的$attributet_y=$y=~/^\d+$/;$y=$attributet_y; my$ctrlCommand=ZM_PATH_BIN./zmcontrol.pl-i.$monitor->{Id}; $ctrlCommand.=-command=.$monitor->{CanMoveMap}?moveMap:movePseudoMap.-xcoord=$x-ycoord=$y; executeShellCommand$ctrlCommand; } 次级回报 { 我的$monitor=班次; my$ctrlCommand=ZM_PATH_BIN./zmcontrol.pl-i.$monitor->{Id}; 如果$monitor->{ReturnLocation}>0 { $ctrlCommand.=-command=presetGoto-preset=.$monitor->{ReturnLocation}; } 其他的 { $ctrlCommand.=-command=presetHome; } executeShellCommand$ctrlCommand; } 我的$last_报警=0; 如果$monitor->{ReturnLocation}>=0 { 暂停$monitor; 返回$monitor; 恢复$monitor; } my$alarmed=undef; 而1 { 如果zmIsAlarmed$monitor { my$alarm\u x,$alarm\u y=zmGetAlarmLocation$monitor; 如果$alarm\u x>=0&&$alarm\u y>=0 { 调试在$alarm\u x、$alarm\u y处收到报警\n; 暂停$monitor; 跟踪$monitor、$alarm\u x、$alarm\u y; 恢复$monitor; $last_alarm=时间; $alarmed=!未定义; } } 其他的 { 如果logDebugging&&$报警 { 打印左报警状态\n; $alarmed=未定义; } 如果$monitor->{ReturnLocation}>=0&&$last_alarm>0&&time-$last_alarm>$monitor->{ReturnDelay} { 调试返回到位置。$monitor->{ReturnLocation}。\n; 暂停$monitor; 返回$monitor; 恢复$monitor; $last_报警=0; } } 睡眠时间; } 有趣的是:

副轨道 { 我的$monitor=班次; 我的$x,$y=@; 我的$INTERBART_x=$x=~/^\d+$/;$x=$INTERBART_x; 我的$attributet_y=$y=~/^\d+$/;$y=$attributet_y; my$ctrlCommand=ZM_PATH_BIN./zmcontrol.pl-i.$monitor->{Id}; $ctrlCommand.=-command=.$monitor->{CanMoveMap}?moveMap:movePseudoMap.-xcoord=$x-ycoord=$y; executeShellCommand$ctrlCommand;