88from home_guardian .common .debounce_throttle import throttle
99from home_guardian .configuration .thread_pool_configuration import executor
1010from home_guardian .function_collection import get_data_dir , get_resources_dir
11+ from home_guardian .message .email import send_email
1112from home_guardian .repository .detected_face_repository import save
13+ from home_guardian .repository .model .detected_face import DetectedFace
1214
13- detected_face_dir = f"{ get_data_dir ()} /detection"
14- os .makedirs (detected_face_dir , exist_ok = True )
15- logger .warning (f"Made the directory, detected_face_dir : { detected_face_dir } " )
15+ _detected_face_dir = f"{ get_data_dir ()} /detection"
16+ os .makedirs (_detected_face_dir , exist_ok = True )
17+ logger .warning (f"Made the directory, _detected_face_dir : { _detected_face_dir } " )
1618
1719
1820def detect_and_take_photo () -> None :
@@ -36,7 +38,7 @@ def detect_and_take_photo() -> None:
3638 cv2 .destroyAllWindows ()
3739
3840
39- @throttle (2 )
41+ @throttle (3 )
4042def save_capture (frame ) -> None :
4143 logger .debug (f"type of frame: { type (frame )} " )
4244 executor .submit (async_save_capture , frame )
@@ -45,13 +47,26 @@ def save_capture(frame) -> None:
4547@logger .catch
4648def async_save_capture (frame ) -> None :
4749 picture_path = (
48- f"{ get_data_dir () } /detection "
50+ f"{ _detected_face_dir } "
4951 f"/detected_face_{ datetime .datetime .now ().__str__ ().replace (':' , '_' )} .jpeg"
5052 )
5153 cv2 .imwrite (picture_path , frame )
52- detected_face = save (picture_path )
54+ detected_face : DetectedFace = save (picture_path )
5355 logger .info (
5456 "Saved picture, picture_path: {}, detected_face: {}" ,
5557 picture_path ,
5658 detected_face ,
5759 )
60+ render_dict : dict = {
61+ "subject" : "Detected face" ,
62+ "content" : "Attention, detected face, please take actions if necessary." ,
63+ "warning_time" : datetime .datetime .now ().strftime ("%Y-%m-%d %H:%M:%S" ),
64+ "content_id" : f"detected_face_{ detected_face } " ,
65+ }
66+ send_email (
67+ render_dict ["subject" ],
68+ "security_warning.html" ,
69+ render_dict ,
70+ detected_face .picture_path ,
71+ )
72+ logger .info ("Sent `security_warning` successfully" )
0 commit comments