Hallo,
ich programmiere momentan einen Sprachassistenten und bin gerade am Wake Word dran. Mein Code sieht so aus:
import pyttsx3
import re
import pyjokes
import speech_recognition as sr
from pyowm import OWM
import spotipy
from spotipy.oauth2 import SpotifyOAuth
import time
import random
import datetime
import pytz
from geopy.geocoders import Nominatim
from timezonefinder import TimezoneFinder
import sounddevice as sd
import pvporcupine
import openai
openai.api_key = 'sk-...'
model_id = "gpt-4"
engine = pyttsx3.init()
def recognize_speech(recognizer, source):
print("Sage etwas...")
audio = recognizer.listen(source, timeout=15)
try:
text = recognizer.recognize_google(audio, language="de-DE")
print("Text: " + text)
return text
except sr.UnknownValueError:
return "not_understood"
except sr.RequestError as e:
print(f"Fehler bei der Anfrage an die Google Web Speech API: {e}")
return ""
def picovoice_listen():
keyword_file_path = "C:\\Hey-Luna_de_windows_v3_0_0\\Hallo-Luna_de_windows_v3_0_0.ppn"
sensitivities = [0.7]
try:
porcupine = pvporcupine.create(
access_key='...',
keyword_paths=['C:\\Hey-Luna_de_windows_v3_0_0\\Hallo-Luna_de_windows_v3_0_0.ppn'],
model_path='C:\\Hey-Luna_de_windows_v3_0_0\\porcupine_params_de.pv'
)
sample_rate = porcupine.sample_rate
print("Sample Rate:", sample_rate)
pcm = record_audio(sample_rate=sample_rate, duration=3)
keyword_index = porcupine.process(pcm)
if keyword_index >= 0:
print("Wake word detected!")
porcupine.delete()
return True
else:
print("Wake word not detected!")
except pvporcupine.PorcupineError as e:
print(f"Porcupine error: {e}")
return False
def record_audio(sample_rate, duration):
print("Aufnahme gestartet...")
audio = sd.rec(int(sample_rate * duration), samplerate=sample_rate, channels=1, dtype='int16')
sd.wait()
print("Aufnahme beendet.")
return audio.flatten()[:512]
def openai_request(prompt):
response = openai.ChatCompletion.create(
model=model_id,
messages=prompt
)
api_usage = response['usage']
print('Total Token consumed: {0}'.format(api_usage['total_tokens']))
prompt.append({'role': response.choices[0].message.role, 'content': response.choices[0].message.content})
return prompt
def speak(text):
engine.say(text)
engine.runAndWait()
def ausführen():
recognizer = sr.Recognizer()
while True:
if picovoice_listen():
with sr.Microphone() as source:
q = recognize_speech(recognizer, source)
print("Erkannter Text:", q)
if q == "not_understood":
speak("Entschuldigung! Das habe ich nicht verstanden.")
continue
elif "hallo" in q:
speak('Hallo! Womit kann ich dir behilflich sein?')
continue
else:
prompt = [{'role': 'user', 'content': q}]
prompt = openai_request(prompt)
response = prompt[-1]['content']
speak(response)
return # Programm beenden, nachdem die Antwort gesprochen wurde
if __name__ == '__main__':
ausführen()
wenn ich nun aber das Programm ausführe und das Wake Word ("Hallo Luna") sage, kommt immer "Wake word not detected!" und dann wiederholt sich das ganze, egal wie oft ich das Wake word sage. Woran liegt das?
Freundliche Grüsse