123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import pygame
- import speech_recognition as sr
- import openai
- from pathlib import Path
- import time
- import os
- import cv2
- from pyzbar import pyzbar
- # Initialize OpenAI API key
- api_key = 'sk-proj-wwWfffaxim1Qt13uqzS6755567S0xjT3BlbkFJK0rZvx78AJiWG3Ot7d3S'
- client = openai.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: "Gigabee.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.Completion.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, file_path):
- speech_file_path = Path(file_path).parent / "speech.mp3"
- if speech_file_path.exists():
- os.remove(speech_file_path)
- with client.Audio.create(
- model="tts-1",
- input=text,
- voice="alloy"
- ) 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", "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 scan_qr_code():
- cap = cv2.VideoCapture(0)
- while True:
- ret, frame = cap.read()
- if not ret:
- continue
- decoded_objects = pyzbar.decode(frame)
- for obj in decoded_objects:
- qr_data = obj.data.decode('utf-8')
- cap.release()
- cv2.destroyAllWindows()
- return qr_data
- cv2.imshow('QR Code Scanner', frame)
- if cv2.waitKey(1) & 0xFF == ord('q'):
- break
- cap.release()
- cv2.destroyAllWindows()
- return None
- def main():
- text_files = {
- "1": "Gigabeeprotect.txt",
- "2": "Hydrosense.txt",
- "3": "Pushtotalk.txt",
- }
- audio_files = {
- "1": "Gigabee.mp3",
- "2": "hydrosense.mp3",
- "3": "Pushtotalk.mp3",
- }
- while True:
- print("Scan a QR code...")
- qr_data = scan_qr_code()
- if qr_data in text_files:
- play_audio(int(qr_data))
- file_content = read_text_file(text_files[qr_data])
- start_qa_mode(file_content)
- else:
- print("Invalid QR code. Please try again.")
- if __name__ == "__main__":
- main()
|