Difference between revisions of "AxisMotionDetection"
m |
m |
||
Line 137: | Line 137: | ||
[http://www.zoneminder.com/forums/viewtopic.php?t=10872 Original Thread] | [http://www.zoneminder.com/forums/viewtopic.php?t=10872 Original Thread] | ||
'''DO NOT PM THESE USERS ""just post a question in the forum' | |||
Copied By: KingOfKYA | Copied By: KingOfKYA | ||
Created By: cayfer | Created By: cayfer |
Revision as of 13:14, 30 October 2009
I had this performance problem while monitoring and event recording for 8-10 IP cameras using the ZM. ZM is too good a software to abandon just for performance issues. So I decided I should pay more attention to the motion detection feature of the cameras I have and relieve the ZM server from the task of detecting motion. I've finally managed to use the on-camera motion detection feature of Axis Cams and here are my notes:
Cameras
I've set my Axis camera as follows:
The text "1|on 5|5|cause|text|showtext" means that
alarm will be triggered for the monitor which has ID=1,
alarm will set recording on
alarm will be cleared after 5 seconds.
The score of the alarm is 5 ( any score >0 is OK)
"text" and "showtext" are just explanatory notes.
The ZM specs tells us that the format of the message can include a "duration" as long as the message is sent as: "1|on+5|5|cause|text|showtext" bu the problem is the Axis camera cannot or will not save the "+" sign which appears in the message. A CGI parameter conversion problem I presume...
I've taken care of this "+" problem with a small modification in zmtrigger.pl source (see below).
Next, I specified the host IP address of the zm computer and its default zmtrigger port of 6802.
The second important setup is the "motion detection" setup on the Axis. I created a window which covers the area of interest; kept the object size as small as possible, pulled the history slider all the way back to zero and left the sensitivity slide somewhere past the %50 value.
ZM settings
There is no special setting for the ZM except that I've assigned the "Nodect" function to my camera monitor.
Finally, I modified the zmtrigger.pl file so that the first few lines of the
function handleMessage looks like this:
Code: sub handleMessage {
my $connection = shift; my $message = shift; # # CUA - Axis camera send the message quoted with" # CUA - Also Axis camera cannot save the plus sign which # CUA - possibly exists in the 1|on+20|score|cause|text|showtext formatted msg
$message=~ s/^\"//g; $message=~ s/\"$//g; $message=~ s/on /on\+/;
# CUA - end of modifications
my ( $id, $action, $score, $cause, $text, $showtext ) = split( /\|/, $message );
a few other modifications I made in the zmtrigger.pl file are commenting out some unused modules and pushes:
Code: use ZoneMinder::Trigger::Channel::Inet;
- CUA use ZoneMinder::Trigger::Channel::Unix;
- CUA use ZoneMinder::Trigger::Channel::Serial;
use ZoneMinder::Trigger::Connection;
my @connections; push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan1", channel=>ZoneMinder::Trigger::Channel::Inet->new( port=>6802 ), mode=>"rw" ) );
- CUA push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan2", channel=>ZoneMinder::Trigger::Channel::Unix->new( path=>'/tmp/test.sock' ), mode=>"rw" ) );
- push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan3", channel=>ZoneMinder::Trigger::Channel::File->new( path=>'/tmp/zmtrigger.out' ), mode=>"w" ) );
- CUA push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan4", channel=>ZoneMinder::Trigger::Channel::Serial->new( path=>'/dev/ttyS0' ), mode=>"rw" ) );
my modifs are marked with "# CUA"
These three regular expressions remove the quotes sent by Axis which envelope the message string and insert a plus sign if the "on" command is followed by a space). These 3 statements convert an incoming message of the form
Code: "1|on 25|5|cause|text|showtext"
to
Code: 1|on+25|5|cause|text|showtext
and of course, you shouln"t forget to restart zmtrigger.pl; or better still modify the zm startup script so that it starts zmtrigger.pl everytime zm is [re]started.
I added the line '/usr/bin/zmtrigger.pl &" in the start section of /etc/init.d/zoneminder and also added the line "pkill zmtrigger.pl" in the stop section.
Code:
start() {
echo -n "Starting $prog: " $command start # CUA /usr/bin/zmtrigger.pl &
RETVAL=$? [ $RETVAL = 0 ] && echo success [ $RETVAL != 0 ] && echo failure echo [ $RETVAL = 0 ] && touch /var/lock/zm return $RETVAL
} stop() {
echo -n $"Stopping $prog: " # # Why is this status check being done? # as $command stop returns 1 if zoneminder # is stopped, which will result in # this returning 1, which will stuff # dpkg when it tries to stop zoneminder before # uninstalling . . . # # CUA pkill zmtrigger.pl
I just hope that this helps other people trying to implement the on-camera motion detection with ZM.
Again; many thanks to those people who developed ZM at the first place and to those who helped it to become a perfect opensource project.
DO NOT PM THESE USERS ""just post a question in the forum'
Copied By: KingOfKYA
Created By: cayfer