Proiektuaren ideia da eman ahots-argibideak gure ordenagailuaren edo gure Raspberry Pi-ren bidez elkarreragiteko, Voice-to-text Whisper eredua erabiliz.
Transkribatu, testu bihurtu, Whisper-ekin eta gero ordena egokia exekutatzeko aztertuko den agindu bat emango dugu, hau da, programa bat exekutatzen hasi eta RaspberryPi pinei tentsioa ematera arte.
Raspberry Pi 2 zahar bat erabiliko dut, mikro USB bat eta OpenAIk kaleratu berri duen Voice-to-text eredua erabiliko dut, Whisper. Artikuluaren amaieran ikus dezakezu xuxurla apur bat gehiago.
dena programatuta Python.
Bideo honetan nola funtzionatzen duen erakusten dizuet, ordenagailua ahots bidez kontrolatuz.
muntatzea
PCarekin erabiltzeko, mikrofono bat baino ez dugu beharko.
RaspberryPi-n muntatuko baduzu, USB mikrofono bat beharko duzu, duen jack-a irteerarako soilik baita.
Beharra:
Tresnaren helburu orokorra ahotsaren identifikazioa denez. Oso erabilgarria iruditzen zait beste gailu batzuen funtzionamenduan integratzea.
- Micro USB
- Raspberry PI sistema eragilearekin (Raspbian pro adibidea)
- Elektronika (LED, hariak, 480 ohm-ko erresistentzia eta ohola)
LEDa 17 pinera konektatzen dugu, hau da, esperientzia honetarako aktibatu eta desaktibatuko duguna.
kodearen garapena
Hiru zatitan banatuta dago, lehenengoa, kode bat hartu dudan audio-grabazioa geeksforgeeks, ez ditudalako liburu denda horiek ezagutzen. Bigarrena, audioa testu bihurtzea Whisper-ekin eta hirugarrena, testu horren tratamendua eta erantzuna RaspberryPi-n.
Proba adibidean Led batekin bakarrik interakzionatuko dut, argitu edo keinu eginez, baina gidoia garatu genezake gure beharretara egokitzeko.
Badakit Raspberry Pi 2 bat dela eta Raspberry Pi 4 bat baino askoz motelagoa izango dela, baina probatzeko ondo dago.
Funtzionatzen hasi aurretik, honako hau instalatu beharko duzu
#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>
kode guztia
#!/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 && sudo apt install ffmpeg
Ezin izan dut probatu RaspberryPi-rako microSDrik edo USB bozgorailurik konektatzeko ez dudalako, baina probatu bezain laster akatsen bat zuzentzen dut, erraz sartzeko erraza dena.
Pausoz pauso kodearen azalpena
#!/usr/bin/env python3
Shebang gailuari zein hizkuntzatan programatu dugun eta zein interprete erabili behar dugun esateko. Huskeria badirudi ere, ez jartzeak akatsak eragiten ditu askotan.
inportatutako liburutegiak
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Xuxurlatu modeloarekin lan egiteko
denbora, scripta exekutatzeko behar den denbora kontrolatzeko erabiltzen dudalako, gpiozero Raspberry-ren eta soinu-gailuaren GPIO pinekin lan egiteko, scipy eta wavio audioa grabatzeko.
funtzio
4 funtzio sortu ditut:
- nagusia ()
- argia ()
- keinu egin ()
- grabatu_audio()
piztu () kasu honetan probatzeko LED-a konektatu dugun mugurdiaren 17. pinari tentsioa ematen dio.
def encender (): LED(17).on()
blink() on() bezalakoa da baina led-a keinu egiten du begizta baten barruan piztuz eta itzaliz.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
record_audio()-rekin audio fitxategia grabatzen dugu
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 funtzio nagusia da, konturatu funtzioetatik kanpo daukagun gauza bakarra main() deia dela scriptaren amaieran. Modu honetan abiarazteko, liburutegiak inportatuko ditu eta gero funtzio-deia egingo du.
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)
Funtzioa exekutatzen hasteko ordua gordetzen dugu eta gero gure instrukzioa grabatuko duen audioaren grabaketa funtzioari deitzen diogu gero testu bihurtuko dugun .wav, .mp3, etab. fitxategi batean.
inicio = time.time() record_audio ()
Audioa dugunean, xuxurla deituko da eta erabili nahi dugun modeloa esaten diogu, 5 daude eskuragarri, eta txiki-txikiak erabiliko ditugu, nahiz eta zehatzena den, azkarrena delako eta audioa sinplea izango delako, 3 edo 4 hitz bakarrik.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Honekin audioa testu bihurtu eta aldagai batean gorde dugu. Aldatu dezagun pixka bat.
Emaitza zerrenda batean bihurtzen dugu audioaren hitz bakoitzarekin
words = result["text"].split()
Eta dena prest gure gailuarekin elkarreragiteko. Orain nahi ditugun baldintzak sortzea besterik ez zaigu geratzen.
Audioak X hitza badu, egin Y. Hitzak zerrenda batean ditugunez, oso erraza da baldintzak gehitzea
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
Lerroa
word = word.replace(',', '').replace('.', '').lower()
Audioko hitzak minuskula bihurtzeko eta komak eta puntuak kentzeko erabiltzen dut. Eta horrela konparaketetan akatsak saihestu
Bakoitzean aukeratutako hitzen bat edukitzeko baldintza betetzen bada, nahi duguna egingo duen funtzio bati deitzen dio,
Hemen esaten diogu LED bat piztuko duen PIN bat aktibatzeko edo keinu egin dezan. Edo exekutatu koderen bat edo itzali ordenagailua.
Hau guztia oinarrizko ideia bat da. Hemendik proiektua garatu eta nahi duzun moduan hobetu dezakezu. Pertsona bakoitzak erabilera ezberdina aurki diezaioke.
Muntaia honekin egin ditzakegun gauzak
Muntaketa hau aprobetxatzeko etortzen zaizkidan ideiak dira. Behin hezurdura armatuta dagoenean, burura datorkigun guztia ahots bidez aktibatzeko erabil dezakegu, motor bat abiarazten duen errele bat aktibatu dezakegu edo script bat, email bat edo dena delakoa exekutatzen duen script bat abiarazi dezakegu.
Zer da xuxurla
Whisper-ek bolumenak ezagutzeko eredua da, hizkuntza anitzetan funtzionatzen du hizkuntza ugarirekin eta ingelesera itzultzeko aukera ematen du. Testutik ahotserako tresna gisa ezagutzen duguna da, Dall-e-ren sortzaile OpenAI taldeak kaleratua.