Kontwòl vwa sou PC ak RaspberryPi ak Whisper

kontwòl vwa sou PC ak Franbwaz Pi

Lide pwojè a se bay enstriksyon vwa pou kominike atravè PC nou an oswa Raspberry Pi nou an lè l sèvi avèk modèl Whisper vwa-a-tèks..

Nou pral bay yon lòd ki pral transkri, konvèti nan tèks, ak Whisper ak Lè sa a, analize egzekite lòd ki apwopriye a, ki ka soti nan egzekite yon pwogram bay vòltaj nan broch yo RaspberryPi.

Mwen pral sèvi ak yon ansyen Raspberry Pi 2, yon mikwo USB epi mwen pral itilize modèl vwa-a-tèks ki fèk pibliye pa OpenAI, Briyan. Nan fen atik la ou ka wè yon ti kras plis chichote.

tout pwograme nan Piton.

Mwen kite ou yon demonstrasyon sou kijan li fonksyone nan videyo sa a, kontwole PC a pa vwa.

Asanble

Pou itilize li ak PC a, nou pral sèlman bezwen yon mikwofòn.

Si ou pral monte li sou RaspberryPi a, w ap bezwen yon mikwofòn USB, paske Jack li genyen an se sèlman pou pwodiksyon an.

Nou bezwen:

Kòm objektif jeneral zouti a se idantifikasyon vwa. Mwen jwenn li trè itil yo entegre li nan operasyon an nan lòt aparèy.

  • Mikwo USB
  • Raspberry PI ak sistèm operasyon (Raspbian pro egzanp)
  • Elektwonik (dirije, fil elektrik, rezistans 480 ohm ak breadboard)

Nou konekte LED la nan PIN 17, ki se youn nan ke nou pral aktive ak dezaktive pou eksperyans sa a.

devlopman kòd

Li divize an twa pati, premye a, anrejistreman odyo pou mwen te pran yon kòd geeksforgeeks, paske mwen pa konnen libreri sa yo. Dezyèm lan, konvèsyon odyo an tèks ak Whisper ak twazyèm lan, tretman tèks sa a ak repons nan RaspberryPi a.

Nan egzanp tès la, mwen pral sèlman kominike avèk yon Led, fè li limen oswa bat, men nou ta ka devlope script la pou ajiste li a bezwen nou yo.

Mwen konnen ke sa a se yon Franbwaz Pi 2 epi li pral pi dousman pase yon Franbwaz Pi 4, men pou tès li a bon.

Anvan ou ka jwenn li travay, w ap bezwen enstale sa ki annapre yo

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

tout kòd la

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

Mwen pa te kapab teste li paske mwen pa gen yon microSD pou RaspberryPi a, oswa yon oratè USB konekte, men le pli vit ke mwen eseye li mwen korije kèk erè ke li fasil glise nan.

Etap pa etap eksplikasyon sou kòd la

#!/usr/bin/env python3

Shebang la di aparèy la nan ki lang nou te pwograme ak ki entèprèt pou itilize. Malgre ke li sanble trivial, pa mete li lakòz erè nan anpil okazyon.

bibliyotèk enpòte

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

Chichote pou travay ak modèl la

tan, paske mwen sèvi ak li pou kontwole tan li pran pou egzekite script la, gpiozero pou travay ak broch GPIO nan Franbwaz la ak sounddevice, scipy ak wavio pou anrejistre odyo a.

Fonksyon

Mwen te kreye 4 fonksyon:

  • prensipal ()
  • limyè ()
  • bat je ()
  • record_audio()

vire sou () tou senpleman bay vòltaj nan PIN 17 nan Franbwaz la kote nou te konekte nan ka sa a dirije a teste.

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

blink () se tankou on () men li fè led la bat pa vire li sou ak koupe nan yon bouk.

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

Avèk record_audio() nou anrejistre dosye odyo a

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 se fonksyon prensipal la, remake ke sèl bagay nou genyen deyò nan fonksyon se apèl la nan main() nan fen script la. Nan fason sa a sou demaraj, li pral enpòte bibliyotèk yo ak Lè sa a, fè apèl la fonksyon.

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)

Nou sove tan an nan ki nou kòmanse egzekite fonksyon an ak Lè sa a, nou rele fonksyon an anrejistreman odyo ki pral anrejistre enstriksyon nou an nan yon dosye .wav, .mp3, elatriye ke nou pral konvèti pita nan tèks.

    inicio = time.time()
    record_audio ()

  

Yon fwa nou gen odyo a, yo pral rele chichote epi nou di li modèl nou vle itilize a, gen 5 ki disponib, epi nou pral sèvi ak ti, byenke li se pi enpresiz la paske li se pi rapid la ak odyo a pral senp, sèlman 3 oswa 4 mo.

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

  

Avèk sa a nou gen odyo a konvèti nan tèks ak sove nan yon varyab. Ann modifye li yon ti jan.

Nou konvèti rezilta a nan yon lis ak chak nan mo yo nan odyo a

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

  

Ak tout bagay pare yo kominike avèk aparèy nou an. Koulye a, nou jis gen yo kreye kondisyon yo nou vle.

Si odyo a gen mo X, fè Y. Kòm nou gen mo yo nan yon lis, li trè fasil pou ajoute kondisyon

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

  

Liy lan

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


  

Mwen sèvi ak li pou konvèti mo yo nan odyo a nan miniskil epi retire vigil yo ak peryòd. Ak nan fason sa a evite erè nan konparezon yo

Nan chak si si kondisyon pou gen nenpòt nan mo nou te chwazi yo satisfè, li rele yon fonksyon ki pral fè sa nou vle,

Sa a se kote nou di li aktive yon PIN ki pral limen yon LED oswa fè li bat. Swa kouri kèk kòd, oswa fèmen òdinatè a.

Tout bagay sa a se yon lide debaz. Soti isit la ou ka devlope pwojè a ak amelyore li jan ou vle. Chak moun ka jwenn yon itilizasyon diferan pou li.

Bagay nou ka fè ak montaj sa a

Sa yo se lide ki vin jwenn mwen pou pwofite montaj sa a. Yon fwa kilè eskèlèt la ame, nou ka sèvi ak li pou aktive tout bagay ki vin nan lespri pa vwa, nou ka aktive yon relè ki kòmanse yon motè oswa nou ka lanse yon script ki egzekite yon script, yon imèl oswa kèlkeswa sa.

Ki sa ki chichote

Whisper se yon modèl rekonesans vol, travay nan plizyè lang ak yon gwo kantite lang epi li pèmèt tradiksyon an angle. Se sa nou konnen kòm yon zouti tèks-a-vwa, men sa a se Open Source, ki te pibliye pa ekip la OpenAI, kreyatè yo nan Stable Diffusion.

Si ou se yon moun ki san pwoblèm tankou nou epi ou vle kolabore nan antretyen ak amelyorasyon nan pwojè a, ou ka fè yon don. Tout lajan an pral ale nan achte liv ak materyèl pou fè eksperyans ak fè leson patikilye

Kite yon kòmantè