22This class inherits from IBaseSubject.
33Concretes a subject for Eye/Camera features.
44"""
5+ import logging
6+ from datetime import datetime
57from time import sleep
68from threading import Thread
9+
10+ import cv2
11+
712from core .utils .datatypes import EyeStates , EyeStrategyResult
813from core .observers .subject .base_subject import BaseSubject
914from core .strategies .eye .base_eye_strategy import BaseEyeStrategy
1015
16+ # Add logging support.
17+ logger = logging .getLogger (__name__ )
18+
1119
1220class EyeSubject (BaseSubject ):
1321 """
1422 This class inherits from IBaseSubject.
1523 Concretes a subject for Eye/Camera features.
1624 """
17- def __init__ (self ):
25+ DEFAULT_SLEEP_INTERVAL = 10
26+ SLEEP_INTERVAL_DETECTED = 5
27+
28+ def __init__ (self , image_path : str ):
1829 super ().__init__ ()
19- self ._result : EyeStrategyResult = None
30+ self ._image_path = image_path
2031
2132 @staticmethod
2233 def get_default_state () -> EyeStates :
@@ -27,22 +38,31 @@ def run(self, eye_strategy: BaseEyeStrategy) -> None:
2738 """This method is called when the observer is updated."""
2839 thread = Thread (target = self ._run_in_loop , args = (self , eye_strategy ,))
2940 thread .start ()
30-
31- def save_result (self , result : EyeStrategyResult ) -> None :
32- """This method is called when the observer is updated to DETECTED."""
33- self ._result = result
41+ logger .debug ("EyeSubject is running..." )
3442
3543 @staticmethod
3644 def _run_in_loop (self , eye_strategy : BaseEyeStrategy ) -> None :
3745 """This method is called when the observer is updated."""
46+ sleep_interval = EyeSubject .DEFAULT_SLEEP_INTERVAL
47+
3848 while True :
3949 result = eye_strategy .check_if_detected ()
40- print ( "Eye result : " + str (result .result ))
41- print ( "Eye state: " + str ( self . get_state (). name ))
50+ logger . debug ( "EyeStrategyResult : " + str (result .result ))
51+
4252 if result .result :
4353 self .set_state (EyeStates .DETECTED )
44- self .save_result (result )
54+ self ._save_image (result )
55+ sleep_interval = EyeSubject .SLEEP_INTERVAL_DETECTED
4556 else :
4657 self .set_state (EyeStates .NOT_DETECTED )
47- sleep (5 )
58+ sleep_interval = EyeSubject .DEFAULT_SLEEP_INTERVAL
59+
60+ sleep (sleep_interval )
61+
62+ def _save_image (self , result : EyeStrategyResult ) -> None :
63+ """This method is called when the observer is updated."""
64+ time_now = datetime .now ().strftime ("%d-%m-%Y_%H-%M-%S" )
65+ file_location = f"{ self ._image_path } /intruder_{ time_now } .jpg"
66+ cv2 .imwrite (file_location , result .image )
67+ logger .debug ("Image saved to the disk with name: " + f"intruder_{ time_now } .jpg" )
4868
0 commit comments