Ideu proyekna nyaéta masihan parentah sora pikeun berinteraksi ngaliwatan PC urang atawa Raspberry Pi urang ngagunakeun model Voice-to-text Whisper.
Kami bakal masihan pesenan anu bakal ditranskripsi, dirobih kana téks, sareng Whisper teras dianalisis pikeun ngaéksekusi pesenan anu pas, anu tiasa tina ngalaksanakeun program pikeun masihan tegangan kana pin RaspberryPi.
Abdi badé nganggo Raspberry Pi 2 lami, USB mikro sareng kuring bakal nganggo modél Voice-to-text anu nembe dikaluarkeun ku OpenAI, harewos. Dina ahir artikel anjeun tiasa ningali saeutik deui bisik.
kabéh diprogram dina Python.
Kuring ninggalkeun anjeun demonstrasi kumaha gawéna dina video ieu, ngadalikeun PC ku sora.
Majelis
Pikeun ngagunakeun éta sareng PC, urang ngan ukur peryogi mikropon.
Upami anjeun badé dipasang dina RaspberryPi, anjeun peryogi mikropon USB, sabab jack éta ngan ukur pikeun kaluaran.
Peryogi:
Salaku tujuan umum tina alat nyaéta idéntifikasi sora. Kuring mendakan éta mangpaat pisan pikeun ngahijikeun kana operasi alat anu sanés.
- micro USB
- Raspberry PI sareng sistem operasi (conto Raspbian pro)
- Éléktronik (LED, kabel, résistor 480 ohm sareng papan roti)
Urang sambungkeun LED ka pin 17, nu hiji nu urang bakal ngaktipkeun jeung mareuman pangalaman ieu.
ngembangkeun kode
Ieu dibagi kana tilu bagian, kahiji, rekaman audio nu Kuring geus nyokot kode ti geeksforgeeks, sabab kuring teu nyaho eta toko buku. Anu kadua, konvérsi audio kana téks nganggo Whisper sareng anu katilu, perawatan téks sareng réspon éta dina RaspberryPi
Dina conto tés kuring ngan ukur bakal berinteraksi sareng Led, ngajantenkeun lampu atanapi kedip-kedip, tapi urang tiasa ngembangkeun naskah pikeun nyaluyukeun kana kabutuhan urang.
Kuring sadar yén ieu Raspberry Pi 2 sareng éta bakal langkung laun tibatan Raspberry Pi 4, tapi pikeun nguji éta henteu kunanaon.
Sateuacan anjeun tiasa dianggo, anjeun kedah pasang di handap ieu
#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>
kabéh kode
#!/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
Abdi henteu acan tiasa nguji éta kusabab kuring henteu gaduh microSD pikeun RaspberryPi, atanapi spiker USB pikeun nyambungkeun, tapi pas kuring nyobian éta kuring ngabenerkeun sababaraha kasalahan anu gampang dilebetkeun.
Step by step katerangan kode
#!/usr/bin/env python3
The Shebang pikeun ngabejaan alat naon basa kami geus diprogram na naon juru ngagunakeun. Sanajan sigana trivial, teu nempatkeun eta ngabalukarkeun kasalahan dina sababaraha kali.
perpustakaan diimpor
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Cicing gawe bareng model
waktos, sabab kuring make eta ngadalikeun waktu nu diperlukeun pikeun ngaéksekusi naskah, gpiozero pikeun digawe sareng GPIO pin tina buah prambus jeung sounddevice, scipy na wavio pikeun ngarekam audio.
Fungsi
Kuring geus nyieun 4 fungsi:
- utama ()
- cahaya ()
- kedip-kedip ()
- record_audio()
hurungkeun () saukur masihan tegangan ka pin 17 tina buah prambus dimana kami geus disambungkeun dina hal ieu LED pikeun nguji.
def encender (): LED(17).on()
blink () kawas on () tapi ngajadikeun dipingpin kedip-kedip ku ngahurungkeun jeung mareuman dina loop a.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
Kalawan record_audio () urang ngarekam file 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 nyaéta fungsi utama, perhatikeun yén hiji-hijina hal anu urang gaduh di luar fungsi nyaéta panggero ka main () dina tungtung naskah. Ku cara ieu dina ngamimitian, éta bakal ngimpor perpustakaan teras nelepon fungsi.
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)
Urang ngahemat waktos di mana urang mimitian ngajalankeun fungsi lajeng urang nelepon rekaman audio fungsi nu bakal ngarekam instruksi urang dina file .wav, .mp3, jsb nu urang engké bakal ngarobah kana téks.
inicio = time.time() record_audio ()
Sakali kami gaduh audio, harewos bakal disebut sareng kami nyarioskeun modél anu kami hoyong dianggo, aya 5 sayogi, sareng kami bakal nganggo alit, sanaos éta anu paling teu tepat sabab éta panggancangna sareng audiona bakal saderhana. ngan 3 atawa 4 kecap.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Kalayan ieu kami gaduh audio dirobih kana téks sareng disimpen dina variabel. Hayu urang modifikasi saeutik.
Kami ngarobih hasil kana daptar sareng unggal kecap tina audio
words = result["text"].split()
Sareng sadayana siap berinteraksi sareng alat kami. Ayeuna urang ngan ukur kedah nyiptakeun kaayaan anu dipikahoyong.
Lamun audio ngabogaan kecap X, ngalakukeun Y. Salaku urang boga kecap dina daptar, éta pisan gampang pikeun nambahkeun kaayaan
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
Jalur na
word = word.replace(',', '').replace('.', '').lower()
Kuring ngagunakeun éta pikeun ngarobih kecap dina audio kana hurup leutik sareng ngahapus koma sareng titik. Sareng ku cara ieu ngahindarkeun kasalahan dina ngabandingkeun
Dina unggal lamun kaayaan ngabogaan salah sahiji kecap kami geus dipilih geus patepung, éta disebut fungsi anu bakal ngalakukeun naon urang hayang,
Ieu dimana urang nyarioskeun éta pikeun ngaktipkeun PIN anu bakal nyéépkeun LED atanapi ngajantenkeun kedip-kedip. Boh ngajalankeun sababaraha kode, atawa mareuman komputer.
Sadaya ieu mangrupikeun ide dasar. Ti dieu anjeun tiasa ngembangkeun proyék sareng ningkatkeun sakumaha anu dipikahoyong. Tiap jalma bisa manggihan pamakéan béda pikeun eta.
Hal-hal anu tiasa urang laksanakeun sareng montase ieu
Ieu mangrupikeun ideu anu sumping ka kuring pikeun ngamangpaatkeun montase ieu. Sakali rorongkong kasebut pakarang, urang bisa make eta pikeun ngaktipkeun sagalana nu datang ka pikiran ku sora, urang tiasa ngaktipkeun relay nu ngamimitian motor atawa urang tiasa ngajalankeun hiji naskah nu executes naskah, email atanapi naon.
Naon bisik
Whisper mangrupikeun modél pangakuan vol, dianggo dina multibasa kalayan sajumlah ageung basa sareng ngamungkinkeun tarjamahan kana basa Inggris. Éta naon anu urang terang salaku alat téks-ka-sora, dikaluarkeun ku tim OpenAI, panyipta Dall-e.