Задать вопрос
@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)

Помогите пожалуйста
  • Вопрос задан
  • 90 просмотров
Подписаться 2 Средний 4 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
@nshmyrev
Микрофон нужно держать всегда включённым, иначе как распознавать ключевое слово. Пример потокового распознавания с микрофона с воском можно найти здесь:

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

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

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