Files
2023-04-29 16:17:17 -07:00

99 lines
2.9 KiB
Python

""" product
- (todo) keep recording in 5 second intervals
simple algorithm. start recording, send to server after 5 seconds
combine with currentTextBlock, and keep appending
process currentTextBlock every 5 seconds, and if fits command, then execute and clear currentTextBlock
clear currentTextBlock after 200 characters as well
* show a light when sending to server for transcription
- hey rameelo, how long will I live?
- good morning!
"""
import sys
import os
# Get the current working directory
cwd = os.getcwd()
sys.path.append(cwd)
import time
import RPi.GPIO as GPIO
import audio.audio as audio
import tts.app as tts
import requests
from datetime import datetime
import simple_recorder.apa102 as apa102
API_URL = "http://192.168.50.159:5001/transcribe"
BUTTON = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(BUTTON, GPIO.IN)
audioInstance = audio.Audio()
# number of pixels on the LED strip on the hat
PIXELS_N = 3
led = apa102.APA102(num_led=PIXELS_N)
def turnOffLED():
led.clear_strip()
led.show()
def turnOnLED():
for i in range(PIXELS_N):
led.set_pixel(i, 255, 192, 203)
led.show()
# see if we should execute a certain command based on the current text block
def process(text):
formatted = text.lower()
if "live" in formatted:
# get the number of days left until 2058
daysLeftHeran = (datetime(2057, 1, 1) - datetime.now()).days
daysLeftKam = (datetime(2043, 1, 1) - datetime.now()).days
daysLeftArjun = (datetime(2070, 1, 1) - datetime.now()).days
tts.say(
f"Heran, you have {daysLeftHeran} days left to live. Kam, you have {daysLeftKam} days left to live. Arjun, you have {daysLeftArjun} days left to live.")
elif "good morning" in formatted:
dt = datetime.now()
dayOfWeek = dt.strftime('%A')
full_month_name = dt.strftime("%B")
tts.say(
f"Good morning! Today is {dayOfWeek}, {full_month_name}, {dt.day}, {dt.year}.")
else:
tts.say("Sorry, I don't understand that command")
tts.say("hello, how can I help you today?")
if __name__ == '__main__':
while True:
state = GPIO.input(BUTTON)
if state:
if audioInstance.isRecording():
turnOffLED()
savedFileName = audioInstance.stopRecord(save=True, play=True)
if savedFileName is not None:
print("saved file: " + savedFileName)
# make a request with the saved file to the api
response = requests.request(
"POST", API_URL, files={"file": open(savedFileName, "rb")}
)
print(response.json())
results = response.json()["results"]
command = results[0]["transcript"]
process(command)
else:
if not audioInstance.isRecording():
turnOnLED()
audioInstance.startRecord()