Ääniohjaus PC:ssä ja RaspberryPi Whisperilla

ääniohjaus PC:ssä ja Raspberry pi:ssä

Hankkeen idea on anna ääniohjeita vuorovaikutukseen PC:n tai Raspberry Pi:n kautta käyttämällä Voice-to-text Whisper -mallia.

Annamme tilauksen, joka transkriptoidaan, muunnetaan tekstiksi Whisperilla ja sitten analysoidaan sopivan tilauksen suorittamiseksi, joka voi olla ohjelman suorittamisesta jännitteen antamiseen RaspberryPi-nastoihin.

Aion käyttää vanhaa Raspberry Pi 2:ta, mikro-USB:tä ja OpenAI:n hiljattain julkaisemaa Voice-to-text -mallia, Kuiskaus. Artikkelin lopusta näet vähän lisää kuiskausta.

kaikki ohjelmoitu Python.

Jätän sinulle esittelyn siitä, miten se toimii tässä videossa, jossa ohjataan tietokonetta äänellä.

asennus

Tarvitsemme vain mikrofonin käyttääksesi sitä tietokoneen kanssa.

Jos aiot asentaa sen RaspberryPiin, tarvitset USB-mikrofonin, koska siinä oleva liitin on vain lähtöä varten.

Me tarvitsemme:

Koska työkalun yleinen tarkoitus on äänitunnistus. Minusta on erittäin hyödyllistä integroida se muiden laitteiden toimintaan.

  • micro USB
  • Raspberry PI käyttöjärjestelmällä (esimerkki Raspbian pro)
  • Elektroniikka (LED, johdot, 480 ohmin vastus ja koelevy)

Yhdistämme LEDin nastaan ​​17, jonka aktivoimme ja deaktivoimme tätä kokemusta varten.

koodin kehittäminen

Se on jaettu kolmeen osaan, joista ensimmäinen on äänitallenne, josta olen ottanut koodin geeksforgeeks, koska en tunne niitä kirjakauppoja. Toinen, äänen muuntaminen tekstiksi Whisperilla ja kolmas, tämän tekstin ja vastauksen käsittely RaspberryPi:ssä

Testiesimerkissä aion olla vuorovaikutuksessa vain ledin kanssa, jolloin se syttyy tai vilkkuu, mutta voisimme kehittää käsikirjoituksen mukauttaaksemme sen tarpeisiimme.

Tiedän, että tämä on Raspberry Pi 2 ja se tulee olemaan paljon hitaampi kuin Raspberry Pi 4, mutta testaukseen se on hyvä.

Ennen kuin saat sen toimimaan, sinun on asennettava seuraavat

#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>

kaikki koodi

#!/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

En ole päässyt testaamaan, koska minulla ei ole microSD-korttia RaspberryPille tai USB-kaiutinta kytkettäväksi, mutta heti kun yritän sitä, korjaan jonkin virheen, jonka takia se on helppo sujahtaa sisään.

Askel askeleelta koodin selitys

#!/usr/bin/env python3

Shebang kertoo laitteelle, millä kielellä olemme ohjelmoineet ja mitä tulkkia käytetään. Vaikka se näyttää triviaalilta, sen laittaminen aiheuttaa virheitä useaan otteeseen.

maahantuodut kirjastot

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

Kuiskaa työskennelläksesi mallin kanssa

aikaa, koska käytän sitä ohjaamaan skriptin suorittamiseen kuluvaa aikaa, gpiozeroa työskentelemään Raspberryn ja äänilaitteen GPIO-nastojen kanssa, scipy ja wavio äänen tallentamiseen

tehtävät

Olen luonut 4 toimintoa:

  • pää ()
  • valo ()
  • vilkkua ()
  • Record_audio()

kytke päälle () yksinkertaisesti antaa jännitteen vadelman nastan 17, johon olemme kytkeneet tässä tapauksessa LEDin testattavaksi

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

blink() on kuin on(), mutta se saa ledin vilkkumaan kytkemällä sen päälle ja pois päältä silmukan sisällä.

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

Record_audio():lla tallennamme äänitiedoston

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 on pääfunktio, huomaa, että ainoa asia, joka meillä on funktioiden ulkopuolella, on komentosarjan lopussa oleva main()-kutsu. Tällä tavalla käynnistyksen yhteydessä se tuo kirjastot ja suorittaa sitten funktiokutsun.

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)

Tallennamme ajan, jolloin aloitamme toiminnon suorittamisen, ja kutsumme sitten äänitystoimintoa, joka tallentaa ohjeemme .wav-, .mp3- jne. tiedostoon, jonka muunnamme myöhemmin tekstiksi

    inicio = time.time()
    record_audio ()

  

Kun meillä on ääni, kutsutaan kuiskaus ja kerromme sille mallin, jota haluamme käyttää. Saatavilla on 5 mallia, ja käytämme pientä, vaikka se onkin epätarkin, koska se on nopein ja ääni on yksinkertaista, vain 3 tai 4 sanaa.

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

  

Tällä olemme muuntaneet äänen tekstiksi ja tallentaneet muuttujaan. Muokataan sitä hieman.

Muunnamme tuloksen luetteloksi, joka sisältää jokaisen äänen sanan

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

  

Ja kaikki valmiina vuorovaikutukseen laitteemme kanssa. Nyt meidän on vain luotava haluamamme olosuhteet.

Jos äänessä on sana X, tee Y. Kuten sanat ovat luettelossa, on erittäin helppoa lisätä ehtoja

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

  

linja

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


  

Käytän sitä muuntaakseni äänen sanat pieniksi kirjaimiksi ja poistamaan pilkut ja pisteet. Ja näin vältät virheet vertailuissa

Jokaisessa if-kohdassa, jos ehto jonkin valitsemistamme sanoista täyttyy, se kutsuu funktiota, joka tekee mitä haluamme,

Tässä kehotamme sitä aktivoimaan PIN-koodin, joka sytyttää LEDin tai saa sen vilkkumaan. Suorita jokin koodi tai sammuta tietokone.

Kaikki tämä on perusidea. Täältä voit kehittää projektia ja parantaa sitä haluamallasi tavalla. Jokainen voi löytää sille omanlaisensa käyttötarkoituksen.

Asioita, joita voimme tehdä tällä montaasilla

Nämä ovat minulle tulleita ideoita hyödyntää tätä montaasia. Kun luuranko on viritetty, voimme sen avulla aktivoida kaiken, mikä tulee mieleen äänellä, voimme aktivoida releen, joka käynnistää moottorin tai voimme käynnistää skriptin, joka suorittaa komentosarjan, sähköpostin tai mitä tahansa.

Mikä on kuiskaus

Whisper on vol-tunnistusmalli, toimii monikielisenä useilla kielillä ja mahdollistaa kääntämisen englanniksi. Tunnemme sen tekstistä puheeksi -työkaluna, jonka on julkaissut OpenAI-tiimi, Dall-e:n luojat.

Jos olet meidän kaltainen levoton ihminen ja haluat tehdä yhteistyötä projektin ylläpidossa ja parantamisessa, voit tehdä lahjoituksen. Kaikki rahat käytetään kirjojen ja materiaalien ostamiseen kokeilua ja opetusohjelmia varten

Jätä kommentti