Projekto idėja yra duoti balso nurodymus, kaip bendrauti per mūsų kompiuterį arba mūsų Raspberry Pi, naudojant balsą į tekstą šnabždesį.
Mes pateiksime užsakymą, kuris bus perrašytas, konvertuojamas į tekstą su Whisper ir tada analizuojamas, kad būtų įvykdytas atitinkamas nurodymas, kuris gali būti nuo programos vykdymo iki įtampos suteikimo RaspberryPi kaiščiams.
Ketinu naudoti seną Raspberry Pi 2, mikro USB ir neseniai OpenAI išleistą balsą į tekstą modelį, Šnabždėti. Straipsnio pabaigoje galite pamatyti šiek tiek daugiau šnabždesio.
viskas užprogramuota Pitonas.
Šiame vaizdo įraše parodysiu, kaip tai veikia, valdant kompiuterį balsu.
Asamblėja
Norėdami jį naudoti su kompiuteriu, mums reikės tik mikrofono.
Jei ketinate jį montuoti ant RaspberryPi, jums reikės USB mikrofono, nes jame esantis lizdas skirtas tik išvestims.
Reikia:
Kadangi bendras įrankio tikslas yra balso atpažinimas. Manau, kad labai naudinga jį integruoti į kitų įrenginių veikimą.
- microUSB
- Raspberry PI su operacine sistema (Raspbian pro pavyzdys)
- Elektronika (LED, laidai, 480 omų rezistorius ir duonos plokštė)
Šviesos diodą prijungiame prie 17 kaiščio, kurį suaktyvinsime ir išjungsime šiai patirčiai.
kodo kūrimas
Jis padalintas į tris dalis, pirmąją – garso įrašą, iš kurio paėmiau kodą geeksforgeeks, nes nepažįstu tų knygynų. Antrasis, garso konvertavimas į tekstą naudojant Whisper ir trečiasis, šio teksto ir atsako apdorojimas RaspberryPi
Bandymo pavyzdyje aš veiksiu tik su šviesos diodu, priversdamas jį šviesti arba mirksėti, bet galime sukurti scenarijų, kad pritaikytume jį savo poreikiams.
Žinau, kad tai yra „Raspberry Pi 2“ ir jis bus daug lėtesnis nei „Raspberry Pi 4“, bet bandymams tai tinka.
Prieš pradėdami dirbti, turėsite įdiegti toliau nurodytus dalykus
#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>
visas kodas
#!/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
Man nepavyko jo išbandyti, nes neturiu „microSD“ kortelės „RaspberryPi“ ar USB garsiakalbio, kurį galėčiau prijungti, bet kai tik bandau, ištaisau kokią nors klaidą, kurią lengva įslysti.
Žingsnis po žingsnio kodo paaiškinimas
#!/usr/bin/env python3
Shebang, kad praneštų įrenginiui, kokia kalba mes užprogramavome ir kokį vertėją naudoti. Nors tai atrodo nereikšminga, jo neįdėjimas dažnai sukelia klaidų.
importuotos bibliotekos
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Šnabždesys dirbti su modeliu
laiko, nes naudoju jį valdyti laiką, kurio reikia scenarijui vykdyti, gpiozero dirbti su Raspberry ir garso įrenginio GPIO kaiščiais, scipy ir wavio įrašyti garsą
Funkcijos
Sukūriau 4 funkcijas:
- pagrindinis ()
- šviesa ()
- mirksėti ()
- įrašyti_garsą()
įjunkite () tiesiog suteikia įtampą avietės 17 kaiščiui, prie kurio šiuo atveju prijungėme šviesos diodą, kad patikrintume
def encender (): LED(17).on()
blink() yra kaip on(), bet jis priverčia mirksėti šviesos diodą, įjungdamas ir išjungdamas jį kilpoje.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
Su record_audio() įrašome garso failą
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 yra pagrindinė funkcija, atkreipkite dėmesį, kad vienintelis dalykas, kurį turime už funkcijų ribų, yra iškvietimas į main() scenarijaus pabaigoje. Tokiu būdu paleisties metu jis importuos bibliotekas ir iškvies funkciją.
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)
Išsaugome laiką, nuo kurio pradedame vykdyti funkciją, tada iškviečiame garso įrašymo funkciją, kuri įrašys mūsų instrukcijas į .wav, .mp3 ir kt. failą, kurį vėliau konvertuosime į tekstą
inicio = time.time() record_audio ()
Kai turėsime garso įrašą, bus iškviestas šnabždesys ir pasakysime modelį, kurį norime naudoti, yra 5, ir mes naudosime mažytį, nors jis yra pats netiksliausias, nes jis yra greičiausias ir garsas bus paprastas, tik 3 ar 4 žodžiai.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Taip mes konvertuojame garsą į tekstą ir išsaugome kintamajame. Šiek tiek pakeisime.
Rezultatą konvertuojame į sąrašą su kiekvienu garso įrašo žodžiu
words = result["text"].split()
Ir viskas paruošta sąveikai su mūsų įrenginiu. Dabar tereikia sukurti tokias sąlygas, kokios norime.
Jei garso įraše yra žodis X, atlikite Y. Kadangi žodžiai yra sąraše, labai lengva pridėti sąlygų
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
Linija
word = word.replace(',', '').replace('.', '').lower()
Naudoju jį konvertuoti žodžius garso įraše į mažąsias raides ir pašalinti kablelius bei taškus. Ir tokiu būdu išvengsite klaidų palyginimuose
Jei įvykdoma sąlyga turėti kurį nors iš mūsų pasirinktų žodžių, tai iškviečia funkciją, kuri atliks tai, ko norime,
Čia liepiame suaktyvinti PIN kodą, kuris užsidegs šviesos diodu arba privers mirksėti. Arba paleiskite kokį nors kodą, arba išjunkite kompiuterį.
Visa tai yra pagrindinė idėja. Čia galite plėtoti projektą ir tobulinti jį taip, kaip norite. Kiekvienas žmogus gali rasti skirtingą jo panaudojimą.
Tai, ką galime padaryti naudodami šį montažą
Tai yra idėjos, kurios man kyla norint pasinaudoti šiuo montažu. Kai skeletas yra apginkluotas, galime juo suaktyvinti viską, kas ateina į galvą balsu, galime suaktyvinti relę, kuri paleidžia variklį arba galime paleisti scenarijų, kuris vykdo scenarijų, el. laišką ar dar ką nors.
Kas yra šnabždesys
„Whisper“ yra garsumo atpažinimo modelis, veikia keliomis kalbomis su daugybe kalbų ir leidžia išversti į anglų kalbą. Tai, ką mes žinome kaip teksto į balsą įrankį, išleido OpenAI komanda, Dall-e kūrėjai.