@maksim4ik69

Как сделать голосовой поиск в ютубе для ассистенте?

Не знаю какую переменую постасить в search_term
в програмированию мало понимаю, но тут нужно срочно

search_term = переменная поиска в ютубе, точнее запроса, я говорю ассистенту Кеша видео: после чего он доложен запустить ютуб и ввести слова после " Кеша видео" в строчку поиска

1. что пробовал это Пробовал туда писать recognition_cmd, после чего хотел подставить в переменную rec.PartialResult(), перед этим импортируя rec
from stt import rec, в итоге вышло в поиске просто [Text], а не слова которые шли после "Кеша видео" выхлоп речи просто не записывается в [Text}

Подскажите что я делаю не так

Вот моя заготовка( дальше не разобрался )
распознавания речи на silero

Заготовка которую нашел в гугле

elif cmd == "sreachyoutube":
        search_term = (Тут незнаю что поставить).replace("Кеша видео", " ")
        url = "https://www.youtube.com/results?search_query=" + search_term
        webbrowser.get().open(url)
        text = "Готово"
        tts.va_speak(text)


а вот уже почти фулл код, мб кто-то знает, буду очеень благодарен за помощь

main
spoiler
# КЕША 2.0

import config
import stt
import tts
from fuzzywuzzy import fuzz
import datetime
from num2t4ru import num2text
import webbrowser
import random


print(f"{config.VA_NAME} (v{config.VA_VER}) начал свою работу ...")


def va_respond(voice: str):
    print(voice)
    if voice.startswith(config.VA_ALIAS):
        # обращаются к ассистенту
        cmd = recognize_cmd(filter_cmd(voice))

        if cmd['cmd'] not in config.VA_CMD_LIST.keys():
            tts.va_speak("Что?")
        else:
            execute_cmd(cmd['cmd'])


def filter_cmd(raw_voice: str):
    cmd = raw_voice

    for x in config.VA_ALIAS:
        cmd = cmd.replace(x, "").strip()

    for x in config.VA_TBR:
        cmd = cmd.replace(x, "").strip()

    return cmd


def recognize_cmd(cmd: str):
    rc = {'cmd': '', 'percent': 0}
    for c, v in config.VA_CMD_LIST.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: str):
    if cmd == 'help':
        # help
        text = "Я умею: ..."
        text += "произносить время ..."
        text += "рассказывать анекдоты ..."
        text += "и открывать браузер"
        tts.va_speak(text)
        pass
    elif cmd == 'ctime':
        # current time
        now = datetime.datetime.now()
        text = "Сейч+ас " + num2text(now.hour) + " " + num2text(now.minute)
        tts.va_speak(text)

    elif cmd == 'joke':
        jokes = ['Как смеются программисты? ... ехе ехе ехе',
                 'ЭсКьюЭль запрос заходит в бар, подходит к двум столам и спрашивает .. «м+ожно присоединиться?»',
                 'Программист это машина для преобразования кофе в код']

        tts.va_speak(random.choice(jokes))

    elif cmd == 'open_browser':
        chrome_path = 'C:/Program Files (x86)/Google/Chrome/Application/chrome.exe %s'
        webbrowser.get(chrome_path).open("http://python.org")

    elif cmd == "sreachyoutube":
        search_term = (Тут незнаю что поставить).replace("Кеша видео", " ")
        url = "https://www.youtube.com/results?search_query=" + search_term
        webbrowser.get().open(url)
        text = "Готово"
        tts.va_speak(text)

# начать прослушивание команд
stt.va_listen(va_respond)


tts
spoiler
import torch
import sounddevice as sd
import time

language = 'ru'
model_id = 'ru_v3'
sample_rate = 48000 # 48000
speaker = 'aidar' # aidar, baya, kseniya, xenia, random
put_accent = True
put_yo = True
device = torch.device('cpu') # cpu или gpu
text = "Хауди Хо, друзья!!!"

model, _ = torch.hub.load(repo_or_dir='snakers4/silero-models',
                          model='silero_tts',
                          language=language,
                          speaker=model_id)

model.to(device)


# воспроизводим
def va_speak(what: str):
    audio = model.apply_tts(text=what+"..",
                            speaker=speaker,
                            sample_rate=sample_rate,
                            put_accent=put_accent,
                            put_yo=put_yo)

    sd.play(audio, sample_rate * 1.05)
    time.sleep((len(audio) / sample_rate) + 0.5)
    sd.stop()

# sd.play(audio, sample_rate)
# time.sleep(len(audio) / sample_rate)
# sd.stop()


stt
spoiler
import vosk
import sys
import sounddevice as sd
import queue
import json

model = vosk.Model("model_small")
samplerate = 16000
device = 1

q = queue.Queue()


def q_callback(indata, frames, time, status):
    if status:
        print(status, file=sys.stderr)
    q.put(bytes(indata))


def va_listen(callback):
    with sd.RawInputStream(samplerate=samplerate, blocksize=8000, device=device, dtype='int16',
                           channels=1, callback=q_callback):

        rec = vosk.KaldiRecognizer(model, samplerate)
        while True:
            data = q.get()
            if rec.AcceptWaveform(data):
                callback(json.loads(rec.Result())["text"])
            #else:
            #    print(rec.PartialResult())


config
spoiler
VA_NAME = 'Кеша'

VA_VER = "2.0"

VA_ALIAS = ('кеша', 'кеш', 'инокентий', 'иннокентий', 'кишун', 'киш', 'кишаня', 'кешечка', 'кэш', 'кэша')

VA_TBR = ('скажи', 'покажи', 'ответь', 'произнеси', 'расскажи', 'сколько', "")

VA_CMD_LIST = {
    "help": ('список команд', 'команды', 'что ты умеешь', 'твои навыки', 'навыки'),
    "ctime": ('время', 'текущее время', 'сейчас времени', 'который час'),
    "joke": ('расскажи анекдот', 'рассмеши', 'шутка', 'расскажи шутку', 'пошути', 'развесели'),
    "open_browser": ('открой браузер', 'запусти браузер', 'открой гугл хром', 'гугл хром',"Открой гугл"),
    "sreachyoutube":("Видео","Открой видео"),
    "OpenYoutube":("Открой ютуб", "запусти ютуб"),
    "VIKLKOPM":("Отключи компютер", "Выключи компютер"),
    "RAST":("Открой раст", "Включи раст"),
    "BYBIT":("Открой биржу","Открой BYBIT"),
    "zakrbrayzer":("Закрой ютуб", "Закрой браузер", "Закрой гугл"),
    "sozdatel":("Кто твой создатель?"),
    "Sverni":("Сверни окна", "Разверни окна", "Сверни", "Разверни"),
    "despetcher":("Открой диспетчер задач", "открой диспетчер", "диспетчер задач"),
    "pause":("нажми пробел", "поставь паузу", "включи фильм", "останови фильм"),
    "raskladka":("Смени язык", "смени расскладку", "поменяй расскладку"),
    "golosvvod":("Голосовой ввод", "голосовой ввод"),
    "wikipedia":("википедия")
}
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ваш ответ на вопрос

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

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