Spaces:
Sleeping
Sleeping
File size: 3,766 Bytes
19f420a 2dba7bc 19f420a fb982e6 19f420a 2dba7bc 19f420a fb982e6 19f420a fb982e6 2dba7bc 19f420a 2dba7bc 19f420a 2dba7bc f37553c 2dba7bc fb982e6 2dba7bc 19f420a 2dba7bc 19f420a fb982e6 2dba7bc fb982e6 2dba7bc fb982e6 2dba7bc 19f420a 2dba7bc fb982e6 2dba7bc fb982e6 f37553c 2dba7bc fb982e6 2dba7bc 19f420a 2dba7bc 19f420a 2dba7bc fb982e6 f37553c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# drive_paddy/alerting/alert_system.py
import time, os, google.generativeai as genai
from gtts import gTTS
class BaseAlerter:
def __init__(self, config):
self.config = config.get("alerting", {})
self.cooldown = self.config.get("alert_cooldown_seconds", 15)
self.last_alert_time = 0
self.alert_on = False
def trigger_alert(self, level="Very Drowsy"):
raise NotImplementedError
def reset_alert(self):
if self.alert_on:
print("Resetting alert state.")
self.alert_on = False # β fixed typo
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# STATIC FILE ALERTER
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class FileAlertSystem(BaseAlerter):
def __init__(self, config):
super().__init__(config)
self.audio_bytes = None
try:
p = config["alerting"]["alert_sound_path"]
with open(p, "rb") as f:
self.audio_bytes = f.read()
print("Static alert sound loaded.")
except Exception as e:
print(f"Could not load alert sound: {e}")
def trigger_alert(self, level="Very Drowsy"):
now = time.time()
if (now - self.last_alert_time) > self.cooldown and not self.alert_on and self.audio_bytes:
self.last_alert_time = now
self.alert_on = True
return self.audio_bytes # return raw bytes
return None
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
# GEMINI TTS TEXT ALERTER
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
class GeminiAlertSystem(BaseAlerter):
def __init__(self, config, api_key):
super().__init__(config)
try:
genai.configure(api_key=api_key)
self.model = genai.GenerativeModel("gemini-pro")
print("Gemini alert system ready.")
except Exception as e:
print(f"Gemini init failed: {e}")
self.model = None
def _gen_text(self, level):
if not self.model:
return "Driver alert! Please check your status."
prompt = (
"Generate a short, gentle reminder (under 10 words) for a slightly fatigued driver."
if level == "Slightly Drowsy"
else "Generate a short, urgent alert (under 8 words) for a very drowsy driver."
)
try:
return self.model.generate_content(prompt).text.strip().replace("*", "")
except Exception as e:
print(f"Gemini error: {e}")
return "Stay alert! Pull over."
def trigger_alert(self, level="Very Drowsy"):
now = time.time()
if (now - self.last_alert_time) > self.cooldown and not self.alert_on:
self.last_alert_time = now
self.alert_on = True
return self._gen_text(level)
return None
# ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
def get_alerter(config, api_key=None):
gem_cfg = config.get("alerting", {}).get("gemini_alerts", {})
if gem_cfg.get("enabled") and api_key:
return GeminiAlertSystem(config, api_key)
return FileAlertSystem(config)
|