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 && 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, útbrocht troch it OpenAI-team, de makkers fan Dall-e.