Syniad y prosiect yw rhoi cyfarwyddiadau llais i ryngweithio trwy ein PC neu ein Raspberry Pi gan ddefnyddio'r model Voice-to-text Whisper.
Byddwn yn rhoi gorchymyn a fydd yn cael ei drawsgrifio, ei drosi i destun, gyda Whisper ac yna ei ddadansoddi i weithredu'r drefn briodol, a all fod o weithredu rhaglen i roi foltedd i'r pinnau RaspberryPi.
Rwy'n mynd i ddefnyddio hen Raspberry Pi 2, micro USB a byddaf yn defnyddio'r model Llais-i-destun a ryddhawyd yn ddiweddar gan OpenAI, Sibrwd. Ar ddiwedd yr erthygl gallwch weld ychydig mwy o sibrwd.
i gyd wedi'u rhaglennu i mewn Python.
Rwy'n gadael arddangosiad i chi o sut mae'n gweithio yn y fideo hwn, gan reoli'r PC trwy lais.
Cynulliad
Er mwyn ei ddefnyddio gyda'r PC, dim ond meicroffon fydd ei angen arnom.
Os ydych chi'n mynd i'w osod ar y RaspberryPi, bydd angen meicroffon USB arnoch chi, oherwydd dim ond ar gyfer allbwn y mae'r jack sydd ganddo.
Angen:
Gan mai pwrpas cyffredinol yr offeryn yw adnabod llais. Rwy'n ei chael hi'n ddefnyddiol iawn ei integreiddio i weithrediad dyfeisiau eraill.
- Micro USB
- Raspberry PI gyda system weithredu (enghraifft pro Raspbian)
- Electroneg (LED, gwifrau, gwrthydd 480 ohm a bwrdd bara)
Rydym yn cysylltu'r LED â pin 17, sef yr un y byddwn yn ei actifadu a'i ddadactifadu ar gyfer y profiad hwn.
datblygu cod
Mae wedi'i rannu'n dair rhan, y cyntaf, y recordiad sain yr wyf wedi cymryd cod ohono geeksforgeeks, oherwydd nid wyf yn gwybod y siopau llyfrau hynny. Yr ail, trosi sain i destun gyda Whisper a'r trydydd, trin y testun hwnnw a'r ymateb yn y RaspberryPi
Yn yr enghraifft brawf dim ond gyda Led y byddaf yn rhyngweithio, gan ei wneud yn goleuo neu amrantu, ond gallem ddatblygu'r sgript i'w addasu i'n hanghenion.
Rwy'n ymwybodol mai Raspberry Pi 2 yw hwn ac mae'n mynd i fod yn llawer arafach na Raspberry Pi 4, ond ar gyfer profi mae'n iawn.
Cyn i chi allu ei gael i weithio, bydd angen i chi osod y canlynol
#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>
yr holl god
#!/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
Nid wyf wedi gallu ei brofi oherwydd nid oes gennyf microSD ar gyfer y RaspberryPi, na siaradwr USB i gysylltu, ond cyn gynted ag y byddaf yn ceisio ei gywiro rhywfaint o wall ei bod yn hawdd llithro i mewn.
Esboniad cam wrth gam o'r cod
#!/usr/bin/env python3
Y Shebang i ddweud wrth y ddyfais ym mha iaith yr ydym wedi rhaglennu a pha ddehonglydd i'w ddefnyddio. Er ei fod yn ymddangos yn ddibwys, mae peidio â'i roi yn achosi gwallau ar sawl achlysur.
llyfrgelloedd wedi'u mewnforio
import whisper import time from gpiozero import LED import sounddevice as sd from scipy.io.wavfile import write import wavio as wv
Sibrwd i weithio gyda'r model
amser, oherwydd dwi'n ei ddefnyddio i reoli'r amser mae'n ei gymryd i weithredu'r sgript, gpiizero i weithio gyda phiniau GPIO y Mafon a sounddevice, scipy a wavio i recordio'r sain
Swyddogaethau
Rwyf wedi creu 4 swyddogaeth:
- prif ()
- golau ()
- i blincio ()
- record_sain()
trowch ymlaen () yn syml yn rhoi foltedd i pin 17 y mafon lle rydym wedi cysylltu yn yr achos hwn y LED i brofi
def encender (): LED(17).on()
Mae blink() fel ar() ond mae'n gwneud y blincio dan arweiniad trwy ei droi ymlaen ac i ffwrdd o fewn dolen.
def parpadear (): light = LED(17) while True: light.on() sleep(1) light.off() sleep(1)
Gyda record_audio() rydym yn recordio'r ffeil sain
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)
Prif yw'r prif swyddogaeth, sylwch mai'r unig beth sydd gennym y tu allan i swyddogaethau yw'r alwad i brif () ar ddiwedd y sgript. Fel hyn wrth gychwyn, bydd yn mewnforio'r llyfrgelloedd ac yna'n gwneud y swyddogaeth yn galw.
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)
Rydyn ni'n arbed yr amser rydyn ni'n dechrau gweithredu'r swyddogaeth ac yna rydyn ni'n galw'r swyddogaeth recordio sain a fydd yn cofnodi ein cyfarwyddyd mewn ffeil .wav, .mp3, ac ati y byddwn yn ei throsi'n destun yn ddiweddarach
inicio = time.time() record_audio ()
Ar ôl i ni gael y sain, bydd sibrwd yn cael ei alw ac rydyn ni'n dweud wrtho'r model rydyn ni am ei ddefnyddio, mae yna 5 ar gael, a byddwn ni'n defnyddio bach, er mai dyma'r un mwyaf anfanwl oherwydd dyma'r cyflymaf a bydd y sain yn syml, dim ond 3 neu 4 gair.
model = whisper.load_model("tiny") result = model.transcribe("audio1.wav")
Gyda hyn mae gennym ni'r sain wedi'i drawsnewid yn destun a'i gadw mewn newidyn. Gadewch i ni ei addasu ychydig.
Rydym yn trosi canlyniad yn rhestr gyda phob un o eiriau'r sain
words = result["text"].split()
A phopeth yn barod i ryngweithio â'n dyfais. Nawr mae'n rhaid i ni greu'r amodau rydyn ni eu heisiau.
Os oes gan y sain y gair X, gwnewch Y. Gan fod gennym y geiriau mewn rhestr, mae'n hawdd iawn ychwanegu amodau
for word in words: word = word.replace(',', '').replace('.', '').lower() if word == 'enciende' or 'encender': encender() break if word == 'parpadea' or 'parpadear': parpadear() break
Y llinell
word = word.replace(',', '').replace('.', '').lower()
Rwy'n ei ddefnyddio i drosi'r geiriau yn y sain i lythrennau bach a thynnu'r atalnodau a'r cyfnodau. Ac yn y modd hwn osgoi gwallau yn y cymariaethau
Ym mhob un os yw'r amod o gael unrhyw un o'r geiriau rydyn ni wedi'u dewis yn cael ei fodloni, mae'n galw swyddogaeth a fydd yn gwneud yr hyn rydyn ni ei eisiau,
Dyma lle rydyn ni'n dweud wrtho am actifadu PIN a fydd yn goleuo LED neu'n ei wneud yn blincio. Naill ai rhedeg rhywfaint o god, neu gau'r cyfrifiadur i lawr.
Mae hyn i gyd yn syniad sylfaenol. O'r fan hon gallwch ddatblygu'r prosiect a'i wella fel y dymunwch. Gall pob person ddod o hyd i ddefnydd gwahanol ar ei gyfer.
Pethau y gallwn eu gwneud gyda'r montage hwn
Mae'r rhain yn syniadau sy'n dod ataf i fanteisio ar y montage hwn. Unwaith y bydd y sgerbwd wedi'i arfogi, gallwn ei ddefnyddio i actifadu popeth a ddaw i'r meddwl trwy lais, gallwn actifadu ras gyfnewid sy'n cychwyn modur neu gallwn lansio sgript sy'n gweithredu sgript, e-bost neu beth bynnag.
Beth yw sibrwd
Mae Whisper yn fodel adnabod cyfeintiau, yn gweithio mewn amlieithog gyda nifer fawr o ieithoedd ac yn caniatáu cyfieithu i'r Saesneg. Dyma'r hyn rydyn ni'n ei adnabod fel offeryn testun-i-lais, ond Ffynhonnell Agored yw hwn, a ryddhawyd gan dîm OpenAI, crewyr Stable Diffusion.