Pıçıltı ilə PC və RaspberryPi-də səslə idarəetmə

pc və moruq pi-də səs nəzarəti

Layihənin ideyası budur Səsdən mətnə ​​Pıçıltı modelindən istifadə edərək kompüterimiz və ya Raspberry Pi vasitəsilə qarşılıqlı əlaqə yaratmaq üçün səsli göstərişlər verin.

Pıçıltı ilə transkripsiya ediləcək, mətnə ​​çevriləcək və sonra proqramı icra etməkdən RaspberryPi pinlərinə gərginlik verməyə qədər olan müvafiq əmri yerinə yetirmək üçün təhlil ediləcək bir əmr verəcəyik.

Mən köhnə Raspberry Pi 2, mikro USB istifadə edəcəyəm və bu yaxınlarda OpenAI tərəfindən buraxılmış Səsdən mətnə ​​modeldən istifadə edəcəyəm, pıçıltı. Məqalənin sonunda görə bilərsiniz bir az daha pıçıldamaq.

hamısı proqramlaşdırılıb Python.

Mən sizə bu videoda kompüteri səslə idarə etməyin necə işlədiyini nümayiş etdirirəm.

Məclis

Onu PC ilə istifadə etmək üçün bizə yalnız mikrofon lazımdır.

Əgər siz onu RaspberryPi-yə quraşdırmaq niyyətindəsinizsə, sizə USB mikrofon lazımdır, çünki onun olan jak yalnız çıxış üçündür.

Ehtiyac:

Alətin ümumi məqsədi səs identifikasiyası olduğundan. Mən onu digər cihazların işinə inteqrasiya etməyi çox faydalı hesab edirəm.

  • Mikro USB
  • Əməliyyat sistemi ilə Raspberry PI (Raspbian pro nümunəsi)
  • Elektronika (LED, naqillər, 480 ohm rezistor və çörək lövhəsi)

LED-i bu təcrübə üçün aktivləşdirəcəyimiz və söndürəcəyimiz pin 17-yə bağlayırıq.

kodun inkişafı

Üç hissəyə bölünür, birincisi, kodunu götürdüyüm səs yazısı geeksforgeeks, çünki mən o kitab mağazalarını tanımıram. İkincisi, Whisper ilə audionun mətnə ​​çevrilməsi və üçüncüsü, RaspberryPi-də həmin mətnin işlənməsi və cavabı

Test nümunəsində mən yalnız Led ilə əlaqə quracağam, onu işıqlandıra və ya yanıb-sönməyə hazırlayıram, lakin biz onu ehtiyaclarımıza uyğunlaşdırmaq üçün skript hazırlaya bilərik.

Bilirəm ki, bu Raspberry Pi 2-dir və o, Raspberry Pi 4-dən çox yavaş olacaq, lakin sınaqdan keçirmək üçün yaxşıdır.

Onu işə salmadan əvvəl aşağıdakıları quraşdırmalısınız

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

bütün 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 üçün microSD və ya qoşulmaq üçün USB dinamik olmadığına görə onu sınaqdan keçirə bilmədim, lakin cəhd edən kimi bəzi xətanı düzəldirəm ki, asanlıqla daxil olur.

Kodun addım-addım izahı

#!/usr/bin/env python3

Shebang cihaza hansı dildə proqramlaşdırdığımızı və hansı tərcüməçidən istifadə edəcəyimizi bildirir. Önəmsiz görünsə də, qoymamaq bir çox hallarda səhvlərə səbəb olur.

idxal olunan kitabxanalar

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

Modellə işləmək üçün pıçıldayın

vaxt, çünki mən ondan skriptin icrası üçün lazım olan vaxta nəzarət etmək üçün istifadə edirəm, gpiozero Raspberry və səs cihazının GPIO pinləri ilə işləmək üçün, audio yazmaq üçün scipy və wavio

Funksiyaları

Mən 4 funksiya yaratdım:

  • əsas ()
  • işıq ()
  • göz qırpmaq ()
  • rekord_audio()

yandırın () sadəcə olaraq test etmək üçün LED-i bağladığımız moruqun 17-ci pininə gərginlik verir.

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

blink() on() kimidir, lakin onu dövrə ərzində yandırıb-söndürməklə LED-in yanıb-sönməsinə səbəb olur.

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

record_audio() ilə biz audio faylı qeyd edirik

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 əsas funksiyadır, diqqət yetirin ki, funksiyalardan kənarda olan yeganə şey skriptin sonunda main() funksiyasına zəng etməkdir. Bu şəkildə başlanğıcda o, kitabxanaları idxal edəcək və sonra funksiya çağırışı edəcək.

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)

Biz funksiyanı yerinə yetirməyə başladığımız vaxta qənaət edirik və sonra təlimatımızı mətnə ​​çevirəcəyimiz .wav, .mp3 və s. faylda qeyd edəcək səs yazma funksiyasını çağırırıq.

    inicio = time.time()
    record_audio ()

  

Səs bizdə olduqda, pıçıltı səslənəcək və biz ona istifadə etmək istədiyimiz modeli söyləyəcəyik, 5 ədəd mövcuddur və biz kiçik istifadə edəcəyik, baxmayaraq ki, bu, ən qeyri-müəyyəndir, çünki bu, ən sürətli və səs sadə olacaq, cəmi 3 və ya 4 söz.

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

  

Bununla biz audionu mətnə ​​çevirdik və dəyişəndə ​​saxladıq. Gəlin onu bir az dəyişdirək.

Nəticəni səsin hər bir sözü ilə siyahıya çeviririk

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

  

Və hər şey cihazımızla qarşılıqlı əlaqəyə hazırdır. İndi sadəcə istədiyimiz şəraiti yaratmalıyıq.

Audioda X sözü varsa, Y edin. Siyahıda sözlər olduğu üçün şərtlər əlavə etmək çox asandır

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

  

Xətt

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


  

Mən onu audiodakı sözləri kiçik hərflərə çevirmək və vergül və nöqtələri silmək üçün istifadə edirəm. Və bu yolla müqayisələrdə səhvlərdən qaçın

Hər birində seçdiyimiz sözlərdən hər hansı birinə sahib olmaq şərti yerinə yetirilərsə, bu, istədiyimizi edəcək bir funksiya çağırır,

Burada biz ona LED-i yandıracaq və ya onun yanıb-sönməsinə səbəb olacaq PİN kodu aktivləşdirməyi söyləyirik. Ya bir neçə kodu işlədin, ya da kompüteri söndürün.

Bütün bunlar əsas ideyadır. Buradan siz layihəni inkişaf etdirə və istədiyiniz kimi təkmilləşdirə bilərsiniz. Hər kəs bunun üçün fərqli istifadə tapa bilər.

Bu montajla edə biləcəyimiz şeylər

Bu montajdan faydalanmaq üçün mənə gələn fikirlərdir. Skelet silahlandıqdan sonra onu səslə ağlımıza gələn hər şeyi aktivləşdirmək üçün istifadə edə bilərik, motoru işə salan releyi aktivləşdirə bilərik və ya bir skript, e-poçt və ya hər hansı bir şeyi yerinə yetirən bir skripti işə sala bilərik.

Pıçıltı nədir

Whisper səs tanıma modelidir, çoxlu dildə çoxdildə işləyir və ingilis dilinə tərcümə etməyə imkan verir. Bu, mətndən səsə alət kimi bildiyimiz şeydir, lakin bu, Stable Diffusion yaradıcıları olan OpenAI komandası tərəfindən buraxılan Açıq Mənbədir.

Şərh yaz