Stimkontrôle op PC en RaspberryPi mei Whisper

stimbehear op pc en raspberry pi

It idee fan it projekt is jou stimynstruksjes om te ynteraksje fia ús PC of ús Raspberry Pi mei it Voice-to-text Whisper-model.

Wy sille in opdracht jaan dy't wurdt transkribearre, omboud ta tekst, mei Whisper en dan analysearre om de passende folchoarder út te fieren, wat kin wêze fan it útfieren fan in programma oant it jaan fan spanning oan 'e RaspberryPi-pinnen.

Ik sil in âlde Raspberry Pi 2 brûke, in mikro-USB en ik sil it Voice-to-text-model brûke dat koartlyn frijlitten is troch OpenAI, Flústerje. Oan 'e ein fan it artikel kinne jo sjen in bytsje mear flústerjen.

allegear programmearre yn Python.

Ik lit jo in demonstraasje fan hoe't it wurket yn dizze fideo, it kontrolearjen fan de PC mei stim.

Gearkomst

Om it te brûken mei de PC, sille wy allinich in mikrofoan nedich hawwe.

As jo ​​​​it op 'e RaspberryPi sille montearje, sille jo in USB-mikrofoan nedich hawwe, om't de jack dy't it hat allinich foar útfier is.

Wy hawwe nedich:

As it algemiene doel fan it ark is stim identifikaasje. Ik fyn it heul nuttich om it te yntegrearjen yn 'e wurking fan oare apparaten.

  • Micro USB
  • Raspberry PI mei bestjoeringssysteem (Raspbian pro foarbyld)
  • Elektroanika (LED, triedden, 480 ohm wjerstân en breadboard)

Wy ferbine de LED oan pin 17, dat is dejinge dy't wy sille aktivearje en deaktivearje foar dizze ûnderfining.

koade ûntwikkeling

It is ferdield yn trije dielen, de earste, de audio opname dêr't ik haw nommen in koade út geeksforgeeks, want ik ken dy boekhannels net. De twadde, de konverzje fan audio nei tekst mei Whisper en de tredde, de behanneling fan dy tekst en antwurd yn 'e RaspberryPi

Yn it testfoarbyld sil ik allinich ynteraksje mei in Led, wêrtroch't it ljocht of blinkt, mar wy kinne it skript ûntwikkelje om it oan te passen oan ús behoeften.

Ik bin my bewust dat dit in Raspberry Pi 2 is en it sil folle stadiger wêze as in Raspberry Pi 4, mar foar testen is it goed.

Foardat jo it wurkje kinne, moatte jo it folgjende ynstallearje

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

alle koade

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

Ik haw it net kinne testen, om't ik gjin microSD haw foar de RaspberryPi, of in USB-sprekker om te ferbinen, mar sa gau as ik it besykje korrigearje ik wat flater dat it maklik is om yn te slipjen.

Stap foar stap útlis fan de koade

#!/usr/bin/env python3

De Shebang om it apparaat te fertellen yn hokker taal wy hawwe programmearre en hokker tolk te brûken. Hoewol it triviaal liket, feroarsaket it net yn in protte gelegenheden flaters.

ymportearre biblioteken

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

Flústerje om mei it model te wurkjen

tiid, om't ik it brûk om de tiid te kontrolearjen dy't it nimt om it skript út te fieren, gpiozero om te wurkjen mei de GPIO-pins fan 'e Raspberry en lûdapparaat, scipy en wavio om de audio op te nimmen

Funksjes

Ik haw 4 funksjes makke:

  • haad ()
  • ljocht ()
  • blinkje ()
  • record_audio()

ynskeakelje () jout gewoan spanning oan pin 17 fan 'e raspberry wêr't wy yn dit gefal de LED hawwe ferbûn om te testen

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

blink () is as on (), mar it makket de led blink troch it oan en út te setten binnen in lus.

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

Mei record_audio () wy opnimme de audio triem

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 is de wichtichste funksje, merk op dat it iennichste dat wy hawwe bûten funksjes is de oprop nei main () oan 'e ein fan it skript. Op dizze manier by it opstarten sil it de bibleteken ymportearje en dan de funksjeoprop meitsje.

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)

Wy bewarje de tiid wêryn't wy begjinne mei it útfieren fan de funksje en dan neame wy de opname audiofunksje dy't ús ynstruksje sil opnimme yn in .wav, .mp3, ensfh. bestân dat wy letter sille konvertearje nei tekst

    inicio = time.time()
    record_audio ()

  

Sadree't wy de audio hawwe, sil flúster wurde neamd en wy fertelle it it model dat wy wolle brûke, d'r binne 5 beskikber, en wy sille lyts brûke, hoewol it it meast ûnkrekt is, om't it de rapste is en de audio sil ienfâldich wêze, mar 3 of 4 wurden.

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

  

Hjirmei hawwe wy de audio omboud ta tekst en bewarre yn in fariabele. Litte wy it in bytsje feroarje.

Wy konvertearje it resultaat yn in list mei elk fan 'e wurden fan' e audio

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

  

En alles klear om te ynteraksje mei ús apparaat. No moatte wy gewoan de betingsten skeppe dy't wy wolle.

As de audio it wurd X hat, do Y. As wy de wurden yn in list hawwe, is it hiel maklik om betingsten ta te foegjen

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

  

De line

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


  

Ik brûk it om de wurden yn 'e audio te konvertearjen nei lytse letters en de komma's en puntsjes te ferwiderjen. En foarkomme op dizze manier flaters yn 'e fergelikingen

Yn elk as as de betingst fan ien fan 'e wurden dy't wy hawwe keazen foldien wurdt, neamt it in funksje dy't sil dwaan wat wy wolle,

Dit is wêr't wy it fertelle om in PIN te aktivearjen dy't in LED sil opljochtsje of meitsje dat it blinkt. Of rinne wat koade, of slute de kompjûter.

Dit alles is in basis idee. Hjirwei kinne jo it projekt ûntwikkelje en ferbetterje as jo wolle. Elke persoan kin der in oar gebrûk foar fine.

Dingen kinne wy ​​dwaan mei dizze montage

Dit binne ideeën dy't by my komme om te profitearjen fan dizze montage. As it skelet ienris bewapene is, kinne wy ​​it brûke om alles te aktivearjen dat yn 't sin komt mei stim, wy kinne in estafette aktivearje dy't in motor begjint of wy kinne in skript starte dat in skript útfiert, in e-post of wat dan ek.

Wat is flústerjen

Whisper is in fol-erkenningsmodel, wurket yn meartaligens mei in grut oantal talen en lit oersetting yn it Ingelsk ta. It is wat wy witte as in tekst-nei-stim-ark, mar dit is Open Source, útbrocht troch it OpenAI-team, de makkers fan Stable Diffusion.

Leave a comment