Голосове керування на ПК та RaspberryPi за допомогою Whisper

голосове керування на ПК та Raspberry Pi

Ідея проекту така давати голосові інструкції для взаємодії через наш ПК або Raspberry Pi за допомогою моделі Whisper для перетворення голосу в текст.

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

Я збираюся використовувати старий Raspberry Pi 2, мікро-USB, і я буду використовувати модель Voice-to-text, нещодавно випущену OpenAI, Шепіт. В кінці статті ви можете побачити ще трохи пошепки.

все запрограмовано в Python.

Я залишаю вам демонстрацію того, як це працює в цьому відео, керуючи ПК голосом.

Асамблея

Щоб використовувати його з ПК, нам знадобиться лише мікрофон.

Якщо ви збираєтеся встановити його на 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

Shebang повідомляє пристрою, якою мовою ми запрограмували та який інтерпретатор використовувати. Незважаючи на те, що це здається тривіальним, його невведення часто призводить до помилок.

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

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 та sounddevice, scipy та wavio для запису аудіо

Функції

Я створив 4 функції:

  • головний ()
  • світло ()
  • моргати ()
  • запис_аудіо()

turn on () просто подає напругу на контакт 17 raspberry, де ми підключили в цьому випадку світлодіод для тестування

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, яка працює на багатьох мовах з великою кількістю мов і дозволяє перекладати на англійську. Це те, що ми знаємо як інструмент перетворення тексту в голос, але це відкритий вихідний код, випущений командою OpenAI, творцями Stable Diffusion.

залишити коментар