Rialú guth ar ríomhaire agus RaspberryPi le Cogar

rialú guth ar ríomhaire agus sú craobh pi

Is é an smaoineamh an tionscadal treoracha gutha a thabhairt chun idirghníomhú tríd ár ríomhaire nó ár Raspberry Pi ag baint úsáide as an tsamhail Guth-go-téacs Whisper.

Tabharfaimid ordú a thras-scríobhfar, a thiontú go téacs, le Whisper agus ansin déanfar anailís air chun an t-ordú cuí a fhorghníomhú, a fhéadfaidh a bheith ó chlár a fhorghníomhú go dtí voltas a thabhairt do na bioráin RaspberryPi.

Táim chun sean-Sú craobh Pi 2, micrea USB a úsáid agus úsáidfidh mé an tsamhail Voice-go-text a d'eisigh OpenAI le déanaí, Whisper. Ag deireadh an ailt is féidir leat a fheiceáil beagán níos mó cogar.

go léir cláraithe i Python.

Fágaim léiriú duit ar conas a oibríonn sé san fhíseán seo, ag rialú an ríomhaire trí ghuth.

Tionól

Chun é a úsáid leis an ríomhaire, ní bheidh ach micreafón ag teastáil uainn.

Má tá tú chun é a shuiteáil ar an RaspberryPi, beidh micreafón USB uait, toisc nach bhfuil an seaicéad atá aige ach le haghaidh aschur.

Riachtanas:

Toisc gurb é sainaithint guth príomhchuspóir an uirlis. Tá sé an-úsáideach dom é a chomhtháthú in oibriú gléasanna eile.

  • micrea USB
  • PI sú craobh le córas oibriúcháin (mar shampla Raspbian pro)
  • Leictreonaic (LED, sreanga, friotóir 480 óm agus clár aráin)

Ceanglaíonn muid an stiúir le bioráin 17, agus is é sin an ceann a ghníomhachtú agus a dhíghníomhachtú don taithí seo.

forbairt cód

Tá sé roinnte ina thrí chuid, an chéad cheann, an taifeadadh fuaime as a bhfuil cód glactha agam geeksforgeeks, mar níl aithne agam ar na siopaí leabhar sin. An dara ceann, tiontú fuaime go téacs le Whisper agus an tríú ceann, láimhseáil an téacs sin agus an fhreagairt sa RaspberryPi

Sa sampla tástála ní dhéanfaidh mé ach idirghníomhú le Led, rud a fhágann go mbeidh sé ag lasadh suas nó ag blink, ach d’fhéadfaimis an script a fhorbairt chun é a oiriúnú dár riachtanais.

Tá a fhios agam gur Pí Sú craobh 2 é seo agus beidh sé i bhfad níos moille ná Raspberry Pi 4, ach le haghaidh tástála tá sé ceart go leor.

Sular féidir leat é a oibriú, beidh ort na rudaí seo a leanas a shuiteáil

#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>

an cód ar fad

#!/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 &amp;&amp; sudo apt install ffmpeg

Ní raibh mé in ann é a thástáil toisc nach bhfuil microSD agam don RaspberryPi, nó cainteoir USB le nascadh, ach chomh luath agus a bhainim triail as, ceartaigh earráid éigin go bhfuil sé éasca sleamhnú isteach.

Míniú céim ar chéim ar an gcód

#!/usr/bin/env python3

An Shebang a insint don ghléas cén teanga atá cláraithe againn agus cén teangaire a úsáidfear. Cé gur cosúil go bhfuil sé fánach, is iomaí uair is cúis le earráidí gan é a chur.

leabharlanna allmhairithe

import whisper
import time
from gpiozero import LED
import sounddevice as sd
from scipy.io.wavfile import write
import wavio as wv

Cogar a bheith ag obair leis an tsamhail

am, toisc go n-úsáideann mé é chun an t-am a thógann sé chun an script a rith a rialú, gpiozero oibriú le bioráin GPIO na Sú craobh agus gléas fuaime, scipy agus wavio chun an fhuaim a thaifeadadh

Feidhmeanna

Tá 4 fheidhm cruthaithe agam:

  • príomh ()
  • solas ()
  • chun blink ()
  • taifead_audio()

