Kontrol suara di PC dan RaspberryPi dengan Whisper

kontrol suara di pc dan raspberry pi

Ide dari proyek ini adalah berikan instruksi suara untuk berinteraksi melalui PC kami atau Raspberry Pi kami menggunakan model Bisikan Suara-ke-teks.

Kami akan memberikan perintah yang akan ditranskripsi, diubah menjadi teks, dengan Whisper dan kemudian dianalisis untuk mengeksekusi perintah yang sesuai, yang dapat dari menjalankan program hingga memberi tegangan ke pin RaspberryPi.

Saya akan menggunakan Raspberry Pi 2 lama, micro USB dan saya akan menggunakan model Voice-to-text yang baru-baru ini dirilis oleh OpenAI, Berbisik. Di akhir artikel Anda dapat melihat sedikit lagi berbisik.

semua diprogram dalam Ular sanca.

Saya meninggalkan Anda demonstrasi cara kerjanya dalam video ini, mengendalikan PC dengan suara.

Mounting

Untuk menggunakannya dengan PC, kita hanya membutuhkan mikrofon.

Jika Anda akan memasangnya di RaspberryPi, Anda memerlukan mikrofon USB, karena jack yang dimilikinya hanya untuk output.

Perlu:

Sebagai tujuan umum dari alat ini adalah identifikasi suara. Saya merasa sangat berguna untuk mengintegrasikannya ke dalam pengoperasian perangkat lain.

  • USB mikro
  • Raspberry PI dengan sistem operasi (contoh Raspbian pro)
  • Elektronik (LED, kabel, resistor 480 ohm, dan papan tempat memotong roti)

Kami menghubungkan LED ke pin 17, yang akan kami aktifkan dan nonaktifkan untuk pengalaman ini.

pengembangan kode

Ini dibagi menjadi tiga bagian, yang pertama, rekaman audio yang kodenya saya ambil geeksforgeeks, karena saya tidak tahu toko buku itu. Yang kedua, konversi audio ke teks dengan Whisper dan yang ketiga, perawatan teks dan respons itu di RaspberryPi

Dalam contoh pengujian saya hanya akan berinteraksi dengan Led, membuatnya menyala atau berkedip, tetapi kita dapat mengembangkan skrip untuk menyesuaikannya dengan kebutuhan kita.

Saya sadar bahwa ini adalah Raspberry Pi 2 dan akan jauh lebih lambat daripada Raspberry Pi 4, tetapi untuk pengujian tidak masalah.

Sebelum Anda dapat membuatnya berfungsi, Anda harus menginstal yang berikut ini:

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

semua kode

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

Saya belum dapat mengujinya karena saya tidak memiliki microSD untuk RaspberryPi, atau speaker USB untuk terhubung, tetapi segera setelah saya mencobanya, saya memperbaiki beberapa kesalahan yang mudah tergelincir.

Penjelasan langkah demi langkah tentang kode

#!/usr/bin/env python3

Shebang untuk memberi tahu perangkat bahasa apa yang telah kami programkan dan penerjemah apa yang digunakan. Meski terlihat sepele, namun tidak memasangnya menyebabkan kesalahan dalam banyak kesempatan.

perpustakaan yang diimpor

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

Berbisik untuk bekerja dengan model

waktu, karena saya menggunakannya untuk mengontrol waktu yang diperlukan untuk mengeksekusi skrip, gpiozero untuk bekerja dengan pin GPIO dari Raspberry dan perangkat suara, scipy dan wavio untuk merekam audio

Fungsi

Saya telah membuat 4 fungsi:

  • utama ()
  • lampu ()
  • berkedip ()
  • suara rekaman()

nyalakan () cukup berikan tegangan ke pin 17 raspberry tempat kami telah terhubung dalam hal ini LED untuk diuji

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

blink() seperti on() tetapi membuat led berkedip dengan menyalakan dan mematikannya dalam satu lingkaran.

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

Dengan record_audio() kami merekam file 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 adalah fungsi utama, perhatikan bahwa satu-satunya hal yang kita miliki di luar fungsi adalah panggilan ke main() di akhir skrip. Dengan cara ini saat startup, itu akan mengimpor perpustakaan dan kemudian membuat panggilan fungsi.

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)

Kami menghemat waktu di mana kami mulai menjalankan fungsi dan kemudian kami memanggil fungsi rekam audio yang akan merekam instruksi kami dalam file .wav, .mp3, dll. yang nantinya akan kami konversi ke teks

    inicio = time.time()
    record_audio ()

  

Setelah kita memiliki audio, bisikan akan dipanggil dan kita memberitahu model yang ingin kita gunakan, ada 5 tersedia, dan kita akan menggunakan kecil, meskipun itu yang paling tidak tepat karena tercepat dan audio akan sederhana, hanya 3 atau 4 kata.

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

  

Dengan ini kami memiliki audio yang dikonversi ke teks dan disimpan dalam variabel. Mari kita modifikasi sedikit.

Kami mengonversi hasil menjadi daftar dengan masing-masing kata dari audio

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

  

Dan semuanya siap untuk berinteraksi dengan perangkat kami. Sekarang kita tinggal membuat kondisi yang kita inginkan.

Jika audio memiliki kata X, lakukan Y. Karena kami memiliki kata-kata dalam daftar, sangat mudah untuk menambahkan kondisi

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

  

Line

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


  

Saya menggunakannya untuk mengubah kata-kata dalam audio menjadi huruf kecil dan menghapus koma dan titik. Dan dengan cara ini menghindari kesalahan dalam perbandingan

Di masing-masing jika jika kondisi memiliki salah satu kata yang telah kita pilih terpenuhi, ia memanggil fungsi yang akan melakukan apa yang kita inginkan,

Disini kita suruh aktifkan PIN yang akan menyalakan LED atau membuatnya berkedip. Jalankan beberapa kode, atau matikan komputer.

Semua ini adalah ide dasar. Dari sini Anda dapat mengembangkan proyek dan meningkatkannya sesuai keinginan. Setiap orang dapat menemukan kegunaan yang berbeda untuk itu.

Hal-hal yang dapat kita lakukan dengan montase ini

Ini adalah ide yang datang kepada saya untuk memanfaatkan montase ini. Setelah kerangka dipersenjatai, kita dapat menggunakannya untuk mengaktifkan semua yang terlintas dalam pikiran melalui suara, kita dapat mengaktifkan relai yang menghidupkan motor atau kita dapat meluncurkan skrip yang mengeksekusi skrip, email, atau apa pun.

Apa itu bisikan?

Whisper adalah model pengenalan vol, bekerja dalam multibahasa dengan sejumlah besar bahasa dan memungkinkan terjemahan ke dalam bahasa Inggris. Inilah yang kita kenal sebagai alat text-to-voice, dirilis oleh tim OpenAI, pencipta Dall-e.

Jika Anda adalah orang yang gelisah seperti kami dan ingin berkolaborasi dalam pemeliharaan dan peningkatan proyek, Anda dapat memberikan donasi. Semua uang akan digunakan untuk membeli buku dan bahan untuk bereksperimen dan melakukan tutorial

Tinggalkan komentar