123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- import pygame
- import speech_recognition as sr
- from openai import OpenAI
- from pathlib import Path
- import time
- import os
- # Initialize OpenAI API key
- api_key = 'sk-proj-wwWaxim1Qt13uq45e45rtfgzSS0xjT3BlbkFJK0rZvx78AJiWG3Ot7d3S'
- client = OpenAI(api_key=api_key)
- def create_messages(question, file_content):
- return [
- {"role": "system", "content": "You are a tour guide who explains and answers about IoT use cases in Vodafone."},
- {"role": "user", "content": f"{file_content}\n\nQ: {question}\nA:"}
- ]
- 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 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-4o",
- messages=messages,
- max_tokens=75,
- 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, file_path):
- speech_file_path = Path(file_path).parent / "speech.mp3"
- with client.audio.speech.with_streaming_response.create(
- model="tts-1", # Replace with your actual model ID
- input=text,
- voice="alloy" # Replace with a valid voice for your chosen model
- ) as response:
- response.stream_to_file(str(speech_file_path))
- return str(speech_file_path)
- 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}")
- speech_file_path = generate_speech(answer, "speech.mp3")
- pygame.mixer.init()
- pygame.mixer.music.load(speech_file_path)
- pygame.mixer.music.play()
- while pygame.mixer.music.get_busy():
- pygame.time.Clock().tick(10) # Adjust as needed
- pygame.mixer.music.stop() # Ensure music playback stops
- pygame.mixer.quit() # Release resources
- os.remove(speech_file_path)
-
-
- else:
- print("Sorry, I didn't get that. Please ask again.")
- def main():
- while True:
- num = user_input()
- play_audio(num)
- text_files = {
- 1: "Gigabeeprotect.txt",
- 2: "Hydrosense.txt",
- 3: "Pushtotalk.txt",
- }
- text_file = text_files.get(num)
- if text_file:
- file_content = read_text_file(text_file)
- start_qa_mode(file_content)
- if __name__ == "__main__":
- main()
|