@Lazarusnode13
Хобби:Программирование, Електроника, Музыка

Как сделать вызов по голосу?

Помогите написать код который будет работать если я скажу: Алиса
У меня проблема, программа работает на ура, но микрофон будет включатся и выключатся с каждым разом пока я не скажу какойто вопрос
Мне нужно чтоб когда я сказал имя: "алиса", то тогда и будет включатся микрофон для прослушки вопроса и если достигнуто определенное время, то выключает микрофон
Ассистент работает оффлайн если что, потому-что не всегда есть интернет
Вот код
import random
import sys
from vosk import Model, KaldiRecognizer  # оффлайн-распознавание от Vosk
import speech_recognition  # распознавание пользовательской речи (Speech-To-Text)
import wave  # создание и чтение аудиофайлов формата wav
import json  # работа с json-файлами и json-строками
import os  # работа с файлами
import subprocess
import requests

one = 'echo Алиса слушает |RHVoice-test -p anna'
subprocess.call(one, shell=True)

def assistent(*args: tuple):
    with microphone:
        value = ""
        recognizer.adjust_for_ambient_noise(microphone, duration=1)
        try:
            audio = recognizer.listen(microphone, 7, 5)

            with open("voices-my.wav", "wb") as file:
                file.write(audio.get_wav_data())

        except speech_recognition.WaitTimeoutError:
            print('Повтори')

        try:
            audio_file = wave.open("voices-my.wav", "rb")
            model = Model("images/vosk-model-small-ru-0.15")
            offline = KaldiRecognizer(model, audio_file.getframerate())

            data = audio_file.readframes(audio_file.getnframes())
            if len(data) > 0:
                if offline.AcceptWaveform(data):
                    value = offline.Result()

                    dicts = open('body.json', 'r')
                    opening = json.load(dicts)
                    if 'привет' in value:
                        subprocess.call('echo '+random.choice(opening['привет'])+'|RHVoice-test -p anna', shell=True)
                    elif 'как дела' in value:
                        subprocess.call('echo '+random.choice(opening['как дела'])+'|RHVoice-test -p anna', shell=True)
                    elif 'пока' in value:
                        subprocess.call('echo '+random.choice(opening['пока']) +'|RHVoice-test -p anna', shell=True)
                        sys.exit(1)
        except:
            error = 'echo не могу распознать речь| RHVoice-test -p anna'
            subprocess.call(error, shell=True)
    return value

if __name__ == "__main__":

    recognizer = speech_recognition.Recognizer()
    microphone = speech_recognition.Microphone()

    while True:
        voice_input = assistent()
        os.remove("voices-my.wav")
        print(voice_input)

Помогите пожалуйста
  • Вопрос задан
  • 75 просмотров
Пригласить эксперта
Ответы на вопрос 1
@nshmyrev
Микрофон нужно держать всегда включённым, иначе как распознавать ключевое слово. Пример потокового распознавания с микрофона с воском можно найти здесь:

https://github.com/alphacep/vosk-api/blob/master/p...

speech_recognition лучше не использовать, он не приспособлен для потокового распознавания.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы