Whisper を使用した PC および RaspberryPi での音声制御

PCとラズベリーパイの音声制御

プロジェクトのアイデアは Voice-to-text Whisper モデルを使用して、PC または Raspberry Pi を介して対話するための音声指示を与える.

Whisper を使用して書き起こされ、テキストに変換され、解析されて、プログラムの実行から RaspberryPi ピンへの電圧の印加まで、適切な命令が実行されます。

古い Raspberry Pi 2、マイクロ USB を使用し、最近 OpenAI によってリリースされた Voice-to-Text モデルを使用します。 ウィスパー. 記事の最後にあなたが見ることができます もう少し囁く.

すべてプログラムされている Python .

このビデオでは、音声で PC を制御する方法のデモンストレーションを残します。

取り付け

PCで使用するには、マイクだけが必要です。

RaspberryPiに取り付ける場合は、ジャックが出力専用なのでUSBマイクが必要です。

必要:

ツールの一般的な目的は音声識別です。 他のデバイスの操作に統合することは非常に便利だと思います。

  • Micro-USB
  • Raspberry PI とオペレーティング システム (Raspbian pro の例)
  • 電子機器 (LED、ワイヤ、480 オームの抵抗器、ブレッドボード)

LED をピン 17 に接続します。これは、このエクスペリエンスのためにアクティブ化および非アクティブ化するピンです。

コード開発

それは XNUMX つの部分に分かれています。XNUMX つ目は、コードを取得した音声録音です。 おたく、私はそれらの書店を知らないので。 XNUMX つ目は Whisper を使用した音声のテキストへの変換、XNUMX つ目はそのテキストの処理と RaspberryPi での応答です。

テストの例では、Led を操作して点灯または点滅させるだけですが、必要に応じて調整するスクリプトを開発することもできます。

これが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 は Raspberry とサウンドデバイスの GPIO ピンを操作し、scipy と wavio はオーディオを録音します

機能

私は4つの関数を作成しました:

  • メイン()
  • ライト ()
  • 瞬く ()
  • レコードオーディオ()

() をオンにすると、この場合はテストする LED を接続したラズベリーのピン 17 に電圧が与えられます。

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

blink() は on() に似ていますが、ループ内でオンとオフを切り替えて LED を点滅させます。

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 ()

  

音声を取得すると、whisper が呼び出され、使用したいモデルを伝えます。使用可能なモデルは 5 つあります。tiny を使用しますが、最も高速で音声が単純であるため、最も不正確ですが、tiny を使用します。たった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()


  

音声の単語を小文字に変換し、コンマとピリオドを削除するために使用します。 このようにして、比較のエラーを回避します

それぞれの if で、選択した単語のいずれかを持つという条件が満たされた場合、必要なことを行う関数を呼び出します。

ここで、LED を点灯または点滅させる PIN を有効にするように指示します。 コードを実行するか、コンピューターをシャットダウンします。

これはすべて基本的な考え方です。 ここから、プロジェクトを開発し、必要に応じて改善できます。 一人一人がそれの異なる用途を見つけることができます。

このモンタージュでできること

これらは、このモンタージュを利用するために私が思いついたアイデアです。 スケルトンが武装したら、それを使って頭に浮かぶすべてのものを音声で起動したり、モーターを始動するリレーを起動したり、スクリプトや電子メールなどを実行するスクリプトを起動したりできます。

ささやきとは

Whisper は vol 認識モデルであり、多数の言語を含む多言語で動作し、英語への翻訳が可能です。 これは、Dall-e の作成者である OpenAI チームによってリリースされた、テキストから音声へのツールとして知られているものです。

あなたが私たちのように落ち着きのない人で、プロジェクトの維持と改善に協力したい場合は、寄付をすることができます. すべてのお金は、実験やチュートリアルを行うための本や資料を購入するために使用されます

コメントを残します