Kontrol ng boses sa PC at RaspberryPi gamit ang Whisper

voice control sa pc at raspberry pi

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 &amp;&amp; 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.

Kung ikaw ay isang taong hindi mapakali tulad namin at gustong makipagtulungan sa pagpapanatili at pagpapabuti ng proyekto, maaari kang magbigay ng donasyon. Mapupunta ang lahat ng pera para makabili ng mga libro at materyales para mag-eksperimento at gumawa ng mga tutorial

Mag-iwan ng komento