123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import pygame.mixer as mixer
- import speech_recognition as sr
- import openai
- from pathlib import Path
- from openai import OpenAI
- import os
- import pygame
- import mixer
- # Set your OpenAI API key here
- api_key = 'sk-proj-wwWaxim1Qt13243454353uqzSS0xjT3BlbkFJK0rZvx78AJiWG3Ot7d3S'
- client = OpenAI(api_key=api_key)
- # Initialize pygame mixer
- pygame.mixer.init()
- def read_text_file(file_path):
- with open(file_path, 'r', encoding='utf-8') as file:
- return file.read()
- # Function to recognize speech from the microphone
- 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
- # Function to get a response from OpenAI
- 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. Do not say any calculations. Directly say the result"},
- {"role": "user", "content": f"{file_content}\n\nQ: {question}\nA:"}
- ]
-
- 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)
- # Function to generate speech using OpenAI TTS
- 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)
- # Main function to handle user query
- def chatbot(question, file_path):
- file_content = read_text_file(file_path)
- messages = create_messages(question, file_content)
- answer = get_response_from_openai(messages)
- return answer
- if __name__ == "__main__":
- file_path = 'device_data.txt' # Path to your text file
- while True:
- print("Press Enter to ask a question, or type 'exit' or 'quit' to stop.")
- user_input = input("Type 'speak' to ask a question using your voice: ").strip().lower()
-
- if user_input in ['exit', 'quit']:
- break
-
- if user_input == 'speak':
- question = recognize_speech()
- if question:
- answer = chatbot(question, file_path)
- print("Answer:", answer)
- speech_file = generate_speech(answer, file_path)
- pygame.mixer.init()
- pygame.mixer.music.load(speech_file)
- 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)
- else:
- question = user_input
- answer = chatbot(question, file_path)
- print("Answer:", answer)
- speech_file = generate_speech(answer, file_path)
- pygame.mixer.init()
- pygame.mixer.music.load(speech_file)
- 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)
|