123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import pygame
- import speech_recognition as sr
- from openai import OpenAI
- from pathlib import Path
- import time
- import os
- import io
- import soundfile as sf
- import sounddevice as sd
- # Initialize OpenAI API key
- api_key = 'sk-proj-wwWaxim1Qt13uqzSS0xjT3BlbkFJK0rZvx78AJiWG3Ot7d3S'
- client = OpenAI(api_key=api_key)
- def create_messages(question, file_content):
- return [
- {"role": "system", "content": "You are a helpful assistant who explains and answers about IoT use cases in Vodafone."},
- {"role": "user", "content": f"{file_content}\n\nQ: {question}\nA:"}
- ]
- def play_audio(num):
- audio_files = {
- 1: "speech1.mp3",
- 2: "hydrosense.mp3",
- 3: "Pushtotalk.mp3",
- }
-
- audio_file = audio_files.get(num)
-
- if audio_file:
- pygame.mixer.init()
- pygame.mixer.music.load(audio_file)
- pygame.mixer.music.play()
- while pygame.mixer.music.get_busy():
- time.sleep(1)
- def recognize_speech():
- recognizer = sr.Recognizer()
- with sr.Microphone() as source:
- print("Listening...")
- audio = recognizer.listen(source)
- try:
- print("Recognizing...")
- text = recognizer.recognize_google(audio, language='en-US')
- print(f"You said: {text}")
- return text
- except sr.UnknownValueError:
- print("Sorry, I did not understand that.")
- return None
- except sr.RequestError:
- print("Sorry, there was an error with the speech recognition service.")
- return None
- def get_response_from_openai(messages):
- response = client.chat.completions.create(
- model="gpt-3.5-turbo",
- messages=messages,
- max_tokens=150,
- temperature=0.5,
- )
- return (response.choices[0].message.content)
- def read_text_file(file_path):
- with open(file_path, 'r') as file:
- return file.read()
- def generate_speech(text):
- spoken_response = client.audio.speech.create(
- model="tts-1",
- voice="alloy",
- response_format="opus",
- input=text
- )
- buffer = io.BytesIO()
- for chunk in spoken_response.iter_bytes(chunk_size=4096):
- buffer.write(chunk)
- buffer.seek(0)
- with sf.SoundFile(buffer, 'r') as sound_file:
- data = sound_file.read(dtype='int16')
- sd.play(data, sound_file.samplerate)
- sd.wait()
- def start_qa_mode(file_content):
- while True:
- print("Please ask your question:")
- question = recognize_speech()
- if question and question.lower() in ["no", "go to next showcase", "exit"]:
- break
- if question:
- messages = create_messages(question, file_content)
- answer = get_response_from_openai(messages)
- print(f"Answer: {answer}")
- generate_speech(answer)
- else:
- print("Sorry, I didn't get that. Please ask again.")
- def user_input():
- while True:
- try:
- num = int(input("Enter a number from 1 to 3: "))
- if 1 <= num <= 3:
- return num
- else:
- print("Invalid input. Please enter a number between 1 and 3.")
- except ValueError:
- print("Invalid input. Please enter a valid integer.")
- def main():
- text_files = {
- 1: "Gigabeeprotect.txt",
- 2: "Hydrosense.txt",
- 3: "Pushtotalk.txt",
- }
- while True:
- num = user_input()
- play_audio(num)
- file_content = read_text_file(text_files[num])
- start_qa_mode(file_content)
- if __name__ == "__main__":
- main()
|