Advertisement
lasthunter657

Untitled

Feb 1st, 2023
626
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.01 KB | None | 0 0
  1. import re
  2. import time
  3. import test
  4. import serial
  5. import audio
  6. import os
  7. import pvporcupine
  8. from pvrecorder import PvRecorder
  9.  
  10. from threading import Thread
  11.  
  12. sensorReading = 10000
  13. sensorTriggerEnabled = True
  14. sensorTriggered = False
  15.  
  16. hotwordListened = False
  17.  
  18.  
  19. def sensorReader(serial_port, baud_rate):
  20.     """--------------- Sensor Check ----------------------"""
  21.     global sensorReading, sensorTriggerEnabled, sensorTriggered
  22.  
  23.     with serial.Serial(serial_port, baud_rate) as ser:
  24.  
  25.         skippied_readings_count = 0
  26.  
  27.         # Continuously read data from the serial port
  28.         while True:
  29.             # """--------------- Sensor Check ----------------------"""
  30.             # Read a line of data from the serial port
  31.             line = ser.readline()
  32.             # Decode the line of data from bytes to string
  33.             line_str = line.decode("utf-8")
  34.             # print(line_str)
  35.             # search for the serial float number in the string
  36.             match = re.search(r"distance: (\d+)", line_str)
  37.             # audio.play_audio("/home/alexa/project/audio/will_the _code.mp3")
  38.             if match:
  39.  
  40.                 sensorReading = float(match.group(1))
  41.  
  42.                 # skip large numbers or zero (error)
  43.                 if sensorReading == 0 or sensorReading > float(os.environ.get("sensor_max_considered_reading")):
  44.                     continue
  45.  
  46.                 # print(f"-------------------{sensorReading}------------------")
  47.  
  48.                 if sensorReading < float(os.environ.get("sensor_trigger_distance")):
  49.                     if sensorTriggerEnabled and not sensorTriggered:
  50.                         # print("--------------- Sensor Triggered!--------------- ")
  51.                         sensorTriggered = True
  52.                         # dis-allow trigger by sensor
  53.                         sensorTriggerEnabled = False
  54.                     skippied_readings_count = 0
  55.                 else:
  56.                     skippied_readings_count += 1
  57.                     if skippied_readings_count >= 6:
  58.                         # print("--------------- Sensor Reset!--------------- ")
  59.                         # allow trigger by sensor
  60.                         sensorTriggerEnabled = True
  61.                         sensorTriggered = False
  62.  
  63.             # time.sleep(1)
  64.  
  65.  
  66. def hotwordListener():
  67.     """--------------- Hotword Check ----------------------"""
  68.     global hotwordListened
  69.  
  70.  
  71.     access_key = os.environ.get("access_key")
  72.  
  73.     alexa_path = '/home/alexa/project/models/alexa.ppn'
  74.     mariam_path = '/home/alexa/project/models/mariam.ppn'
  75.     porcupine = pvporcupine.create(access_key=access_key, keyword_paths =[alexa_path,mariam_path],sensitivities=[0.8,0.75])
  76.     recorder = PvRecorder(
  77.         device_index=-1,
  78.         frame_length=porcupine.frame_length,
  79.         log_overflow=True,
  80.         buffer_size_msec=1000,
  81.     )
  82.     recorder.start()
  83.  
  84.     # startingTime = time.time()
  85.  
  86.     while True:
  87.         # --------------- Hotword Check ----------------------
  88.         keyword_index = porcupine.process(recorder.read())
  89.  
  90.         if keyword_index >= 0:
  91.             hotwordListened = True
  92.  
  93.  
  94. def init():
  95.     """Initialize the threads"""
  96.     global hotwordListened, sensorReading
  97.  
  98.     sensorReaderThread = Thread(target=sensorReader, args=("/dev/ttyUSB0", 115200))
  99.     hotwordListenerThread = Thread(target=hotwordListener, args=())
  100.     sensorReaderThread.start()
  101.     hotwordListenerThread.start()
  102.  
  103.  
  104. def wait_for_triggers():
  105.     """Wait for triggers to be activated"""
  106.     global hotwordListened, sensorTriggered
  107.     startingTime = time.time()
  108.  
  109.     while True:
  110.         # print("---------------Waiting for trigger---------------")
  111.         # print(time.time() - startingTime)
  112.         # time.sleep(1)
  113.         if hotwordListened:
  114.             hotwordListened = False
  115.             diff = time.time() - startingTime
  116.             return diff
  117.         if sensorTriggered:
  118.             sensorTriggered = False
  119.             # return large value to reset the session
  120.             return 60.0
  121.  
  122.  
  123. init()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement