Голосовое управление на ПК и RaspberryPi с помощью Whisper

голосовое управление на ПК и Raspberry Pi

Идея проекта давать голосовые инструкции для взаимодействия через наш ПК или Raspberry Pi с использованием модели Voice-to-text Whisper.

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

Я собираюсь использовать старый Raspberry Pi 2, micro USB и модель преобразования голоса в текст, недавно выпущенную OpenAI. Whisper. В конце статьи вы можете увидеть еще немного шепота.

все запрограммировано в Питон.

Я оставляю вам демонстрацию того, как это работает в этом видео, управление ПК с помощью голоса.

Сборка торта

Чтобы использовать его с ПК, нам понадобится только микрофон.

Если вы собираетесь установить его на RaspberryPi, вам понадобится USB-микрофон, потому что у него есть разъем только для выхода.

Нам нужно:

Поскольку общее назначение инструмента — голосовая идентификация. Я считаю очень полезным интегрировать его в работу других устройств.

  • микро-USB
  • Raspberry PI с операционной системой (пример Raspbian pro)
  • Электроника (светодиод, провода, резистор 480 Ом и макетная плата)

Мы подключаем светодиод к контакту 17, который мы будем активировать и деактивировать для этого опыта.

разработка кода

Он разделен на три части, первая, аудиозапись, для которой я взял код из geeksforgeeks, потому что я не знаю этих книжных магазинов. Во-вторых, преобразование аудио в текст с помощью Whisper и в-третьих, обработка этого текста и ответ в RaspberryPi.

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

Я знаю, что это Raspberry Pi 2, и он будет намного медленнее, чем Raspberry Pi 4, но для тестирования это нормально.

Прежде чем вы сможете заставить его работать, вам необходимо установить следующее

#Instalar whisper
pip install git+https://github.com/openai/whisper.git
sudo apt update && sudo apt install ffmpeg

#para que funcione la grabación de audio
python3 -m pip install sounddevice --user
pip install git+https://github.com/WarrenWeckesser/wavio.git

#si vas a instalarlo en la raspberry
#dar permisos para usar la GPIO
sudo apt install python3-gpiozero
sudo usermode -aG gpio <username>

весь код

#!/usr/bin/env python3
import whisper
import time
from gpiozero import LED
import sounddevice as sd
from scipy.io.wavfile import write
import wavio as wv

        
def main ():
    inicio = time.time()
    record_audio ()

    model = whisper.load_model("tiny")
    result = model.transcribe("audio1.wav")
    words = result["text"].split()

    for word in words:
        word = word.replace(',', '').replace('.', '').lower()
        if word == 'enciende' or 'encender':
            encender()
            break
        if word == 'parpadea' or 'parpadear':
            parpadear()
            break      
    fin = time.time()
    print(fin-inicio)

def encender ():
    LED(17).on()

def parpadear ():
    light = LED(17)
    while True:
        light.on()
        sleep(1)
        light.off()
        sleep(1)

def record_audio ():
    # Sampling frequency
    freq = 44100
    # Recording duration
    duration = 5
    # Start recorder with the given values
    # of duration and sample frequency
    recording = sd.rec(int(duration * freq),
                    samplerate=freq, channels=2)
    # Record audio for the given number of seconds
    sd.wait()
    # This will convert the NumPy array to an audio
    # file with the given sampling frequency
    write("audio0.wav", freq, recording)
    # Convert the NumPy array to audio file
    wv.write("audio1.wav", recording, freq, sampwidth=2)
        
main ()


#dar permisos para usar la GPIO
#sudo apt install python3-gpiozero
#sudo usermode -aG gpio <username>

#Instalar whisper
#pip install git+https://github.com/openai/whisper.git
#sudo apt update &amp;&amp; sudo apt install ffmpeg

Я не смог протестировать это, потому что у меня нет microSD для RaspberryPi или USB-динамика для подключения, но как только я попробовал, я исправил некоторую ошибку, которую легко проскользнуть.

Пошаговое объяснение кода

#!/usr/bin/env python3

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

импортированные библиотеки

import whisper
import time
from gpiozero import LED
import sounddevice as sd
from scipy.io.wavfile import write
import wavio as wv

Шепот для работы с моделью

время, потому что я использую его для контроля времени, необходимого для выполнения скрипта, gpiozero для работы с выводами GPIO Raspberry и звукового устройства, scipy и wavio для записи звука

функции

Я создал 4 функции:

  • основной ()
  • легкий ()
  • мигать ()
  • запись аудио()

включить () просто подает напряжение на пин 17 малины куда мы подключили в данном случае светодиод для проверки

def encender ():
    LED(17).on()

blink() похож на on(), но заставляет светодиод мигать, включая и выключая его в цикле.

def parpadear ():
    light = LED(17)
    while True:
        light.on()
        sleep(1)
        light.off()
        sleep(1)

С помощью record_audio() мы записываем аудиофайл

def record_audio ():
    # Sampling frequency
    freq = 44100
    # Recording duration
    duration = 5
    # Start recorder with the given values
    # of duration and sample frequency
    recording = sd.rec(int(duration * freq),
                    samplerate=freq, channels=2)
    # Record audio for the given number of seconds
    sd.wait()
    # This will convert the NumPy array to an audio
    # file with the given sampling frequency
    write("audio0.wav", freq, recording)
    # Convert the NumPy array to audio file
    wv.write("audio1.wav", recording, freq, sampwidth=2)

Main — это основная функция, обратите внимание, что единственное, что у нас есть вне функций, — это вызов main() в конце скрипта. Таким образом, при запуске он импортирует библиотеки, а затем вызывает функцию.

def main ():
    inicio = time.time()
    record_audio ()

    model = whisper.load_model("tiny")
    result = model.transcribe("audio1.wav")
    words = result["text"].split()

    for word in words:
        word = word.replace(',', '').replace('.', '').lower()
        if word == 'enciende' or 'encender':
            encender()
            break
        if word == 'parpadea' or 'parpadear':
            parpadear()
            break      
    fin = time.time()
    print(fin-inicio)

Мы сохраняем время начала выполнения функции, а затем вызываем функцию записи звука, которая запишет нашу инструкцию в файл .wav, .mp3 и т. д., который мы позже преобразуем в текст.

    inicio = time.time()
    record_audio ()

  

Как только у нас будет звук, будет вызван шепот, и мы укажем ему модель, которую хотим использовать, доступно 5, и мы будем использовать крошечный, хотя он самый неточный, потому что он самый быстрый, и звук будет простым, только 3 или 4 слова.

     model = whisper.load_model("tiny")
    result = model.transcribe("audio1.wav")

  

При этом звук преобразуется в текст и сохраняется в переменной. Давайте немного изменим его.

Преобразуем результат в список с каждым из слов аудио

     words = result["text"].split()

  

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

Если в аудио есть слово X, сделайте Y. Поскольку у нас есть слова в списке, очень легко добавить условия

         for word in words:
        word = word.replace(',', '').replace('.', '').lower()
        if word == 'enciende' or 'encender':
            encender()
            break
        if word == 'parpadea' or 'parpadear':
            parpadear()
            break   

  

Линия

         
        word = word.replace(',', '').replace('.', '').lower()


  

Я использую его для преобразования слов в аудио в нижний регистр и удаления запятых и точек. И таким образом избежать ошибок в сравнениях

В каждом if, если выполняется условие наличия любого из выбранных нами слов, вызывается функция, которая будет делать то, что мы хотим,

Здесь мы говорим ему активировать PIN-код, который зажжет светодиод или заставит его мигать. Либо запустите какой-нибудь код, либо выключите компьютер.

Все это основная идея. Отсюда вы можете развивать проект и улучшать его по своему усмотрению. Каждый человек может найти ему свое применение.

Что мы можем сделать с этим монтажом

Это идеи, которые приходят ко мне, чтобы воспользоваться этим монтажом. Как только скелет вооружён, мы можем использовать его для активации всего, что приходит на ум голосом, мы можем активировать реле, которое запускает двигатель, или мы можем запустить скрипт, который выполняет скрипт, электронное письмо или что-то ещё.

Что такое шепот

Whisper — это модель распознавания vol, работает на мультиязычности с большим количеством языков и допускает перевод на английский язык. Это то, что мы знаем как инструмент преобразования текста в голос, но это Open Source, выпущенный командой OpenAI, создателями Stable Diffusion.

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

Оставить комментарий