libcvautomation/libcvautomation_funcs
Bradlee Speice 13105e0f44 Add the mouse scroll functions to the bash wrapper, update documentation
Minor documentation cleanup

More documentation cleanup

Fix an issue with accidentally copying the opencv2 includes to opencv1

Document mouse scroll functionality, continue cleanup
2012-07-18 12:24:02 -04:00

451 lines
12 KiB
Plaintext

#===============================================================================
# FILE: libcvautomation_funcs
#
# USAGE: . mosaic_testing_funcs
#
# DESCRIPTION:
#
# OPTIONS: ---
# REQUIREMENTS: ---
# BUGS: ---
# NOTES: ---
# AUTHOR: Bradlee Speice, bspeice@uncc.edu
# ORGANIZATION:
# CREATED: 06/19/2012 11:35:20 AM EDT
# REVISION: ---
#===============================================================================
#-------------------------------------------------------------------------------
# This script file is meant to be sourced and then used for driving libcvautomation.
# It provides access to a lot of common macros, like clicking
# an area of the screen based on an image.
#-------------------------------------------------------------------------------
#Make sure all the programs we will need are in the right place
CVAMATCH=`which cva-match` || echo "Could not find the cva-match program..." &>2 #Needed for image recognition
CVAINPUT=`which cva-input` || echo "Could not find the cva-input program..." &>2 #Needed to manipulate mouse and keyboard
#Some program-wide configs
SEARCH_METHOD=0 #CV_TM_SQDIFF
TOLERANCE=2250000
USE_SANE_TOLERANCE=""
#Uncomment to enable sane tolerance matching
#USE_SANE_TOLERANCE="yes"
USE_CENTER="yes"
#Uncomment to disable center-of-image matching
#USE_CENTER=""
#Quick trick to allow for easy redirection of output
#OUTFILE=`mktemp`; echo "Logfile: " $OUTFILE
OUTFILE=/dev/null
#ERRFILE=`mktemp`; echo "Error file: " $ERRFILE
ERRFILE=/dev/null
out ()
{
echo "`date`: $@" >> $OUTFILE
}
err ()
{
echo "`date`: $@" >> $ERRFILE
}
#-------------------------------------------------------------------------------
# Begin testing macros
#-------------------------------------------------------------------------------
#--- FUNCTION ----------------------------------------------------------------
# NAME: click
# DESCRIPTION: Click the mouse where it is currently located
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
click ()
{
eval $CVAINPUT -s 'mouseclick 1' >> $OUTFILE >> $OUTFILE
} # ---------- end of function click ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: click_xy
# DESCRIPTION: Click a specific point on the screen
# PARAMETERS: x-location, y-location
# RETURNS:
#-------------------------------------------------------------------------------
click_xy ()
{
if [ -z "$1" ]; then
out "Did not specify an X location, assuming (0, 0)"
X_LOC=0
Y_LOC=0
else
X_LOC=$1
fi
if [ -z "$2" ]; then
out "Did not specify a Y location, assuming ($1, 0)"
else
Y_LOC=$2
fi
out "click_xy: " $X_LOC $Y_LOC
eval '$CVAINPUT -s "mousexy $X_LOC $Y_LOC" -s "mouseclick 1" >> $OUTFILE'
} # ---------- end of function click_xy ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: clickr_xy
# DESCRIPTION: Click a point on the screen relative to where the mouse is at
# PARAMETERS: X increment, Y increment
# RETURNS:
#-------------------------------------------------------------------------------
clickr_xy ()
{
if [ -z "$1" ]; then
err "Did not specify an X increment..."
return 255
fi
if [ -z "$2" ]; then
err "Did not specify a Y increment..."
return 255
fi
out "clickr_xy: " $1 $2
eval '$CVAINPUT -s "mouserxy $1 $2" -s "mouseclick 1" >> $OUTFILE'
} # ---------- end of function clickr_xy ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: click_i
# DESCRIPTION: Click a point based on a screenshot
# PARAMETERS: Location of screenshot, optional index to use if multiple
# matches are found
# RETURNS:
#-------------------------------------------------------------------------------
click_i ()
{
COMMAND_LINE=""
if [ -z "$1" ]; then
err "Did not give a base image..."
return 255
fi
out "click_i: matching $@"
for x in $@
do
if [ x$USE_CENTER != "x" ]; then
center="c"
else
center=""
fi
COMMAND_LINE+="-s 'i${center}mouseclick $x' "
done
if [ -n "$USE_SANE_TOLERANCE" ]; then
TOLERANCE_OPTION="-o"
else
TOLERANCE_OPTION="-t"
fi
eval "$CVAINPUT $TOLERANCE_OPTION $TOLERANCE --search-method $SEARCH_METHOD $COMMAND_LINE >> $OUTFILE"
return $?
} # ---------- end of function click_i ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: image_location
# DESCRIPTION: Get the location of a subimage in root
# PARAMETERS: PNG Filename of sub-image
# RETURNS: "X_LOC,Y_LOC"
#-------------------------------------------------------------------------------
image_location ()
{
COMMAND_LINE=""
if [ -z "$1" ]; then
err "Did not give a base image..."
return 255
fi
#Build the command line arguments
for x in $@
do
COMMAND_LINE+="-s $x "
done
#Find our sub-image
if [ -n "$USE_SANE_TOLERANCE" ]; then
TOLERANCE_OPTION="-o"
else
TOLERANCE_OPTION="-t"
fi
if [ -n "$USE_CENTER" ]; then
CENTER="--center"
else
CENTER=""
fi
MATCH=`$CVAMATCH $TOLERANCE_OPTION $TOLERANCE $CENTER --x-root $COMMAND_LINE`
RETURN_CODE=$?
out "$MATCH"
MATCH=`echo $MATCH | head -n1`
if [ x"$MATCH" == "x" ]; then
err "Could not find a match between \"$@\" and the root window."
return 255
fi
IMAGE_NAME=`echo "$MATCH" | cut -d',' -f1`
X_LOC=`echo "$MATCH" | cut -d',' -f2`
Y_LOC=`echo "$MATCH" | cut -d',' -f3`
out "image_location: \"$MATCH\" " "$X_LOC,$Y_LOC,$IMAGE_NAME"
echo "$X_LOC,$Y_LOC"
return $RETURN_CODE
} # ---------- end of function image_location ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: hover_xy
# DESCRIPTION: Move the mouse to location X Y
# PARAMETERS: X_LOC, Y_LOC
# RETURNS:
#-------------------------------------------------------------------------------
hover_xy ()
{
if [ -z "$1" ]; then
out "Did not provide an X location, assuming 0..."
X_LOC=0
else
X_LOC=$1
fi
if [ -z "$2" ]; then
out "Did not provide a Y location, assuming 0..."
Y_LOC=0
else
Y_LOC=$2
fi
out "hover_xy: $X_LOC $Y_LOC"
eval $CVAINPUT -s "mousexy $X_LOC $Y_LOC" >> $OUTFILE
} # ---------- end of function hover_xy ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: hoverr_xy
# DESCRIPTION: Move the mouse over X and up Y
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
hoverr_xy ()
{
if [ -z "$1" ]; then
out "Did not provide an X increment, assuming 0..."
X_INC=0
else
X_INC=$1
fi
if [ -z "$2" ]; then
out "Did not provide a Y increment, assuming 0..."
Y_INC=0
else
Y_INC=$1
fi
out "hoverr_xy: $X_INC $Y_INC"
eval '$CVAINPUT -s "mouserxy $X_INC $Y_INC" >> $OUTFILE'
} # ---------- end of function hoverr_xy ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: hover_i
# DESCRIPTION: Move the mouse to the center of image on root window
# PARAMETERS: PNG File name
# RETURNS:
#-------------------------------------------------------------------------------
hover_i ()
{
COMMAND_LINE=""
if [ -z "$1" ]; then
err "Did not give a base image."
return 255
fi
for x in $@
do
if [ -n $CENTER ]; then
center="c"
else
center=""
fi
COMMAND_LINE+="-s '${center}mouseimage $x' "
done
out "hover_i: $@"
if [ -n $USE_SANE_TOLERANCE ]; then
TOLERANCE_OPTION="-o"
else
TOLERANCE_OPTION="-t"
fi
eval $CVAINPUT $TOLERANCE_OPTION $TOLERANCE --search-method $SEARCH_METHOD $COMMAND_LINE >> $OUTFILE
return $?
} # ---------- end of function hover_i ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: jiggle_mouse
# DESCRIPTION: Moves the mouse up-right 1 pixel, and then back - necessary
# for activation some widgets
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
jiggle_mouse ()
{
out "jiggle_mouse"
eval '$CVAINPUT -s "mousejiggle" >> $OUTFILE'
} # ---------- end of function jiggle_mouse ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: mouse_scrollu
# DESCRIPTION: Scroll the mouse wheel up one
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
mouse_scrollu ()
{
out "mouse_scrollu"
eval '$CVAINPUT -s "mousescrollu" >> $OUTFILE'
} # ---------- end of function mouse_scrollu ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: mouse_scrolld
# DESCRIPTION: Scroll the mouse wheel down one
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
mouse_scrolld ()
{
out "mouse_scrolld"
eval '$CVAINPUT -s "mousescrolld" >> $OUTFILE'
} # ---------- end of function mouse_scrolld ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: key_str
# DESCRIPTION: Simulate pressing keys according to $1
# PARAMETERS: String of text as $1
# RETURNS:
#-------------------------------------------------------------------------------
key_str ()
{
COMMAND_LINE=""
if [ -z "$1" ]; then
err "Did not give me a string to enter..."
return 255
fi
for x in $@
do
COMMAND_LINE+="-s 'keystring $x' "
done
out "key_str: \"$@\""
eval $CVAINPUT $COMMAND_LINE >> $OUTFILE
} # ---------- end of function key_str ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: key_down
# DESCRIPTION: Presses down a key - necessary for stuff like Alt-shortcuts
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
key_down ()
{
if [ -z "$1" ]; then
err "Did not give me a key to press down..."
return 255
fi
out "key_down: $1"
eval '$CVAINPUT -s "keydown $1" >> $OUTFILE'
} # ---------- end of function key_down ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: key_up
# DESCRIPTION: Lifts a key up - every key_down should have a key_up
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
key_up ()
{
if [ -z "$1" ]; then
err "Did not give me a key to release..."
fi
out "key_up: $1"
eval '$CVAINPUT -s "keyup $1" >> $OUTFILE'
} # ---------- end of function key_up ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: key_click
# DESCRIPTION: Clicks a single key
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
key_click ()
{
if [ -z "$1" ]; then
err "Did not give me a key to press..."
fi
out "key_click: $1"
eval '$CVAINPUT -s "keyclick $1" >> $OUTFILE'
} # ---------- end of function key_press ----------
#--- FUNCTION ----------------------------------------------------------------
# NAME: notify
# DESCRIPTION: Notify the user and pause
# PARAMETERS:
# RETURNS:
#-------------------------------------------------------------------------------
notify ()
{
if [ -z "$1" ]; then
#Not given any text to display, return an error
return 255
fi
if [ -n "$DISPLAY" ]; then
which zenity &> /dev/null
if [ $? -eq 0 ]; then
zenity --info --text="$@"
fi
else
read -p "$@"
fi
} # ---------- end of function notify ----------