Как добавить функцию WAKE-UP в python?

Я новичок в python и сделал голосового помощника с python. Я написал этот код, чтобы добавить функцию пробуждения в мой голосовой помощник.

WAKE = "hey jarvis"
SERVICE = authenticate_google()
print("Start")

while True:
    print("Listening...")
    text = get_audio()

if text.count(WAKE) > 0:
    speak("I am ready")
    text = get_audio()

Но когда я запускаю его, я получаю эту ошибку:

Traceback (most recent call last):
  File "C:/Users/Faizan/Desktop/gui.py", line 62, in <module>
    query = takeCommand().lower()
  File "C:/Users/Faizan/Desktop/gui.py", line 41, in takeCommand
    with sr.Microphone () as source:
  File "C:\Users\Faizan\AppData\Local\Programs\Python\Python36\lib\site-packages\speech_recognition\__init__.py", line 86, in __init__
    device_info = audio.get_device_info_by_index(device_index) if device_index is not None else audio.get_default_input_device_info()
  File "C:\Users\Faizan\AppData\Local\Programs\Python\Python36\lib\site-packages\pyaudio.py", line 949, in get_default_input_device_info
    device_index = pa.get_default_input_device()
OSError: No Default Input Device Available

Вот мой полный код:

import pyttsx3
import datetime
import speech_recognition as sr
import wikipedia
import webbrowser
import os
from tkinter import *

Faizan_root = Tk()
Faizan_root.geometry("300x400")
Faizan_root.title("JARVIS AI by Faizan Jallani")

engine = pyttsx3.init('sapi5')
voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)

WAKE = "hey jarvis"
SERVICE = authenticate_google()
print("Start")

while True:
    print("Listening...")
    text = get_audio()

if text.count(WAKE) > 0:
    speak("I am ready")
    text = get_audio()

def speak(audio):
engine.say(audio)
engine.runAndWait()

def wishMe():
    hour = int(datetime.datetime.now().hour)
if hour>=0 and hour<12:
    speak("Good Morning!")

elif hour>=12 and hour<18:
    speak("Good Afternoon!")

else:
    speak("Good Evening!")

speak("I am JARVIS. How may I help you Sir?")



def takeCommand():
    r = sr.Recognizer()
with sr.Microphone () as source:
    print("Listening...")
    r.pause_threshold = 1
    r.adjust_for_ambient_noise(source, duration=1)
    audio = r.listen(source)

try:
    print("Recognizing...")
    query = r.recognize_google(audio, language='en-in')
    print(f"User said: {query}\n")

except Exception as e:
    # print(e)
    speak("Say that again please...")
    return"None"
return query


if __name__ == '__main__':
    wishMe()
    while True:
        query = takeCommand().lower()

        # Logic for executing tasks based on query.
        if 'wikipedia' in query:
            speak('Searching Wikipedia...')
            query = query.replace("wikipedia", "")
            results = wikipedia.summary(query, sentences=2 )
            speak("According to Wikipedia")
            print(results)
            speak(results)

        elif 'open youtube' in query:
            webbrowser.open("https://www.youtube.com/", new=2)
            speak("Enjoy")

        elif 'open google' in query:
            webbrowser.open("https://www.google.com/", new=2)

        elif 'open stack overflow' in query:
            webbrowser.open("https://stackoverflow.com/", new=2)

        elif 'play music' in query:
            music_dir = 'F:\\songs\\Favorite'
            songs = os.listdir(music_dir)
            print(songs)
            os.startfile(os.path.join(music_dir, songs[0]))

        elif 'the time' in query:
            strTime = datetime.datetime.now().strftime("%H:%M:%S")
            speak(f"Sir, the time is {strTime}")

        elif 'open code' in query:
            codePath = "C:\\Users\\Faizan\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe"
            os.startfile(codePath)

        elif 'open facebook' in query:
            webbrowser.open("https://www.facebook.com/", new=2)

        elif 'instagram' in query:
            webbrowser.open("https://www.instagram.com/faizangujjar01/", new=2)
            speak("Have a look sir")

        elif 'are you there' in query:
            stMsgs = ['At you service, Sir']
            speak(stMsgs)

        elif 'what is' in query:
            speak('Searching Wikipedia...')
            query = query.replace("wikipedia", "")
            results = wikipedia.summary(query, sentences=2)
            speak("According to Wikipedia")
            print(results)
            speak(results)

        elif 'search for' in query:
            speak('Searching Wikipedia...')
            query = query.replace("wikipedia", "")
            results = wikipedia.summary(query, sentences=2)
            speak("According to Wikipedia")
            print(results)
            speak(results)



        elif 'shutdown the PC' in query:
            choice = input("Please confirm to shutdown the pc (y or n)")
            if choice == 'n':
                exit()
            else:
                os.system("shutdown /s /t 1")

        elif 'exit' in query:
            sys.exit(speak("Ok sir, Take Care."))


Faizan_root.mainloop()

Ребята, не игнорируйте вопрос. Если мне удастся это сделать, я выиграю битву (пари) с моими друзьями. Это вопрос репутации моего программирования.


person Faizan Jallani    schedule 28.07.2020    source источник
comment
Согласно вашей ошибке Default Input Device Available, у вас есть устройство ввода по умолчанию (микрофон), определенное в Windows? Возможно, вам придется вручную указать один   -  person Saddy    schedule 29.07.2020
comment
Да, я определил микрофон inpug. Вы можете посмотреть в коде. Когда я просто запускаю код, он запускается и работает, но когда я вхожу в функцию пробуждения, он выдает мне эту ошибку. Эта ошибка касается аутентификации_google и get_audio слова, используемые в коде функции пробуждения. Пожалуйста, ознакомьтесь с полным кодом и помогите.   -  person Faizan Jallani    schedule 29.07.2020
comment
ваш отступ довольно испорчен   -  person Paul H    schedule 29.07.2020
comment
По одному вопросу за раз, и старайтесь максимально сузить сферу охвата каждого вопроса. Если вы даже не можете подключиться к устройству, задайте его как отдельный вопрос сначала, прежде чем вы даже начнете выяснять, как прослушать фразу пробуждения.   -  person Charles Duffy    schedule 29.07.2020
comment
... в этом случае, однако, узкая/действующая часть вашего вопроса является дубликатом pyaudio: IOError: нет доступного устройства ввода по умолчанию   -  person Charles Duffy    schedule 29.07.2020
comment
да чувак, ты прав. Это моя вина. Мой вопрос слишком сложен. Я просто новичок здесь и в питоне. Просто нужна помощь. Кстати, вы, ребята, действительно классные и всегда помогаете.   -  person Faizan Jallani    schedule 29.07.2020


Ответы (1)


Кажется, у него ошибка отступа в with sr.Microphone() as source:, вы должны написать его под своим def command function не независимым.. Должно быть так..

Это код ООН

def takeCommand():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Listening...")
        r.pause_threshold = 0.8
        audio = r.listen(source)

Надеюсь, это поможет, пожалуйста, дайте мне знать, если есть какие-либо другие ошибки

person Y-King    schedule 12.02.2021