Ang ideya ng proyekto ay magbigay ng mga tagubilin gamit ang boses upang makipag-ugnayan sa pamamagitan ng aming PC o aming Raspberry Pi gamit ang Voice-to-text na Whisper na modelo.
Magbibigay kami ng isang order na isa-transcribe, iko-convert sa text, gamit ang Whisper at pagkatapos ay susuriin upang maisagawa ang naaangkop na pagkakasunud-sunod, na maaaring mula sa pagsasagawa ng isang programa hanggang sa pagbibigay ng boltahe sa mga RaspberryPi pin.
Gagamit ako ng lumang Raspberry Pi 2, isang micro USB at gagamitin ko ang Voice-to-text na modelo na inilabas kamakailan ng OpenAI, Paanas. Sa dulo ng artikulo makikita mo konting bulong pa.
lahat ay naka-program sa Sawa.
Nag-iiwan ako sa iyo ng isang demonstrasyon kung paano ito gumagana sa video na ito, na kinokontrol ang PC sa pamamagitan ng boses.
Assembly
Para magamit ito sa PC, kakailanganin lang namin ng mikropono.
Kung ilalagay mo ito sa RaspberryPi, kakailanganin mo ng USB microphone, dahil ang jack na mayroon ito ay para lamang sa output.
Kailangan:
Dahil ang pangkalahatang layunin ng tool ay pagkilala sa boses. Sa tingin ko ito ay lubhang kapaki-pakinabang upang isama ito sa pagpapatakbo ng iba pang mga device.
- Micro USB
- Raspberry PI na may operating system (halimbawa ng Raspbian pro)
- Electronics (LED, wires, 480 ohm resistor at breadboard)
Ikinonekta namin ang LED sa pin 17, na siyang isaaktibo at ide-deactivate namin para sa karanasang ito.
pagbuo ng code
Ito ay nahahati sa tatlong bahagi, ang una, ang audio recording kung saan ako kumuha ng code geeksforgeeks, hindi ko kasi alam yung mga bookstore. Ang pangalawa, ang conversion ng audio sa text gamit ang Whisper at ang pangatlo, ang paggamot sa text na iyon at tugon sa RaspberryPi
Sa halimbawa ng pagsubok, makikipag-ugnayan lang ako sa isang Led, ginagawa itong lumiwanag o kumukurap, ngunit maaari naming bumuo ng script upang iakma ito sa aming mga pangangailangan.
Alam kong ito ay isang Raspberry Pi 2 at ito ay magiging mas mabagal kaysa sa isang Raspberry Pi 4, ngunit para sa pagsubok ito ay mainam.
Bago mo ito mapagana, kakailanganin mong i-install ang sumusunod
#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>
lahat ng code
#!/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
Hindi ko pa ito nasubukan dahil wala akong microSD para sa RaspberryPi, o isang USB speaker upang kumonekta, ngunit sa sandaling subukan ko ito ay itinatama ko ang ilang error na madaling makapasok.
Hakbang-hakbang na paliwanag ng code
#!/usr/bin/env python3
Ang Shebang upang sabihin sa device kung saang wika kami naka-program at kung anong interpreter ang gagamitin. Bagaman ito ay tila walang halaga, ang hindi paglalagay nito ay nagdudulot ng mga pagkakamali sa maraming pagkakataon.
imported na mga aklatan
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Bumulong upang magtrabaho kasama ang modelo
oras, dahil ginagamit ko ito upang kontrolin ang oras na kinakailangan upang maisagawa ang script, gpiozero upang gumana sa mga GPIO pin ng Raspberry at sounddevice, scipy at wavio upang i-record ang audio
Mga Pag-andar
Gumawa ako ng 4 na function:
- pangunahing ()
- liwanag ()
- kumurap ()
- record_audio()
i-on () ay nagbibigay lamang ng boltahe sa pin 17 ng raspberry kung saan kami ay nakakonekta sa kasong ito ang LED upang subukan
def encender (): LED(17).on()
Ang blink() ay parang on() ngunit ginagawa nito ang led blink sa pamamagitan ng pag-on at off nito sa loob ng isang loop.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
Sa record_audio() nire-record namin ang audio file
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 ang pangunahing function, pansinin na ang tanging bagay na mayroon kami sa labas ng mga function ay ang tawag sa main() sa dulo ng script. Sa ganitong paraan sa pagsisimula, i-import nito ang mga aklatan at pagkatapos ay gagawin ang function na tawag.
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)
Nai-save namin ang oras kung kailan namin sisimulang isagawa ang function at pagkatapos ay tinawag namin ang record audio function na magre-record ng aming pagtuturo sa isang .wav, .mp3, atbp. na file na iko-convert namin sa text.
inicio = time.time() record_audio ()
Kapag mayroon na kaming audio, tatawagin ang bulong at sasabihin namin dito ang modelo na gusto naming gamitin, mayroong 5 na magagamit, at gagamit kami ng maliliit, bagaman ito ay ang pinaka-imprecise dahil ito ang pinakamabilis at ang audio ay magiging simple, 3 o 4 na salita lamang.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Sa pamamagitan nito mayroon kaming audio na na-convert sa teksto at nai-save sa isang variable. Baguhin natin ito ng kaunti.
Kino-convert namin ang resulta sa isang listahan na may bawat isa sa mga salita ng audio
words = result["text"].split()
At handa na ang lahat para makipag-ugnayan sa aming device. Ngayon kailangan lang nating lumikha ng mga kondisyon na gusto natin.
Kung ang audio ay may salitang X, gawin ang Y. Dahil mayroon kaming mga salita sa isang listahan, napakadaling magdagdag ng mga kundisyon
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
Linya
word = word.replace(',', '').replace('.', '').lower()
Ginagamit ko ito para i-convert ang mga salita sa audio sa lowercase at alisin ang mga kuwit at tuldok. At sa ganitong paraan maiwasan ang mga pagkakamali sa mga paghahambing
Sa bawat isa kung ang kondisyon ng pagkakaroon ng alinman sa mga salita na napili natin ay natutugunan, ito ay tinatawag na isang function na gagawin kung ano ang gusto natin,
Dito namin sinasabing mag-activate ng PIN na magpapasindi ng LED o magpapapikit. Magpatakbo ng ilang code, o isara ang computer.
Ang lahat ng ito ay isang pangunahing ideya. Mula dito maaari mong bumuo ng proyekto at pagbutihin ito ayon sa gusto mo. Ang bawat tao ay makakahanap ng ibang gamit para dito.
Mga bagay na magagawa natin sa montage na ito
Ito ang mga ideya na dumating sa akin upang samantalahin ang montage na ito. Kapag armado na ang skeleton, magagamit natin ito para i-activate ang lahat ng pumapasok sa isip sa pamamagitan ng boses, maaari tayong mag-activate ng relay na nagpapaandar ng motor o maaari tayong maglunsad ng script na nagpapatupad ng script, email o kung ano pa man.
Ano ang bulong
Ang Whisper ay isang vol recognition model, gumagana sa multilanguage na may malaking bilang ng mga wika at nagbibigay-daan sa pagsasalin sa Ingles. Ito ang alam natin bilang text-to-voice tool, na inilabas ng OpenAI team, ang mga tagalikha ng Dall-e.