Ideea proiectului este dați instrucțiuni vocale pentru a interacționa prin computerul nostru sau Raspberry Pi folosind modelul Voice-to-text Whisper.
Vom da o comandă care va fi transcrisă, convertită în text, cu Whisper și apoi analizată pentru a executa ordinea corespunzătoare, care poate fi de la executarea unui program până la darea de tensiune la pinii RaspberryPi.
Voi folosi un Raspberry Pi 2 vechi, un micro USB și voi folosi modelul Voice-to-text lansat recent de OpenAI, Şoaptă. La sfârșitul articolului puteți vedea mai puţină şoaptă.
toate programate în Piton.
Vă las o demonstrație a modului în care funcționează în acest videoclip, controlând computerul prin voce.
Montarea
Pentru a-l folosi cu PC-ul, vom avea nevoie doar de un microfon.
Dacă urmează să-l montezi pe RaspberryPi, vei avea nevoie de un microfon USB, deoarece mufa pe care o are este doar pentru ieșire.
Nevoie:
Deoarece scopul general al instrumentului este identificarea vocală. Mi se pare foarte util să îl integrez în funcționarea altor dispozitive.
- Micro USB
- Raspberry PI cu sistem de operare (exemplu Raspbian pro)
- Electronică (LED, fire, rezistență de 480 ohmi și placă)
Conectăm LED-ul la pinul 17, care este cel pe care îl vom activa și dezactiva pentru această experiență.
dezvoltarea codului
Este împărțit în trei părți, prima, înregistrarea audio pentru care am luat un cod geeksforgeeks, pentru că nu cunosc acele librării. Al doilea, conversia audio în text cu Whisper și al treilea, tratarea acelui text și răspunsul în RaspberryPi
În exemplul de testare, voi interacționa doar cu un LED, făcându-l să se aprindă sau să clipească, dar am putea dezvolta scriptul pentru a-l ajusta la nevoile noastre.
Sunt conștient că acesta este un Raspberry Pi 2 și va fi mult mai lent decât un Raspberry Pi 4, dar pentru testare este bine.
Înainte de a-l putea face să funcționeze, va trebui să instalați următoarele
#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>
tot codul
#!/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
Nu am reușit să-l testez pentru că nu am un microSD pentru RaspberryPi sau un difuzor USB de conectat, dar de îndată ce o încerc corectez o eroare în care se strecoară ușor.
Explicație pas cu pas a codului
#!/usr/bin/env python3
Shebang să spună dispozitivului în ce limbă am programat și ce interpret să folosească. Deși pare banal, nepunerea lui provoacă erori de multe ori.
biblioteci importate
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Șoptește să lucrezi cu modelul
timp, pentru că îl folosesc pentru a controla timpul necesar pentru a executa scriptul, gpiozero pentru a lucra cu pinii GPIO ai Raspberry și dispozitivul de sunet, scipy și wavio pentru a înregistra audio
funcții
Am creat 4 functii:
- principal ()
- ușoară ()
- a clipi ()
- înregistrează audio()
porniți () pur și simplu dă tensiune pinului 17 al zmeurului unde am conectat în acest caz LED-ul de testat
def encender (): LED(17).on()
blink() este ca on() dar face ca ledul să clipească, pornindu-l și oprindu-l într-o buclă.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
Cu record_audio() înregistrăm fișierul audio
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 este funcția principală, observați că singurul lucru pe care îl avem în afara funcțiilor este apelul la main() la sfârșitul scriptului. În acest fel, la pornire, va importa bibliotecile și apoi va efectua apelul de funcție.
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)
Salvăm timpul la care începem să executăm funcția și apoi apelăm funcția de înregistrare audio care va înregistra instrucțiunea noastră într-un fișier .wav, .mp3 etc. pe care ulterior îl vom converti în text.
inicio = time.time() record_audio ()
Odată ce avem audio, se va suna șoaptă și îi spunem modelul pe care vrem să-l folosim, sunt 5 disponibile, și vom folosi minuscule, deși este cel mai imprecis pentru că este cel mai rapid și audio va fi simplu, doar 3 sau 4 cuvinte.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Cu aceasta avem audio convertit în text și salvat într-o variabilă. Hai sa o modificam putin.
Convertim rezultatul într-o listă cu fiecare dintre cuvintele audio
words = result["text"].split()
Și totul gata să interacționeze cu dispozitivul nostru. Acum trebuie doar să creăm condițiile pe care ni le dorim.
Dacă audio are cuvântul X, faceți Y. Deoarece avem cuvintele într-o listă, este foarte ușor să adăugați condiții
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
Linia
word = word.replace(',', '').replace('.', '').lower()
Îl folosesc pentru a converti cuvintele din audio în minuscule și pentru a elimina virgulele și punctele. Și în acest fel evitați erorile în comparații
În fiecare dacă este îndeplinită condiția de a avea oricare dintre cuvintele pe care le-am ales, se apelează la o funcție care va face ceea ce dorim,
Aici îi spunem să activeze un PIN care va aprinde un LED sau îl va face să clipească. Fie rulați un cod, fie închideți computerul.
Toate acestea sunt o idee de bază. De aici puteți dezvolta proiectul și îl puteți îmbunătăți după cum doriți. Fiecare persoană își poate găsi o utilizare diferită.
Lucruri pe care le putem face cu acest montaj
Acestea sunt idei care îmi vin pentru a profita de acest montaj. Odată armat scheletul, îl putem folosi pentru a activa tot ce ne vine în minte prin voce, putem activa un releu care pornește un motor sau putem lansa un script care execută un script, un e-mail sau orice altceva.
Ce este șoapta
Whisper este un model de recunoaștere a volumului, funcționează în mai multe limbi cu un număr mare de limbi și permite traducerea în engleză. Este ceea ce știm ca instrument text-to-voice, dar acesta este Open Source, lansat de echipa OpenAI, creatorii Stable Diffusion.