Hankkeen idea on anna ääniohjeita vuorovaikutukseen PC:n tai Raspberry Pi:n kautta käyttämällä Voice-to-text Whisper -mallia.
Annamme tilauksen, joka transkriptoidaan, muunnetaan tekstiksi Whisperilla ja sitten analysoidaan sopivan tilauksen suorittamiseksi, joka voi olla ohjelman suorittamisesta jännitteen antamiseen RaspberryPi-nastoihin.
Aion käyttää vanhaa Raspberry Pi 2:ta, mikro-USB:tä ja OpenAI:n hiljattain julkaisemaa Voice-to-text -mallia, Kuiskaus. Artikkelin lopusta näet vähän lisää kuiskausta.
kaikki ohjelmoitu Python.
Jätän sinulle esittelyn siitä, miten se toimii tässä videossa, jossa ohjataan tietokonetta äänellä.
asennus
Tarvitsemme vain mikrofonin käyttääksesi sitä tietokoneen kanssa.
Jos aiot asentaa sen RaspberryPiin, tarvitset USB-mikrofonin, koska siinä oleva liitin on vain lähtöä varten.
Me tarvitsemme:
Koska työkalun yleinen tarkoitus on äänitunnistus. Minusta on erittäin hyödyllistä integroida se muiden laitteiden toimintaan.
- micro USB
- Raspberry PI käyttöjärjestelmällä (esimerkki Raspbian pro)
- Elektroniikka (LED, johdot, 480 ohmin vastus ja koelevy)
Yhdistämme LEDin nastaan 17, jonka aktivoimme ja deaktivoimme tätä kokemusta varten.
koodin kehittäminen
Se on jaettu kolmeen osaan, joista ensimmäinen on äänitallenne, josta olen ottanut koodin geeksforgeeks, koska en tunne niitä kirjakauppoja. Toinen, äänen muuntaminen tekstiksi Whisperilla ja kolmas, tämän tekstin ja vastauksen käsittely RaspberryPi:ssä
Testiesimerkissä aion olla vuorovaikutuksessa vain ledin kanssa, jolloin se syttyy tai vilkkuu, mutta voisimme kehittää käsikirjoituksen mukauttaaksemme sen tarpeisiimme.
Tiedän, että tämä on Raspberry Pi 2 ja se tulee olemaan paljon hitaampi kuin Raspberry Pi 4, mutta testaukseen se on hyvä.
Ennen kuin saat sen toimimaan, sinun on asennettava seuraavat
#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>
kaikki koodi
#!/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
En ole päässyt testaamaan, koska minulla ei ole microSD-korttia RaspberryPille tai USB-kaiutinta kytkettäväksi, mutta heti kun yritän sitä, korjaan jonkin virheen, jonka takia se on helppo sujahtaa sisään.
Askel askeleelta koodin selitys
#!/usr/bin/env python3
Shebang kertoo laitteelle, millä kielellä olemme ohjelmoineet ja mitä tulkkia käytetään. Vaikka se näyttää triviaalilta, sen laittaminen aiheuttaa virheitä useaan otteeseen.
maahantuodut kirjastot
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Kuiskaa työskennelläksesi mallin kanssa
aikaa, koska käytän sitä ohjaamaan skriptin suorittamiseen kuluvaa aikaa, gpiozeroa työskentelemään Raspberryn ja äänilaitteen GPIO-nastojen kanssa, scipy ja wavio äänen tallentamiseen
tehtävät
Olen luonut 4 toimintoa:
- pää ()
- valo ()
- vilkkua ()
- Record_audio()
kytke päälle () yksinkertaisesti antaa jännitteen vadelman nastan 17, johon olemme kytkeneet tässä tapauksessa LEDin testattavaksi
def encender (): LED(17).on()
blink() on kuin on(), mutta se saa ledin vilkkumaan kytkemällä sen päälle ja pois päältä silmukan sisällä.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
Record_audio():lla tallennamme äänitiedoston
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 on pääfunktio, huomaa, että ainoa asia, joka meillä on funktioiden ulkopuolella, on komentosarjan lopussa oleva main()-kutsu. Tällä tavalla käynnistyksen yhteydessä se tuo kirjastot ja suorittaa sitten funktiokutsun.
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)
Tallennamme ajan, jolloin aloitamme toiminnon suorittamisen, ja kutsumme sitten äänitystoimintoa, joka tallentaa ohjeemme .wav-, .mp3- jne. tiedostoon, jonka muunnamme myöhemmin tekstiksi
inicio = time.time() record_audio ()
Kun meillä on ääni, kutsutaan kuiskaus ja kerromme sille mallin, jota haluamme käyttää. Saatavilla on 5 mallia, ja käytämme pientä, vaikka se onkin epätarkin, koska se on nopein ja ääni on yksinkertaista, vain 3 tai 4 sanaa.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Tällä olemme muuntaneet äänen tekstiksi ja tallentaneet muuttujaan. Muokataan sitä hieman.
Muunnamme tuloksen luetteloksi, joka sisältää jokaisen äänen sanan
words = result["text"].split()
Ja kaikki valmiina vuorovaikutukseen laitteemme kanssa. Nyt meidän on vain luotava haluamamme olosuhteet.
Jos äänessä on sana X, tee Y. Kuten sanat ovat luettelossa, on erittäin helppoa lisätä ehtoja
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
linja
word = word.replace(',', '').replace('.', '').lower()
Käytän sitä muuntaakseni äänen sanat pieniksi kirjaimiksi ja poistamaan pilkut ja pisteet. Ja näin vältät virheet vertailuissa
Jokaisessa if-kohdassa, jos ehto jonkin valitsemistamme sanoista täyttyy, se kutsuu funktiota, joka tekee mitä haluamme,
Tässä kehotamme sitä aktivoimaan PIN-koodin, joka sytyttää LEDin tai saa sen vilkkumaan. Suorita jokin koodi tai sammuta tietokone.
Kaikki tämä on perusidea. Täältä voit kehittää projektia ja parantaa sitä haluamallasi tavalla. Jokainen voi löytää sille omanlaisensa käyttötarkoituksen.
Asioita, joita voimme tehdä tällä montaasilla
Nämä ovat minulle tulleita ideoita hyödyntää tätä montaasia. Kun luuranko on viritetty, voimme sen avulla aktivoida kaiken, mikä tulee mieleen äänellä, voimme aktivoida releen, joka käynnistää moottorin tai voimme käynnistää skriptin, joka suorittaa komentosarjan, sähköpostin tai mitä tahansa.
Mikä on kuiskaus
Whisper on vol-tunnistusmalli, toimii monikielisenä useilla kielillä ja mahdollistaa kääntämisen englanniksi. Tunnemme sen tekstistä puheeksi -työkaluna, jonka on julkaissut OpenAI-tiimi, Dall-e:n luojat.