Valdymas balsu asmeniniame kompiuteryje ir RaspberryPi su Whisper

valdymas balsu kompiuteryje ir raspberry pi

Projekto idėja yra duoti balso nurodymus, kaip bendrauti per mūsų kompiuterį arba mūsų Raspberry Pi, naudojant balsą į tekstą šnabždesį.

Mes pateiksime užsakymą, kuris bus perrašytas, konvertuojamas į tekstą su Whisper ir tada analizuojamas, kad būtų įvykdytas atitinkamas nurodymas, kuris gali būti nuo programos vykdymo iki įtampos suteikimo RaspberryPi kaiščiams.

Ketinu naudoti seną Raspberry Pi 2, mikro USB ir neseniai OpenAI išleistą balsą į tekstą modelį, Šnabždėti. Straipsnio pabaigoje galite pamatyti šiek tiek daugiau šnabždesio.

viskas užprogramuota Pitonas.

Šiame vaizdo įraše parodysiu, kaip tai veikia, valdant kompiuterį balsu.

Asamblėja

Norėdami jį naudoti su kompiuteriu, mums reikės tik mikrofono.

Jei ketinate jį montuoti ant RaspberryPi, jums reikės USB mikrofono, nes jame esantis lizdas skirtas tik išvestims.

Reikia:

Kadangi bendras įrankio tikslas yra balso atpažinimas. Manau, kad labai naudinga jį integruoti į kitų įrenginių veikimą.

  • microUSB
  • Raspberry PI su operacine sistema (Raspbian pro pavyzdys)
  • Elektronika (LED, laidai, 480 omų rezistorius ir duonos plokštė)

Šviesos diodą prijungiame prie 17 kaiščio, kurį suaktyvinsime ir išjungsime šiai patirčiai.

kodo kūrimas

Jis padalintas į tris dalis, pirmąją – garso įrašą, iš kurio paėmiau kodą geeksforgeeks, nes nepažįstu tų knygynų. Antrasis, garso konvertavimas į tekstą naudojant Whisper ir trečiasis, šio teksto ir atsako apdorojimas RaspberryPi

Bandymo pavyzdyje aš veiksiu tik su šviesos diodu, priversdamas jį šviesti arba mirksėti, bet galime sukurti scenarijų, kad pritaikytume jį savo poreikiams.

Žinau, kad tai yra „Raspberry Pi 2“ ir jis bus daug lėtesnis nei „Raspberry Pi 4“, bet bandymams tai tinka.

Prieš pradėdami dirbti, turėsite įdiegti toliau nurodytus dalykus

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

visas kodas

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

Man nepavyko jo išbandyti, nes neturiu „microSD“ kortelės „RaspberryPi“ ar USB garsiakalbio, kurį galėčiau prijungti, bet kai tik bandau, ištaisau kokią nors klaidą, kurią lengva įslysti.

Žingsnis po žingsnio kodo paaiškinimas

#!/usr/bin/env python3

Shebang, kad praneštų įrenginiui, kokia kalba mes užprogramavome ir kokį vertėją naudoti. Nors tai atrodo nereikšminga, jo neįdėjimas dažnai sukelia klaidų.

importuotos bibliotekos

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

Šnabždesys dirbti su modeliu

laiko, nes naudoju jį valdyti laiką, kurio reikia scenarijui vykdyti, gpiozero dirbti su Raspberry ir garso įrenginio GPIO kaiščiais, scipy ir wavio įrašyti garsą

Funkcijos

Sukūriau 4 funkcijas:

  • pagrindinis ()
  • šviesa ()
  • mirksėti ()
  • įrašyti_garsą()

įjunkite () tiesiog suteikia įtampą avietės 17 kaiščiui, prie kurio šiuo atveju prijungėme šviesos diodą, kad patikrintume

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

blink() yra kaip on(), bet jis priverčia mirksėti šviesos diodą, įjungdamas ir išjungdamas jį kilpoje.

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

Su record_audio() įrašome garso failą

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 yra pagrindinė funkcija, atkreipkite dėmesį, kad vienintelis dalykas, kurį turime už funkcijų ribų, yra iškvietimas į main() scenarijaus pabaigoje. Tokiu būdu paleisties metu jis importuos bibliotekas ir iškvies funkciją.

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)

Išsaugome laiką, nuo kurio pradedame vykdyti funkciją, tada iškviečiame garso įrašymo funkciją, kuri įrašys mūsų instrukcijas į .wav, .mp3 ir kt. failą, kurį vėliau konvertuosime į tekstą

    inicio = time.time()
    record_audio ()

  

Kai turėsime garso įrašą, bus iškviestas šnabždesys ir pasakysime modelį, kurį norime naudoti, yra 5, ir mes naudosime mažytį, nors jis yra pats netiksliausias, nes jis yra greičiausias ir garsas bus paprastas, tik 3 ar 4 žodžiai.

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

  

Taip mes konvertuojame garsą į tekstą ir išsaugome kintamajame. Šiek tiek pakeisime.

Rezultatą konvertuojame į sąrašą su kiekvienu garso įrašo žodžiu

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

  

Ir viskas paruošta sąveikai su mūsų įrenginiu. Dabar tereikia sukurti tokias sąlygas, kokios norime.

Jei garso įraše yra žodis X, atlikite Y. Kadangi žodžiai yra sąraše, labai lengva pridėti sąlygų

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

  

Linija

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


  

Naudoju jį konvertuoti žodžius garso įraše į mažąsias raides ir pašalinti kablelius bei taškus. Ir tokiu būdu išvengsite klaidų palyginimuose

Jei įvykdoma sąlyga turėti kurį nors iš mūsų pasirinktų žodžių, tai iškviečia funkciją, kuri atliks tai, ko norime,

Čia liepiame suaktyvinti PIN kodą, kuris užsidegs šviesos diodu arba privers mirksėti. Arba paleiskite kokį nors kodą, arba išjunkite kompiuterį.

Visa tai yra pagrindinė idėja. Čia galite plėtoti projektą ir tobulinti jį taip, kaip norite. Kiekvienas žmogus gali rasti skirtingą jo panaudojimą.

Tai, ką galime padaryti naudodami šį montažą

Tai yra idėjos, kurios man kyla norint pasinaudoti šiuo montažu. Kai skeletas yra apginkluotas, galime juo suaktyvinti viską, kas ateina į galvą balsu, galime suaktyvinti relę, kuri paleidžia variklį arba galime paleisti scenarijų, kuris vykdo scenarijų, el. laišką ar dar ką nors.

Kas yra šnabždesys

„Whisper“ yra garsumo atpažinimo modelis, veikia keliomis kalbomis su daugybe kalbų ir leidžia išversti į anglų kalbą. Tai, ką mes žinome kaip teksto į balsą įrankį, išleido OpenAI komanda, Dall-e kūrėjai.

Komentuoti