PC ve RaspberryPi'de Whisper ile ses kontrolü

pc ve ahududu pi üzerinde ses kontrolü

Projenin fikri Sesten metne Fısıltı modelini kullanarak bilgisayarımız veya Raspberry Pi'miz aracılığıyla etkileşim kurmak için sesli talimatlar verin.

Whisper ile yazıya geçirilecek, metne dönüştürülecek ve daha sonra bir programın yürütülmesinden RaspberryPi pinlerine voltaj verilmesine kadar uygun sırayı yürütmek için analiz edilecek bir emir vereceğiz.

Eski bir Raspberry Pi 2, bir mikro USB kullanacağım ve OpenAI tarafından yakın zamanda piyasaya sürülen Voice-to-text modelini kullanacağım, Fısıltı. Makalenin sonunda görebilirsiniz biraz daha fısıltı.

hepsi programlanmış Python.

Bilgisayarı sesle kontrol etmenin bu videoda nasıl çalıştığına dair bir gösteri bırakıyorum.

montaj

PC ile kullanmak için sadece bir mikrofona ihtiyacımız olacak.

Eğer RaspberryPi'ye takacaksanız, bir USB mikrofona ihtiyacınız olacaktır, çünkü içindeki jak sadece çıkış içindir.

İhtiyacımız var:

Aracın genel amacı sesli tanımlama olduğu için. Diğer cihazların işleyişine entegre etmeyi çok faydalı buluyorum.

  • mikro USB
  • İşletim sistemli Raspberry PI (Raspbian pro örneği)
  • Elektronik (LED, teller, 480 ohm direnç ve devre tahtası)

LED'i bu deneyim için etkinleştireceğimiz ve devre dışı bırakacağımız pin 17'ye bağlıyoruz.

kod geliştirme

İlki, kodunu aldığım ses kaydı olmak üzere üç bölüme ayrılmıştır. geeksforgeeks, çünkü o kitapçıları bilmiyorum. İkincisi, sesin Fısıltı ile metne dönüştürülmesi ve üçüncüsü, o metnin işlenmesi ve RaspberryPi'deki yanıt

Test örneğinde, yalnızca bir Led ile etkileşime girerek yanmasını veya yanıp sönmesini sağlayacağım, ancak komut dosyasını ihtiyaçlarımıza göre ayarlamak için geliştirebiliriz.

Bunun bir Raspberry Pi 2 olduğunun ve bir Raspberry Pi 4'ten çok daha yavaş olacağının farkındayım, ancak test için sorun değil.

Çalıştırmadan önce, aşağıdakileri yüklemeniz gerekecek

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

tüm kod

#!/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 için bir microSD kartım veya bağlanmak için bir USB hoparlörüm olmadığı için test edemedim, ancak denediğim anda kayması kolay olan bazı hataları düzeltiyorum.

Kodun adım adım açıklaması

#!/usr/bin/env python3

Cihaza hangi dilde programladığımızı ve hangi tercümanı kullanacağımızı söyleyen Shebang. Önemsiz görünse de, koymamak birçok durumda hatalara neden olur.

içe aktarılan kitaplıklar

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

Modelle çalışmak için fısıltı

çünkü onu betiğin yürütülmesi için geçen süreyi kontrol etmek için kullanıyorum, gpiozero Raspberry'nin GPIO pinleriyle ve ses cihazının GPIO pinleriyle çalışmak için, sesi kaydetmek için scipy ve wavio

fonksiyonlar

4 fonksiyon oluşturdum:

  • ana ()
  • ışık ()
  • göz kırpmak ()
  • ses kaydı()

açmak () sadece bu durumda test etmek için LED'i bağladığımız ahududu'nun pin 17'sine voltaj verir

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

yanıp sönme() on() gibidir ancak bir döngü içinde açıp kapatarak ledin yanıp sönmesini sağlar.

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

record_audio() ile ses dosyasını kaydederiz

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, ana işlevdir, dikkat edin, işlevlerin dışında sahip olduğumuz tek şey, betiğin sonundaki main() çağrısıdır. Bu şekilde başlangıçta, kitaplıkları içe aktaracak ve ardından işlev çağrısını yapacaktır.

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)

Fonksiyonu çalıştırmaya başladığımız zamanı kaydediyoruz ve ardından komutumuzu daha sonra metne çevireceğimiz bir .wav, .mp3 vb. dosyaya kaydedecek olan ses kaydı fonksiyonunu çağırıyoruz.

    inicio = time.time()
    record_audio ()

  

Sesi aldığımızda, fısıltı aranacak ve kullanmak istediğimiz modeli söyleyeceğiz, mevcut 5 tane var ve en kesin olmasa da minik kullanacağız çünkü en hızlısı ve ses basit olacak, sadece 3 veya 4 kelime.

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

  

Bununla sesi metne dönüştürdük ve bir değişkene kaydettik. Biraz değiştirelim.

Sonucu, sesin her bir kelimesini içeren bir listeye dönüştürüyoruz.

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

  

Ve her şey cihazımızla etkileşime girmeye hazır. Şimdi sadece istediğimiz koşulları yaratmamız gerekiyor.

Seste X kelimesi varsa Y yapın. Sözcükler listede olduğu için koşul eklemek çok kolay

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

  

Çizgi

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


  

Sesteki kelimeleri küçük harfe dönüştürmek ve virgülleri ve noktaları kaldırmak için kullanıyorum. Ve bu şekilde karşılaştırmalardaki hataları önleyin

Her birinde, seçtiğimiz kelimelerden herhangi birine sahip olma koşulu karşılanırsa, istediğimizi yapacak bir fonksiyon çağırır,

Burası, bir LED'i yakacak veya yanıp sönmesini sağlayacak bir PIN'i etkinleştirmesini söylediğimiz yer. Ya bir kod çalıştırın ya da bilgisayarı kapatın.

Bütün bunlar temel bir fikirdir. Buradan projeyi geliştirebilir ve istediğiniz gibi geliştirebilirsiniz. Her insan bunun için farklı bir kullanım bulabilir.

Bu montaj ile yapabileceklerimiz

Bunlar, bu montajdan yararlanmak için bana gelen fikirler. İskelet devreye girdiğinde, onu aklımıza gelen her şeyi sesle etkinleştirmek için kullanabiliriz, bir motoru çalıştıran bir röleyi etkinleştirebiliriz veya bir komut dosyasını, bir e-postayı veya herhangi bir şeyi yürüten bir komut dosyasını başlatabiliriz.

fısıltı nedir

Whisper bir cilt tanıma modelidir, çok sayıda dil ile çok dilde çalışır ve İngilizce'ye çeviriye izin verir. Dall-e'nin yaratıcıları olan OpenAI ekibi tarafından yayınlanan, metinden sese bir araç olarak bildiğimiz şeydir.

Siz de bizim gibi hareketli biriyseniz ve projenin bakım ve iyileştirilmesinde işbirliği yapmak istiyorsanız bağışta bulunabilirsiniz. Tüm para, deney yapmak ve öğreticiler yapmak için kitap ve materyal satın almaya gidecek

Yorum yapın