ní dhéanann sé ach voltas a chur ar siúl le bioráin 17 den sú craobh a bhfuil an LED nasctha againn sa chás seo chun tástáil a dhéanamh

def encender ():
    LED(17).on()

Tá blink() cosúil le ar() ach déanann sé an blink faoi stiúir trí é a chasadh air agus as laistigh de lúb.

def parpadear ():
    light = LED(17)
    while True:
        light.on()
        sleep(1)
        light.off()
        sleep(1)

Le record_audio() taifeadaimid an comhad fuaime

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)

Is í an phríomhfheidhm an phríomhfheidhm, tabhair faoi deara gurb é an t-aon rud atá againn lasmuigh d’fheidhmeanna ná an glao go dtí an príomh() ag deireadh na scripte. Ar an mbealach seo ar am tosaithe, beidh sé allmhairiú na leabharlanna agus ansin a dhéanamh ar an glaoch fheidhm.

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)

Sábhálann muid an t-am ag a dtosaímid ag feidhmiú na feidhme agus ansin tugaimid an fheidhm fuaime taifid a thaifeadfaidh ár dteagasc i gcomhad .wav, .mp3, etc. a thiontóidh muid ina théacs níos déanaí

    inicio = time.time()
    record_audio ()

  

Nuair a bheidh an fhuaim againn, cuirfear cogar ar a dtugtar agus cuirimid in iúl dó an tsamhail ba mhaith linn a úsáid, tá 5 ar fáil, agus úsáidfimid beag bídeach, cé gurb é an rud is neamhchruinne mar is é an ceann is tapúla agus beidh an fhuaim simplí, ach 3 nó 4 focail.

     model = whisper.load_model("tiny")
    result = model.transcribe("audio1.wav")

  

Leis seo ní mór dúinn an fhuaim a thiontú go téacs agus a shábháil in athróg. Déanaimis é a mhodhnú beagán.

Déanaimid an toradh a thiontú ina liosta le gach focal den fhuaim

     words = result["text"].split()

  

Agus gach rud réidh chun idirghníomhú lenár gléas. Anois níl le déanamh againn ach na coinníollacha atá uainn a chruthú.

Má tá an focal X ag an bhfuaim, déan Y. Toisc go bhfuil na focail i liosta againn, tá sé an-éasca coinníollacha a chur leis

         for word in words:
        word = word.replace(',', '').replace('.', '').lower()
        if word == 'enciende' or 'encender':
            encender()
            break
        if word == 'parpadea' or 'parpadear':
            parpadear()
            break   

  

Líne

         
        word = word.replace(',', '').replace('.', '').lower()


  

Úsáidim é chun na focail sa fhuaim a thiontú go cás íochtair agus chun na camóga agus na tréimhsí a bhaint. Agus ar an mbealach seo earráidí a sheachaint sna comparáidí

I ngach ceann má shásaítear an coinníoll maidir le haon cheann de na focail atá roghnaithe againn a bheith againn, glaonn sé feidhm a dhéanfaidh mar is mian linn,

Seo an áit a ndeirimid dó UAP a ghníomhachtú a lasfaidh LED nó a dhéanfaidh caochadh. Ceachtar rith cód éigin, nó stop an ríomhaire.

Is smaoineamh bunúsach é seo go léir. Ón áit seo is féidir leat an tionscadal a fhorbairt agus é a fheabhsú mar is mian leat. Is féidir le gach duine úsáid eile a aimsiú dó.

Rudaí is féidir linn a dhéanamh leis an montage seo

Is smaointe iad seo a thagann chugam chun leas a bhaint as an montage seo. Nuair a bheidh an chnámharlach armtha, is féidir linn é a úsáid chun gach rud a thagann chun cuimhne a ghníomhachtú trí ghuth, is féidir linn sealaíochta a thosaíonn mótair a ghníomhachtú nó is féidir linn script a sheoladh a fhorghníomhaíonn script, ríomhphost nó cibé rud.

Cad é cogar

Is samhail aitheantais toirte é Whisper, oibríonn sé i iltheanga le líon mór teangacha agus ceadaíonn sé aistriúchán go Béarla. Is é atá ar eolas againn mar uirlis téacs-go-guth, arna scaoileadh ag foireann OpenAI, cruthaitheoirí Dall-e.

Fág tagairt