D'Iddi vum Projet ass gitt Stëmminstruktioune fir duerch eise PC oder eise Raspberry Pi ze interagéieren mam Voice-to-Text Whisper Modell.
Mir ginn eng Uerdnung déi transkribéiert, an Text ëmgewandelt gëtt, mat Whisper an dann analyséiert fir déi entspriechend Uerdnung auszeféieren, wat vun der Ausféierung vun engem Programm ka sinn fir Spannung un d'RaspberryPi Pins ze ginn.
Ech wäert en alen Raspberry Pi 2 benotzen, e Mikro USB an ech wäert de Voice-to-Text Modell benotzen, dee viru kuerzem vun OpenAI verëffentlecht gouf, Hichschecht. Um Enn vum Artikel kënnt Dir gesinn e bësse méi geflüstert.
all programméiert an Python.
Ech verloossen Iech eng Demonstratioun wéi et an dësem Video funktionnéiert, de PC duerch Stëmm ze kontrolléieren.
Versammlung
Fir et mam PC ze benotzen, brauche mir nëmmen e Mikro.
Wann Dir et op de RaspberryPi montéiere wëllt, braucht Dir en USB Mikrofon, well de Jack deen et huet ass nëmme fir Ausgang.
Braucht:
Als allgemeng Zweck vum Tool ass Stëmm Identifikatioun. Ech fannen et ganz nëtzlech et an d'Operatioun vun aneren Apparater z'integréieren.
- Micro USB
- Raspberry PI mat Betribssystem (Raspbian Pro Beispill)
- Elektronik (LED, Drot, 480 Ohm Widderstand a Broutbrett)
Mir verbannen d'LED mat Pin 17, dat ass deen deen mir fir dës Erfahrung aktivéieren an deaktivéieren.
Code Entwécklung
Et ass an dräi Deeler opgedeelt, den éischten, den Audioopnam fir deen ech e Code geholl hunn geeksforgeeks, well ech kennen déi Bicherbutteker net. Déi zweet, d'Konversioun vun Audio an Text mat Whisper an déi drëtt, d'Behandlung vun deem Text an d'Äntwert am RaspberryPi
Am Testbeispiel wäert ech nëmme mat enger Led interagéieren, sou datt et hellt oder blénkt, awer mir kënnen de Skript entwéckelen fir et un eis Bedierfnesser unzepassen.
Ech si bewosst datt dëst e Raspberry Pi 2 ass an et wäert vill méi lues sinn wéi e Raspberry Pi 4, awer fir ze testen ass et gutt.
Ier Dir et funktionnéiert, musst Dir déi folgend installéieren
#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>
all Code
#!/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
Ech konnt et net testen well ech keng MicroSD fir de RaspberryPi hunn, oder en USB Lautsprecher fir ze verbannen, awer soubal ech et probéieren korrigéiere ech e Feeler datt et einfach ass ze rutschen.
Schrëtt fir Schrëtt Erklärung vum Code
#!/usr/bin/env python3
De Shebang fir dem Apparat ze soen wéi eng Sprooch mir programméiert hunn a wéi en Dolmetscher ze benotzen. Och wann et trivial schéngt, et net ze setzen verursaacht vill Geleeënheeten Feeler.
importéiert Bibliothéiken
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Geflüstert fir mam Modell ze schaffen
Zäit, well ech et benotze fir d'Zäit ze kontrolléieren déi et brauch fir de Skript auszeféieren, gpiozero fir mat de GPIO Pins vum Raspberry ze schaffen an Sounddevice, scipy a wavio fir den Audio opzehuelen
Funktiounen
Ech hunn 4 Funktiounen erstallt:
- Haapt ()
- liicht ()
- blénken ()
- record_audio()
ausschalten () gëtt einfach Spannung un Pin 17 vum Himbeer, wou mir an dësem Fall d'LED verbonnen hunn fir ze testen
def encender (): LED(17).on()
blink () ass wéi on () awer et mécht d'LED blénkeg andeems se se an enger Loop ausschalten an ausschalten.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
Mat record_audio () registréiere mir d'Audiodatei
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 ass d'Haaptfunktioun, bemierkt datt dat eenzegt wat mir ausserhalb vun de Funktiounen hunn den Uruff un Main () um Enn vum Skript. Dëse Wee beim Startup importéiert d'Bibliothéiken an dann de Fonktiounsruff.
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)
Mir späicheren d'Zäit wou mir ufänken d'Funktioun auszeféieren an dann ruffe mir d'Record-Audiofunktioun déi eis Instruktioun an enger .wav, .mp3, etc. Datei ophëlt, déi mir spéider an den Text konvertéieren
inicio = time.time() record_audio ()
Wann mir den Audio hunn, gëtt geflüstert a mir soen et de Modell dee mir benotze wëllen, et gi 5 verfügbar, a mir wäerte kleng benotzen obwuel et am meeschten onpräzis ass well et am schnellsten ass an den Audio einfach ass, nëmmen 3 oder 4 Wierder.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Mat dësem hu mir den Audio an Text ëmgewandelt an an enger Variabel gespäichert. Loosst eis et e bëssen änneren.
Mir konvertéieren d'Resultat an eng Lëscht mat all de Wierder vum Audio
words = result["text"].split()
An alles prett fir mat eisem Apparat ze interagéieren. Elo musse mer just déi Konditioune schafen, déi mir wëllen.
Wann den Audio d'Wuert X huet, maacht Y. Wéi mir d'Wierder an enger Lëscht hunn, ass et ganz einfach Konditioune derbäizesetzen
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
Linn
word = word.replace(',', '').replace('.', '').lower()
Ech benotzen et fir d'Wierder am Audio op kleng Buschtawen ze konvertéieren an d'Kommaen an d'Perioden ze läschen. An op dës Manéier Feeler an de Vergläicher vermeiden
An all wann d'Konditioun fir ee vun de Wierder ze hunn déi mir gewielt hunn erfëllt ass, nennt et eng Funktioun déi wäert maachen wat mir wëllen,
Dëst ass wou mir et soen fir e PIN ze aktivéieren deen eng LED beliicht oder et blénkt. Entweder e puer Code lafen, oder de Computer zoumaachen.
All dëst ass eng Basis Iddi. Vun hei aus kënnt Dir de Projet entwéckelen a verbesseren wéi Dir wëllt. All Persoun kann eng aner Notzung fir et fannen.
Saachen déi mir mat dësem Montage maache kënnen
Dëst sinn Iddien déi bei mech kommen fir vun dësem Montage ze profitéieren. Wann d'Skelett bewaffnet ass, kënne mir et benotze fir alles ze aktivéieren wat duerch Stëmm an de Kapp kënnt, mir kënnen e Relais aktivéieren deen e Motor ufänkt oder mir kënnen e Skript starten deen e Skript ausféiert, eng E-Mail oder wat och ëmmer.
Wat ass geflüstert
Whisper ass e Vol Unerkennungsmodell, funktionnéiert a Multilanguage mat enger grousser Zuel vu Sproochen an erlaabt Iwwersetzung op Englesch. Et ass wat mir wëssen als Text-zu-Stëmm-Tool, verëffentlecht vum OpenAI Team, d'Creatoren vun Dall-e.