Рубрики
Без рубрики

Кодирование вашего собственного Google Home и запустить Spotify в Python

Разве этот проект не звучит увлекательно? Цель проекта: Кодируйте свой собственный дом Google с Python и узнайте, как использовать распознавание речи, чтобы запустить Spotify и Play Songs! Вы когда-нибудь хотели кодировать мощный, но простой инструмент, который более настроен, чем основные устройства? Мы узнаем, как реализовать его в Python с букетом … кодировать свой собственный дом Google и запустить Spotify в Python Подробнее »

Автор оригинала: Clement Lelievre.

Разве этот проект не звучит увлекательно?

Цель проекта: Кодируйте свой собственный дом Google домой с Python и узнайте, как использовать распознавание речи, чтобы запустить Spotify и Play Songs!

Вы когда-нибудь хотели кодировать мощный, но простой инструмент, который более настроен, чем основные устройства?

Мы узнаем, как реализовать его в Python с кучей мощных библиотек!

Хотите посмотреть, как это Действительно работает?

Разбие наша проблема, впереди нас три задания:

  • обработка речи и преобразовать его в текст
  • на основе некоторых строка Состояние в тексте, откройте процесс (здесь, приложение Spotify)
  • взаимодействовать с процессом

Выполнение распознавания речи

Не делай тяжелой подъема самостоятельно!

Распознавание речи – это возможность обнаруживать и идентифицировать слова и фразы в разговорном языке и впоследствии преобразуйте их в человеческий, читаемый текст.

Это поле может быть очень сложным и лучшим библиотеками Python в результате десятилетий тяжелой работы от экспертов. Мы, очевидно, не будем построить от A до Z такую библиотеку, которая была бы выходом за этот учебник. Вместо этого мы будем использовать Производительность оформления библиотека.

Следовательно, нам не нужно строить какую-либо модель обучения машины с нуля, эта библиотека предоставляет нам обертки для нескольких известных API для публичного распознавания речи (например, API Google Cloud Relect API, IBM речь и т. Д.).

Как обычно, мы начнем загрузку модуля:

pip install SpeechRecognition pydub

Затем в новом файле Python вы можете импортировать его следующим образом:

import speech_recognition as sr

Теперь он очень удобно, у вас есть доступ к нескольким механизмам распознавания речи, которые имеют разные случаи использования:

В этом уроке мы будем использовать распознавание речи Google, потому что это довольно просто использовать, эффективно и не требует какой-либо клавиши API.

Интерпретация речи из файла

Регулярный размер

Перед началом, убедитесь, что вы поместили аудиофайл, содержащий английский язык, в текущем рабочем каталоге для максимизации простоты или где-то вы знаете путь (например, «../AUDIO_FILES/MY_AUDIO_FILE.WAV»).

Первый шаг – инициализировать ваше распознавание, как так:

# initialize the recognizer
r = sr.Recognizer()

Затем подведенный ниже код отвечает за загрузку аудиофайла из указанного пути, а затем преобразование речи в текст с использованием распознавания Google речи:

# open the file
with sr.AudioFile(path_to_audio_file) as source:
    # listen to the data ( = load audio to memory)
    audio_data = r.record(source)
    # recognize (convert from speech to text)
    text = r.recognize_google(audio_data)
    print(text)

Это может занять некоторое время, с другой стороны, не думайте, что продолжительность выполнения кода каким-то образом связана с скоростью человека. Готовое чтение!

Хорошо, этот вид сценария отлично работает для малых и средних аудиофайлов, не очень хорошо для больших файлов.

Большие аудиофайлы

Я не буду идти в слишком много подробностей здесь, так как наша цель – запустить Spotify благодаря голосовой команде, помните? Предлагая мы будем использовать микрофон.

Однако, если вам нужно преобразовать содержание больших аудиофайлов, то вы должны смотреть в Библиотека Pydub , более конкретно его Аудиосезопье Класс и Split_on_silence Функция Отказ

Почему?

Поскольку, хорошо оснащенные этими двумя, вы сможете соответственно загружать аудиоданные и блюда, основанные на предварительно установленной продолжительности тишины, найденной в данных.

Это приходит удобно, чтобы разделить свой аудиофайл.

Интерпретация речи от микрофона

Теперь мы добираемся до ядра учебника! Мы будем обрабатывать аудио вход непосредственно из микрофона, перемещая один шаг ближе к возможности на самом деле сделать голосовые команды.

Для начала, это требует, чтобы Pyaudio будет установлен на вашем компьютере и в зависимости от вашей ОС Процедура установки варьируется:

Окна

pip install pyaudio

Linux.

Вам нужно сначала установить зависимости:

sudo apt-get install python-pyaudio python3-pyaudio
pip install pyaudio

Мака

Вам нужно сначала установить Portaudio:

