ДК және RaspberryPi жүйесінде Whisper көмегімен дауысты басқару

компьютерде және таңқурай pi-де дауысты басқару

Жобаның идеясы Дауысты мәтінге сыбырлау үлгісін пайдаланып компьютеріміз немесе Raspberry Pi арқылы өзара әрекеттесу үшін дауыстық нұсқаулар беріңіз..

Біз Whisper көмегімен транскрипцияланатын, мәтінге түрлендірілетін, содан кейін бағдарламаны орындаудан бастап RaspberryPi түйреуіштеріне кернеу беруге дейінгі тиісті тәртіпті орындау үшін талданатын тапсырыс береміз.

Мен ескі Raspberry Pi 2, микро USB қолданғым келеді және мен жақында OpenAI шығарған «Дауысты мәтінге» үлгісін қолданамын, Шыңырау. Мақаланың соңында сіз көре аласыз тағы біраз сыбырлаңыз.

барлығы бағдарламаланған Python.

Мен сізге осы бейнеде компьютерді дауыспен басқарудың қалай жұмыс істейтінін көрсетуді қалдырамын.

Ассамблея

Оны компьютермен пайдалану үшін бізге тек микрофон қажет.

Егер сіз оны RaspberryPi құрылғысына орнатқыңыз келсе, сізге USB микрофоны қажет болады, себебі оның ұясы тек шығаруға арналған.

Қажет:

Құралдың жалпы мақсаты дауысты анықтау болғандықтан. Мен оны басқа құрылғылардың жұмысына біріктіру өте пайдалы деп есептеймін.

  • Micro USB
  • Амалдық жүйесі бар Raspberry PI (Raspbian pro мысалы)
  • Электроника (жарық диоды, сымдар, 480 Ом резистор және нан тақтасы)

Біз жарық диодты 17 түйреуішке қосамыз, ол осы тәжірибе үшін іске қосылады және өшіріледі.

кодты әзірлеу

Ол үш бөлікке бөлінген, біріншісі, мен кодын алған аудиожазба geeksforgeeks, өйткені мен ол кітап дүкендерін білмеймін. Екіншіден, дыбысты Whisper көмегімен мәтінге түрлендіру, үшіншіден, RaspberryPi-де сол мәтінді өңдеу және жауап беру

Сынақ мысалында мен жарық диодымен ғана әрекеттесемін, оны жанып немесе жыпылықтайды, бірақ біз оны қажеттіліктерімізге сәйкес реттеу үшін сценарийді жасай аламыз.

Мен бұл Raspberry Pi 2 екенін және ол Raspberry Pi 4-ке қарағанда әлдеқайда баяу болатынын білемін, бірақ тестілеу үшін бұл жақсы.

Оны іске қосу үшін келесіні орнату керек

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

барлық код

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

Мен оны тексере алмадым, себебі менде RaspberryPi-ге арналған microSD немесе қосылатын USB динамигі жоқ, бірақ мен оны қолданып көрген бойда қатені түзетемін, ол оңай өтуге болады.

Кодтың қадамдық түсіндірмесі

#!/usr/bin/env python3

Shebang құрылғыға қандай тілде бағдарламалағанымызды және қандай аудармашыны пайдалану керектігін айтады. Бұл тривиальды болып көрінгенімен, оны қоймау көптеген жағдайларда қателерді тудырады.

импортталған кітапханалар

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

Үлгімен жұмыс істеу үшін сыбырлаңыз

уақыт, өйткені мен оны сценарийді орындауға кететін уақытты басқару үшін қолданамын, gpiozero таңқурайдың GPIO түйреуіштерімен және дыбыс құрылғысымен жұмыс істеу үшін, scipy және wavio дыбысты жазу үшін

Функциялар

Мен 4 функцияны жасадым:

  • негізгі ()
  • жарық ()
  • жыпылықтау ()
  • жазба_аудио()

қосыңыз () таңқурайдың 17 түйреуішіне кернеу береді, онда біз бұл жағдайда тексеру үшін жарықдиодты қостық.

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

blink() қосулы() сияқты, бірақ ол цикл ішінде қосу және өшіру арқылы жарық диодты жыпылықтайды.

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

record_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 - бұл негізгі функция, бізде функциялардан тыс жалғыз нәрсе - сценарийдің соңында main() шақыру екенін ескеріңіз. Осылайша іске қосу кезінде ол кітапханаларды импорттайды, содан кейін функцияны шақырады.

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)

Біз функцияны орындауға кірісетін уақытты үнемдейміз, содан кейін нұсқаулықты кейінірек мәтінге түрлендіретін .wav, .mp3, т.б. файлға жазатын дыбыс жазу функциясын шақырамыз.

    inicio = time.time()
    record_audio ()

  

Аудио бізде болғаннан кейін, сыбырлау шақырылады және біз оған қолданғымыз келетін үлгіні айтамыз, 5 қол жетімді және біз кішкентай қолданамыз, бірақ бұл ең дәл емес, себебі ол ең жылдам және дыбыс қарапайым болады, тек 3 немесе 4 сөз.

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

  

Осы арқылы біз дыбысты мәтінге түрлендіреміз және айнымалыға сақтаймыз. Оны аздап өзгертейік.

Біз нәтижені дыбыстың әрбір сөзі бар тізімге түрлендіреміз

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

  

Және бәрі біздің құрылғымен өзара әрекеттесуге дайын. Енді бізге өзіміз қалаған жағдайды жасау ғана қалды.

Егер дыбыста X сөзі болса, Y орындаңыз. Тізімде сөздер болғандықтан, шарттарды қосу өте оңай

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

  

Сызық

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


  

Мен оны дыбыстағы сөздерді кіші әріпке түрлендіру және үтір мен нүктелерді алып тастау үшін қолданамын. Осылайша салыстырулардағы қателіктерден аулақ болыңыз

Әрқайсысында, егер біз таңдаған сөздердің кез келгеніне ие болу шарты орындалса, ол біз қалаған нәрсені жасайтын функцияны шақырады,

Бұл жерде біз оған жарық диодты шамды жағатын немесе жыпылықтайтын PIN кодын белсендіруді айтамыз. Кейбір кодты іске қосыңыз немесе компьютерді өшіріңіз.

Мұның бәрі негізгі идея. Осы жерден сіз жобаны дамыта аласыз және оны қалағаныңызша жақсарта аласыз. Әр адам оны әртүрлі қолдануды таба алады.

Бұл монтажмен не істей аламыз

Бұл монтажды пайдалану үшін маған келетін идеялар. Қаңқа қаруланғаннан кейін біз оны дауыспен ойымызға келгеннің бәрін белсендіру үшін пайдалана аламыз, қозғалтқышты іске қосатын релені іске қоса аламыз немесе сценарийді, электрондық поштаны немесе кез келген нәрсені орындайтын сценарийді іске қоса аламыз.

Сыбыр дегеніміз не

Whisper - дыбысты тану моделі, көптеген тілдермен көп тілде жұмыс істейді және ағылшын тіліне аударуға мүмкіндік береді. Бұл Dall-e жасаушылары OpenAI командасы шығарған мәтіннен дауысқа арналған құрал ретінде білеміз.

Пікір қалдыру