@maksim4ik69

Как сменить язык речи в голосовом ассистенте?

Бот говорит не на Русском а на Английском, роспознает по русски, но отвечает на английском, на компютере работает нормально, попытки исправить были, но не сработало(пытался на
spoiler
# Голосовой ассистент КЕША 1.1 BETA
import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import win32com.client as wincl
import webbrowser
import sys
import random
import pandas as pd
from tkinter import *
import pynput
from pynput.keyboard import Key, Controller
from pynput import mouse
import pyjokes
import pyautogui
import wikipedia

voice = ""
class VoiceAssistant:
    speech_language = "ru"
    recognition_language = "ru"
 
# настройки
opts = {
    "alias": ('кеша','кеш','инокентий','иннокентий','кишун','киш',
              'кишаня','кяш','кяша','кэш','кэша',"kesha","яша"),
    "tbr": ('', '', 'покажи', 'сколько', '', 'как','сколько','поставь','переведи', "засеки",'запусти','сколько будет'),
        "cmds": {
    "ctime": ('текущее время', 'сейчас времени', 'который час', 'время', 'какое сейчас время'),
    'startStopwatcdh': ('запусти секундомер', "включи секундомер", "засеки время"),
    'stopStopwatch': ('останови секундомер', "выключи секундомер", "останови"),
    "stupid1": ('расскажи анекдот', 'рассмеши меня', 'ты знаешь анекдоты', "шутка", "прикол"),
    "calc": ('прибавить','умножить','разделить','степень','вычесть','поделить','х','+','-','/'),
    "shutdown": ('выключи', 'выключить', 'отключение', 'отключи', 'выключи компьютер'),
    "conv": ("валюта", "конвертер","доллар",'руб','евро'),
    "Youtube": ("открой ютуб", "", "", "Открой youtube"),
    "Pozdrav": ("",""),
    "deals": ("дела","делишки", 'как сам', 'как дела'),
    "Poka": ("Пока","До свидания", 'Прощай', 'бб'),
    "Radio": ("Музыка","Включи музыку", 'Включи Радио', 'Включи песню'),
    "google": ("","", 'Запусти браузер', 'Запусти гугл', "Запусти Google", 'Открой Google'),
    "Povtori": ("Повтори","Произнеси", 'Скажи', ''),
    "pogoda": ("Какая Погода","Покажи погоду", 'Погода', 'Сегодня солнце?'),
    "zakroigogle": ("Закрой гугл","Закрой Google", 'Закрой Браузер', ""),
    "sozdatel": ("Кто твой создатель?","Как зовут твоего создателя?", 'кто разработчик?', ""),
    "zakroimuziky": ("Останови музыку","", 'вырубай музыку', ""),
    "pause": ("Пауза","Продолжи", 'Поставь паузу', "Продолжить просмотр"),
    "spasibo": ("Спасибо!","Очень помог", 'Благодарен тебе', "я тебе благодарен"),
    "rust": ("Открой раст","", 'Включи раст', ""),
    "sreachyoutube": ("Кеша видео","видео", '', ""),
    "autoclick": ("Включи автокликер","", '', ""),
    "otklavtoclicker": ("Отключи автокликер","", '', ""),
    "Wiki": ("Википедия","", '', "")
    }
}


# функции
def speak(what):
    print( what )
    speak_engine.say( what )
    speak_engine.runAndWait()
    speak_engine.stop()

 
def callback(recognizer, audio):
    try:
        global voice
        voice = recognizer.recognize_google(audio, language = "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):
    #1# сказать текущее время
    if cmd == 'ctime':
        now = datetime.datetime.now()
        speak("Сейчас " + str(now.hour) + ":" + str(now.minute))

    #2# воспроизвести радио
    elif cmd == 'Radio':
        music = ("D:\\Python\\Kesha\\music\\zapomni-derevya-padayut-stoya.mp3","D:\\Python\\Kesha\\music\\zapomni-kozhura-tik-tok.mp3","D:\\Python\\Kesha\\music\\maks-korzh-gnutsya-strely-rvutsya-strely-gnutsya-strely-nad-golovoj.mp3","D:\\Python\\Kesha\\music\\zapomni-ya-so-svoej-duri-tebya-poceluyu.mp3")
        os.system(random.choice(music))
    
    #3# рассказать анекдот
    elif cmd == 'stupid1':
        anigdot = ('Колобок повесился, хаха', "Упавший в воду шоколадный батончик вызвал панику в бассейне.", "Нравится, не нравится, курс рубля вниз катится.", "", "")
        speak(random.choice(anigdot))

    #21#если млямлишь)
    else:
        speak('Команда не распознана, повторите!')
 
# запуск
r = sr.Recognizer()
m = sr.Microphone(device_index = 1)
 
with m as source:
    r.adjust_for_ambient_noise(source)
 
speak_engine = pyttsx3.init()
#Анекдоты
 
# forced cmd test
#speak("Мой разработчик не научил меня анекдотам ... Ха ха ха")
 
speak("Добрый день,создатель!)")
speak("Кеша к вашим услугам")
 
while True:
  with m as source:
    audio = r.listen(source)
  callback(r, audio)
  • Вопрос задан
  • 146 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Гуглить пробовал? На первой странице выдачи этот ответ на StackOverflow.
Если коротко:

Зависит от установленных на компе голосовых движков. Проверь доступные движки так:
import pyttsx3

engine = pyttsx3.init()
for voice in engine.getProperty('voices'):
    print(voice)

Ищи голоса, у которых упомянут русский язык. Если нет - гугли, как их ставить.

Определившись с голосом, пропиши его id в скрипте, например
# тут id голоса, который ты выбрал
voice_id = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSTTS_V110_trTR_Tolga"
engine = pyttsx3.init()
engine.setProperty('voice', voice_id)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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