brew install portaudio
pip install pyaudio

Предупреждение: Возможно, вы испытываете проблемы, устанавливающие модуль правильно, особенно в Windows.

Для пользователей Windows, если вам не удастся вышеупомянутый путь, попробуйте:

pip install pipwin (if you don't already have it)
pipwin install pyaudio

Теперь мы готовы начать строить нашу Spotify Launcher!

with sr.Microphone() as source:
    # read the audio data from the microphone
    audio_data = r.record(source, duration=5)
    print("Analyzing...")
    # convert speech to text
    text = r.recognize_google(audio_data)
    print(text)

Этот кусок кода откроется (по умолчанию) MIC, прочитал вход в течение 5 секунд (вы можете, очевидно, адаптировать этот аргумент), затем (попробуйте) преобразовать его, наконец распечатать вывод.

Очевидно, что это все еще не идеально, например, он обычно борется с гомофонными фразами или словами.

В этот момент стоит отметить два аргумента:

  • Смещение: передается в функцию записи, она используется для начала записи после некоторой задержки (по умолчанию 0)
  • Язык: передается в функцию распознавания_google, она меняет целевой язык (например, «FR-FR»). Больше информации о поддерживаемых языках здесь

Открытие процессов с Python

Теперь, когда мы можем поговорить с нашим распознателем речи и преобразовывать речь в текст, давайте отправимся к нашей второй задаче: открытие процессов.

Как часто есть несколько способов сделать это.

Мы будем использовать подпрокат модуль, который встроен.

В частности, мы будем использовать Popen (P подставки для процесса) функции в этом модуле, например:

# import the function from its module
from subprocess import Popen

Popen(path_of_the_executable)

Например, на моей машине, открытие приложения Spotify Desktop будет сделано так:

subprocess.Popen('C:\\Users\\cleme\\AppData\\Roaming\\Spotify\\Spotify.exe')

В зависимости от вашей ОС вам, возможно, понадобится настроить скольжения на пути, чтобы убедиться, что он хорошо понимается. Вы можете использовать функцию, делающую это для вас в ОС Встроенный модуль.

Конечно, как всегда, не стесняйтесь погрузиться глубже в этот модуль, но на данный момент у нас есть то, что нам нужно, чтобы вызвать открытие нашего приложения Spotify (Desktop).

Взаимодействие с окнами

ОК, давайте подведем сумму:

  • Мы знаем, как преобразовать речь в текст
  • Мы знаем, как открыть процессы

Оттуда мы можем легко создать условие на выходе текста из преобразования речи; Например:

if "spotify" in text.lower():
    subprocess.Popen('C:\\Users\\cleme\\AppData\\Roaming\\Spotify\\Spotify.exe')

Что осталось делать?

Теперь, когда наше приложение Spotify открыто на голосовой команде, нам нужно как-то быть в состоянии запустить песню.

Для этого может существовать модули Spotify, но мы будем использовать мощный модуль:

Pyautogui

Этот модуль по существу о автоматизации мыши, окон и клавиатуры!

Итак, что мы сделаем, это определить местоположение Spotify App Search Sear, щелкните по нему, очистить его, если это необходимо, введите имя песни или исполнителя в нем, затем нажмите Enter, затем нажмите Play, и мы закончим!

pip install pyautogui

Первое – убедиться, что мы имеем дело с окном Spotify App.

Чтобы сделать это, мы будем петлю на pyautogui.getAllwindows () , что дает все в настоящее время открытые заголовки Windows и сделать оператор, если выбрать окно Spotify.

Затем мы перейдем к подзадачам, указанным выше.

Мы будем использовать здесь конвенцию, в нашей голосовой команде: ради простоты мы предположим, что название «Художественного художника» приходит в голосовой команде (например,.: «Пожалуйста, откройте Spotify и Play Madonna»).

Конечно, это фимумный пример, но вы можете легко улучшить голосовую команду и сделать его более гибким.

Вот что похоже:

    for window in pyautogui.getAllWindows():
        if 'spotify' in window.title.lower():
            window.show()
            print('spotify window activated')
            text = text.split()  # break down text into list of single words strings, for later usage
            time.sleep(5.5)
            pyautogui.click(x=480,y=25) # this is the search bar location on my machine, when the window is maximized
            time.sleep(1)
            pyautogui.hotkey('ctrl','a') # clearing the search bar
            pyautogui.press('backspace') # clearing the search bar
            time.sleep(0.5)
            pyautogui.write(text[-1],interval=0.05) # because we assumed that the artist was the last word of the voice command
            time.sleep(3)
            pyautogui.click(x=380,y=250) # this is the play button location on my machine, when the window is maximized
            break

Разбие на этот кусок кода, мы выполняем последовательно все шаги, которые мы определили как обязательные.

Обратите внимание на разницу между Горячая клавиша (комбинация нажатия клавиш) и Нажмите (одно ключ, вниз потом вверх) методы.

Мы использовали Ctrl + A Чтобы выбрать весь потенциальный текст в панели поиска, затем мы удалили его, прежде чем набрать имя нашего исполнителя. Текст [-1] Бит относится к последнему слову нашей голосовой команды, см. Конвенцию, описанную выше.

Обратите внимание на Интервал Аргумент внутри метода записи: в некоторых случаях жизненно важно для нашего сценария функционировать правильно. Почему?

Поскольку это аргумент, который устанавливает скорость набора текста, а в некоторых случаях Pyautogui просто становится слишком быстро для процесса, и это заканчивается в нежелательном результате.

Вам может потребоваться вручную FineTune этот аргумент, как я делал до урегулирования 0,05. В той же вене, время. Asleep () заявления здесь, чтобы убедиться, что наш код не слишком много не выходит на вершину приложения, например, он позволяет дождаться правильного открытия приложения. Это может подразумевать некоторые руководства.

Последнее утверждение о перерыве, чтобы убедиться, что мы выходим из цикла, когда мы нашли наше приложение. Давайте не будем тратить время, проверяя бесполезные окна!

Хорошо, мы почти там, я могу услышать песню сейчас!

Теперь вы можете задаться вопросом, что если нам нужно остановить песню от игры?

Ну, мы позаботимся о том, что в нижнем куске кода:

while True:
        try:
            with sr.Microphone() as source:
                # read the audio data from the default microphone
                audio_data = r.record(source, duration=1)
                # convert speech to text
                text = r.recognize_google(audio_data)
                if 'stop' in text.lower():
                    pyautogui.click(x=955 ,y=1000)
                    break
        except Exception as e:
            continue
          print(f"Encountered error: {e}\n")

В то время как истинная цикла здесь, чтобы сохранить цикл, пока не услышит «остановку» (опять же, вы можете, очевидно, адаптировать этот критерий).

Если «Стоп» слышен и правильно декодируется, то Pyautogui нажимает кнопку остановки для нас. (Не стесняйтесь рассмотреть параметры, которые позволяют улучшить обнаружение микрофона, когда вокруг (здесь играет наша песня)).

Благодаря использованию предложения TRY/кроме мы сможем сохранить программу, не будучи беспокоиться по потенциальным ошибкам в пути, но все еще способно печатать их, если они появляются, для последующей отладки.

Объединение всего

Хотите увидеть мой полный код? Вот оно, ниже:

import pyautogui, subprocess, os, time
import speech_recognition as sr
 
# initialize the recognizer
r = sr.Recognizer()
 
with sr.Microphone() as source:
    # read the audio data from the default microphone
    audio_data = r.record(source, duration=3)
    print("Recognizing...")
    # convert speech to text
    text = r.recognize_google(audio_data)
    print(f"I think you said: '{text}'\nhmmm, let's see what I can do for you.")
 
if "spotify" in text.lower():
    subprocess.Popen('C:\\Users\\cleme\\AppData\\Roaming\\Spotify\\Spotify.exe')
    for window in pyautogui.getAllWindows():
        if 'spotify' in window.title.lower():
            window.show()
            print('spotify window activated')
            text = text.split()  # break down text list into single words for later usage
            time.sleep(5.5)
            pyautogui.click(x=480,y=25) # this is the search bar location on my machine, when the window is maximized
            time.sleep(1)
            pyautogui.hotkey('ctrl','a') # clearing the search bar
            pyautogui.press('backspace') # clearing the search bar
            time.sleep(0.5)
            pyautogui.write(text[-1],interval=0.05) # because we assumed that the artist was the last word of the voice command
            time.sleep(3)
            pyautogui.click(x=380,y=250) # this is the play button location on my machine, when the window is maximized
            break
    while True:
        try:
            with sr.Microphone() as source:
                # read the audio data from the default microphone
                audio_data = r.record(source, duration=1)
                # convert speech to text
                text = r.recognize_google(audio_data)
                if 'stop' in text.lower():
                    pyautogui.click(x=955 ,y=1000)
                    break
        except Exception as e:
            continue
    

Есть комната для улучшения, но она работает, вы можете гордиться вами, если вам удастся кодировать свою собственную музыкальную установку!

Спасибо вам, ребята! Это все на сегодня.

Куда пойти отсюда?

  • Создайте голосовую команду, чтобы изменить уровень звука или перейти к следующей песне
  • Объедините этот скрипт с Селен Играть в музыку из Интернета вместо
  • Используйте машинное обучение для умного интерпретации голосовой команды
  • Конвертировать текст в речь
  • Расписание задач с Python
  • В связи с вышеупомянутым элементом посмотрите в облачные решения для запуска кода 24/7

Профиль Freelancer Linkedin профиль