Udhibiti wa sauti kwenye Kompyuta na RaspberryPi na Whisper

udhibiti wa sauti kwenye pc na raspberry pi

Wazo la mradi ni toa maagizo ya sauti ili kuingiliana kupitia Kompyuta yetu au Raspberry Pi yetu kwa kutumia mtindo wa Kunong'ona kwa Sauti hadi maandishi.

Tutatoa agizo ambalo litaandikwa, kubadilishwa kuwa maandishi, na Whisper na kisha kuchambuliwa ili kutekeleza agizo linalofaa, ambalo linaweza kutoka kwa kutekeleza mpango hadi kutoa voltage kwa pini za RaspberryPi.

Nitatumia Raspberry Pi 2 ya zamani, USB ndogo na nitatumia modeli ya Sauti-kwa-maandishi iliyotolewa hivi karibuni na OpenAI, Whisper. Mwishoni mwa makala unaweza kuona kunong'ona kidogo zaidi.

zote zimepangwa ndani Chatu.

Ninakuachia onyesho la jinsi inavyofanya kazi katika video hii, kudhibiti Kompyuta kwa sauti.

Mkutano

Ili kuitumia na PC, tutahitaji tu kipaza sauti.

Ikiwa utaiweka kwenye RaspberryPi, utahitaji kipaza sauti cha USB, kwa sababu jack iliyo nayo ni ya pato tu.

Haja:

Kama madhumuni ya jumla ya chombo ni kitambulisho cha sauti. Ninaona ni muhimu sana kuiunganisha katika uendeshaji wa vifaa vingine.

  • USB ndogo
  • Raspberry PI na mfumo wa uendeshaji (mfano wa Raspbian pro)
  • Elektroniki (LED, waya, kizuia ohm 480 na ubao wa mkate)

Tunaunganisha LED kwenye pin 17, ambayo ndiyo tutawasha na kuzima kwa matumizi haya.

maendeleo ya kanuni

Imegawanywa katika sehemu tatu, ya kwanza, rekodi ya sauti ambayo nimechukua msimbo kutoka geeksforgeeks, kwa sababu sijui maduka hayo ya vitabu. Ya pili, ubadilishaji wa sauti kuwa maandishi na Whisper na ya tatu, matibabu ya maandishi hayo na majibu katika RaspberryPi.

Katika mfano wa jaribio nitaingiliana tu na Led, na kuifanya iwake au iwashe, lakini tunaweza kutengeneza hati ili kuirekebisha kulingana na mahitaji yetu.

Ninajua kuwa hii ni Raspberry Pi 2 na itakuwa polepole zaidi kuliko Raspberry Pi 4, lakini kwa majaribio ni sawa.

Kabla ya kuifanya ifanye kazi, utahitaji kusakinisha zifuatazo

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

kanuni zote

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

Sijaweza kuipima kwa sababu sina microSD ya RaspberryPi, au spika ya USB ya kuunganisha, lakini mara tu ninapoijaribu ninasahihisha makosa ambayo ni rahisi kupenya.

Maelezo ya hatua kwa hatua ya kanuni

#!/usr/bin/env python3

Shebang kuwaambia kifaa ni lugha gani tumepanga na ni mkalimani gani atumie. Ingawa inaonekana kuwa ndogo, kutoiweka husababisha makosa mara nyingi.

maktaba zilizoingizwa

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

Whisper kufanya kazi na mfano

wakati, kwa sababu ninaitumia kudhibiti wakati inachukua kutekeleza hati, gpiozero kufanya kazi na pini za GPIO za Raspberry na kifaa cha sauti, scipy na wavio kurekodi sauti.

Kazi

Nimeunda kazi 4:

  • kuu ()
  • mwanga ()
  • kufumba ()
  • rekodi_sauti()

kuwasha () inatoa tu voltage kwa pini 17 ya raspberry ambapo tumeunganisha katika kesi hii LED ili kujaribu

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

blink() ni kama on() lakini hufanya blink inayoongozwa kwa kuiwasha na kuizima ndani ya kitanzi.

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

Na record_audio() tunarekodi faili ya sauti

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)

Kuu ndio kazi kuu, tambua kuwa kitu pekee tulicho nacho nje ya vitendaji ni wito kwa main() mwishoni mwa hati. Kwa njia hii wakati wa kuanza, itaingiza maktaba na kisha kupiga simu ya kazi.

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)

Tunahifadhi muda ambao tunaanza kutekeleza kitendakazi kisha tunaita kipengele cha kukokotoa sauti ambacho kitarekodi maagizo yetu katika faili ya .wav, .mp3, n.k. ambayo tutabadilisha baadaye kuwa maandishi.

    inicio = time.time()
    record_audio ()

  

Mara tu tukiwa na sauti, whisper itaitwa na tutaiambia mfano tunataka kutumia, zipo 5, na tutatumia ndogo, ingawa sio sahihi zaidi kwa sababu ni ya haraka zaidi na sauti itakuwa rahisi, maneno 3 au 4 tu.

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

  

Kwa hili tuna sauti iliyogeuzwa kuwa maandishi na kuhifadhiwa kwa kutofautiana. Hebu tuirekebishe kidogo.

Tunabadilisha matokeo kuwa orodha yenye kila neno la sauti

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

  

Na kila kitu kiko tayari kuingiliana na kifaa chetu. Sasa tunapaswa tu kuunda hali tunayotaka.

Ikiwa sauti ina neno X, fanya Y. Kama tunavyo maneno katika orodha, ni rahisi sana kuongeza masharti

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

  

Mstari

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


  

Ninaitumia kubadilisha maneno katika sauti kuwa herufi ndogo na kuondoa koma na vipindi. Na kwa njia hii epuka makosa katika kulinganisha

Katika kila moja ikiwa sharti la kuwa na neno lolote kati ya tulilolichagua limefikiwa, inaita kazi ambayo itafanya tunavyotaka.

Hapa ndipo tunapoiambia iwashe PIN ambayo itawasha LED au kuifanya iwashe. Ama endesha msimbo fulani, au zima kompyuta.

Haya yote ni mawazo ya msingi. Kuanzia hapa unaweza kuendeleza mradi na kuuboresha unavyotaka. Kila mtu anaweza kupata matumizi tofauti kwa ajili yake.

Mambo tunaweza kufanya na montage hii

Haya ni mawazo ambayo huja kwangu kuchukua fursa ya montage hii. Mara tu kiunzi kikiwa na silaha, tunaweza kuitumia kuamilisha kila kitu kinachokuja akilini kwa sauti, tunaweza kuwezesha upeanaji unaowasha injini au tunaweza kuzindua hati inayotekeleza hati, barua pepe au chochote.

Kunong'ona ni nini

Whisper ni modeli ya utambuzi wa vol, inafanya kazi katika lugha nyingi na idadi kubwa ya lugha na inaruhusu tafsiri kwa Kiingereza. Ni kile tunachojua kama zana ya kubadilisha maandishi hadi sauti, lakini hiki ni Chanzo Huria, kilichotolewa na timu ya OpenAI, waundaji wa Usambazaji Imara.

Acha maoni