diff --git a/client/sbs_client.bat b/client/sbs_client.bat index d38be5b30d0ce2b8dadd2ba01d1ae49ff8efb71f..4e9b5e56306bf76164c3091487c14c659421011c 100644 --- a/client/sbs_client.bat +++ b/client/sbs_client.bat @@ -1,7 +1,8 @@ @echo off -rem Using the sh variant through msys(git) or similar linux like environment is recommended +rem Using the bash variant through msys(git) or similar linux like environment is recommended +rem For script arguments see sbs_client.sh :loop - %cd%\sbs_client.py %1 + %cd%\sbs_client.py "%1" %2 timeout /t %2 goto loop diff --git a/client/sbs_client.py b/client/sbs_client.py index e954f238dc348b0a419417a25bc3fcc9430f0db3..9ba2bd4c11afbc934874343db7a26bbe87909004 100755 --- a/client/sbs_client.py +++ b/client/sbs_client.py @@ -42,17 +42,17 @@ def sendImage(stopCode = None): raise Exception('Service unavailable') except Exception as err: - logging.error('An error has occurred while sending the file: "{0}", for: {1}'.format(err, stopCode)) + logError('An error has occurred while sending the file: "{0}", for: {1}'.format(err, stopCode)) # Removing image for security purposes def removeImage(): try: os.remove(TMP_IMAGE) except Exception as err: - logging.error('An error has occurred while deleting temporary file: "{0}"'.format(err)) + logError('An error has occurred while deleting temporary file: "{0}"'.format(err)) # Taking a picture from default webcam and saving it -def takePicture(cameraIndex): +def takePicture(cameraIndex, model): try: cap = cv2.VideoCapture(cameraIndex) if not cap.isOpened(): @@ -63,7 +63,6 @@ def takePicture(cameraIndex): raise Exception('Unable to capture image') # matching serverside parameters, for comparable results - model = cv2.CascadeClassifier(MODEL_PATH) faces = model.detectMultiScale(cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), 1.3, 5) if len(faces) != 0: @@ -76,19 +75,28 @@ def takePicture(cameraIndex): return True except Exception as err: - logging.error('An error has occurred while preprocessing camera image: "{0}"'.format(err)) + logError('An error has occurred while preprocessing camera image: "{0}"'.format(err)) return False +def logError(msg): + logging.error('{0}:{1}'.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), msg)) + def main(argv): - if argv != None and (len(argv) <= 1 or not re.match("^[\w\d_-]+$", argv[1])): + if argv != None and (len(argv) <= 2 or not re.match("^[\w\d_-]+$", argv[1]) or not re.match("^[\d]+$", argv[2])): return False - if takePicture(0): - sendImage(argv[1]) - removeImage() + try: + model = cv2.CascadeClassifier(MODEL_PATH) + if takePicture(int(argv[2]), model): + sendImage(str(argv[1])) + removeImage() + except Exception as err: + logError('Invalid arguments provided for script "{0}"'.format(err)) + return False return True if __name__ == "__main__": if not main(sys.argv): - print("Stop identifier not provided (missing argument)") + print("Stop identifier or video source not provided (missing argument/s)") + exit(1) diff --git a/client/sbs_client.sh b/client/sbs_client.sh index 50941c1123243cc09b4fde3b7d33c4a4bba9ad0e..cff9b97cfb6f8a29da1f93ba9f83674d37736008 100755 --- a/client/sbs_client.sh +++ b/client/sbs_client.sh @@ -1,18 +1,26 @@ #!/bin/bash -if [ "$#" -ne 2 ]; then - echo "Usage: $0 stop_code freq_secs" >&2 +if [ "$#" -ne 3 ]; then + echo "Usage: $0 stop_code freq_secs video_source" >&2 + echo " stop_code: string identifier for the stop (f.ex. T35)" >&2 + echo " freq_secs: in seconds how often the python script is invoked (does not account for ca. 2 seconds of processing time)" >&2 + echo " video_source: numeric index of the OpenCV video source" >&2 exit 1 fi -if [ "$2" -lt 3 ]; then +if [ "$2" -lt 3 ] 2>/dev/null; then echo "freq_secs must be larger than or equal to 3" >&2 exit 1 fi +if [ "$3" -lt 0 ] 2>/dev/null; then + echo "video_source must be larger than or equal to 0" >&2 + exit 1 +fi + while true do - python "./sbs_client.py" "$1" + python "./sbs_client.py" "$1" $3 ret=$? if [ $ret -ne 0 ]; then exit 1