Ideen med projektet er give stemmeinstruktioner til at interagere gennem vores pc eller vores Raspberry Pi ved hjælp af Voice-to-text Whisper-modellen.
Vi vil give en ordre, der vil blive transskriberet, konverteret til tekst, med Whisper og derefter analyseret for at udføre den passende ordre, som kan være fra at udføre et program til at give spænding til RaspberryPi-stifterne.
Jeg vil bruge en gammel Raspberry Pi 2, en mikro-USB, og jeg vil bruge Voice-to-text-modellen, der for nylig blev udgivet af OpenAI, Hviske. I slutningen af artiklen kan du se lidt mere hvisken.
alt programmeret ind Python.
Jeg giver dig en demonstration af, hvordan det virker i denne video, hvor du styrer pc'en med stemmen.
montering
For at bruge det med pc'en skal vi kun bruge en mikrofon.
Hvis du skal montere den på RaspberryPi, skal du bruge en USB-mikrofon, for det stik, den har, er kun til output.
Brug for:
Da det generelle formål med værktøjet er stemmeidentifikation. Jeg finder det meget nyttigt at integrere det i driften af andre enheder.
- micro USB
- Raspberry PI med operativsystem (Raspbian pro eksempel)
- Elektronik (LED, ledninger, 480 ohm modstand og breadboard)
Vi forbinder LED'en til pin 17, som er den, vi vil aktivere og deaktivere for denne oplevelse.
kode udvikling
Den er opdelt i tre dele, den første, lydoptagelsen, som jeg har taget en kode fra geeksforgeeks, for jeg kender ikke de boghandlere. Den anden, konverteringen af lyd til tekst med Whisper og den tredje, behandlingen af den tekst og respons i RaspberryPi
I testeksemplet vil jeg kun interagere med en LED, så den lyser eller blinker, men vi kunne udvikle scriptet for at tilpasse det til vores behov.
Jeg er klar over, at dette er en Raspberry Pi 2, og den vil være meget langsommere end en Raspberry Pi 4, men til test er det fint.
Før du kan få det til at virke, skal du installere følgende
#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>
hele koden
#!/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
Jeg har ikke været i stand til at teste det, fordi jeg ikke har et microSD til RaspberryPi, eller en USB-højttaler at tilslutte, men så snart jeg prøver det, retter jeg en fejl, som det er nemt at smutte ind i.
Trin for trin forklaring af koden
#!/usr/bin/env python3
Shebang for at fortælle enheden, hvilket sprog vi har programmeret på, og hvilken tolk der skal bruges. Selvom det virker trivielt, forårsager det fejl ved mange lejligheder ikke at sætte det.
importerede biblioteker
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Hvisk at arbejde med modellen
tid, fordi jeg bruger det til at styre den tid det tager at udføre scriptet, gpiozero til at arbejde med GPIO-stifterne på Raspberry og lydenhed, scipy og wavio til at optage lyden
funktioner
Jeg har lavet 4 funktioner:
- vigtigste ()
- lys ()
- at blinke ()
- record_audio()
tænd () giver simpelthen spænding til pin 17 på hindbæret, hvor vi i dette tilfælde har tilsluttet LED'en for at teste
def encender (): LED(17).on()
blink() er ligesom on(), men det får lysdioden til at blinke ved at tænde og slukke for den inden for en sløjfe.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
Med record_audio() optager vi lydfilen
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 er hovedfunktionen, bemærk at det eneste vi har uden for funktioner er kaldet til main() i slutningen af scriptet. På denne måde ved opstart vil den importere bibliotekerne og derefter foretage funktionskaldet.
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)
Vi gemmer det tidspunkt, hvor vi begynder at udføre funktionen, og så kalder vi funktionen optag lyd, der optager vores instruktion i en .wav, .mp3 osv. fil, som vi senere vil konvertere til tekst
inicio = time.time() record_audio ()
Når vi har lyden, vil hvisken blive kaldt, og vi fortæller den, hvilken model vi vil bruge, der er 5 tilgængelige, og vi vil bruge bittesmå, selvom det er det mest upræcise, fordi det er den hurtigste, og lyden vil være enkel, kun 3 eller 4 ord.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Med dette har vi konverteret lyden til tekst og gemt i en variabel. Lad os ændre det lidt.
Vi konverterer resultatet til en liste med hvert af lydens ord
words = result["text"].split()
Og alt klar til at interagere med vores enhed. Nu skal vi bare skabe de betingelser, vi ønsker.
Hvis lyden har ordet X, skal du gøre Y. Da vi har ordene på en liste, er det meget nemt at tilføje betingelser
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
linje
word = word.replace(',', '').replace('.', '').lower()
Jeg bruger det til at konvertere ordene i lyden til små bogstaver og fjerne kommaer og punktum. Og undgå på den måde fejl i sammenligningerne
I hver hvis betingelsen om at have et af de ord, vi har valgt, er opfyldt, kalder den en funktion, der vil gøre, hvad vi vil,
Det er her, vi fortæller den, at den skal aktivere en PIN-kode, der vil tænde en LED eller få den til at blinke. Kør enten noget kode, eller sluk computeren.
Alt dette er en grundlæggende idé. Herfra kan du udvikle projektet og forbedre det, som du vil. Hver person kan finde en anden brug for det.
Ting vi kan gøre med denne montage
Det er ideer, der kommer til mig for at drage fordel af denne montage. Når skelettet er bevæbnet, kan vi bruge det til at aktivere alt, hvad der kommer til at tænke på med stemmen, vi kan aktivere et relæ, der starter en motor, eller vi kan starte et script, der udfører et script, en e-mail eller hvad som helst.
Hvad er hvisken
Whisper er en volumengenkendelsesmodel, fungerer på flere sprog med et stort antal sprog og tillader oversættelse til engelsk. Det er, hvad vi kender som et tekst-til-stemme-værktøj, udgivet af OpenAI-teamet, skaberne af Dall-e.