0
0 комментариев

Итак, у меня python 3.7.3 и последние версии библиотек (будут внизу в фрагменте кода)

Хочу реализовать голосового помощника и не могу понять, как сделать так, что бы он слушал речь только по нажатии определенной кнопки, допустим 1

Например: Нажмите кнопку 1, чтобы начать

#Нажимает кнопку 1

Выполняется команда

Нажмите кнопку 1 (Снова)

Вот код:

[apcode language=»python»]

import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import vlc
import webbrowser
import random
 # настройки
 opts = {
  "alias": ('ассистент'),
  "tbr": ('скажи','расскажи','покажи','сколько','произнеси'),
  "cmds": {			
   «joke»: (‘расскажи анекдот’, ‘расскажи шутку’)
  }
 }
 # функции
def speak(what):
 print( what )
 speak_engine.say( what )
 speak_engine.runAndWait()
 speak_engine.stop()
  def callback(recognizer, audio):
 try:
  voice = recognizer.recognize_google(audio, language = "ru-RU").lower()
  print("[log] Распознано: " + voice)
     if voice.startswith(opts["alias"]):
       cmd = voice
       for x in opts['alias']:
    cmd = cmd.replace(x, "").strip()
   for x in opts['tbr']:
    cmd = cmd.replace(x, "").strip()
        # распознаем и выполняем команду
   cmd = recognize_cmd(cmd)
   execute_cmd(cmd['cmd'])
  except sr.UnknownValueError:
  print("[log] Голос не распознан!")
 except sr.RequestError as e:
  print("[log] Неизвестная ошибка, проверьте интернет!")
 def recognize_cmd(cmd):
 RC = {'cmd': '', 'percent': 0}
 for c,v in opts['cmds'].items():
   for x in v:
   vrt = fuzz.ratio(cmd, x)
   if vrt > RC['percent']:
    RC['cmd'] = c
    RC['percent'] = vrt
      return RC
 def execute_cmd(cmd):	
 if cmd == ‘joke’:
  print(«Шутка»)
 else:
  print('Команда не распознана, повтори!')
 # запуск
r = sr.Recognizer()
m = sr.Microphone(device_index = 0)
 with m as source:
r.adjust_for_ambient_noise(source)
 speak_engine = pyttsx3.init()
  speak("Добрый день")
speak("Слушаю")
  stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1) # infinity loop

[/apcode]

Решенный вопрос
Добавить комментарий