見出し画像

Whisper-V3-Large-Turbo-MLXを試す

Whisper-V3-Large-Turboが速いというので試してみた。
なんか雑にモデルだけ置いてあったのでMacでリアルタイムに音声認識するようにした。

ただし、リアルタイムと言っても、本当の意味でのリアルタイムではない。
音声を収録→認識するので認識してる間の音声は取りこぼしてしまう。

これを解決するにはマルチスレッディングにしたりしないといけないんだけど、僕が欲しいのはそこまでのものではなかったのでとりあえずこれでいいことにする。

import pyaudio
import numpy as np
import mlx_whisper

# 音声キャプチャの設定
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024*2  # 5秒間の音声をキャプチャ

# PyAudioの初期化
audio = pyaudio.PyAudio()

# ストリームの開始
stream = audio.open(format=FORMAT,
                    channels=CHANNELS,
                    rate=RATE,
                    input=True,
                    frames_per_buffer=CHUNK)

try:
    buffer=[]
    while True:
        # 音声データを取得
        try:
            data = stream.read(CHUNK, exception_on_overflow=False)
            data = np.frombuffer(data, dtype=np.int16)/32768.0
            buffer.append(data)

            if len(buffer)>30:
                data = np.array(buffer)
                # NumPy配列に変換
                audio_data = data.reshape(data.shape[0]*data.shape[1])
                print("認識中")

                # 音声データを転写
                result = mlx_whisper.transcribe(audio_data,language="ja",
                                                path_or_hf_repo="mlx-community/whisper-large-v3-turbo")
                print(result['text'])
                buffer=[]
                print("音声データ収集中")
        except Exception as e:
            print(e)
            pass



except KeyboardInterrupt:
    print("音声認識を終了します。")

finally:
    # ストリームの停止と終了
    stream.stop_stream()
    stream.close()
    audio.terminate()

実際に実行すると、MacBook Air M1で2秒くらいで認識される。M2ならもっと速いだろう。

 python mlxwhis.py
認識中
Fetching 4 files: 100%|███████████████████████████| 4/4 [00:00<00:00, 62601.55it/s]
おい
Transcription took 3.36 seconds
音声データ収集中
認識中
チキンカレーください
Transcription took 1.77 seconds
音声データ収集中
認識中
なんで終わられてるの?ごめん、ごめんじゃないよ
Transcription took 1.89 seconds
音声データ収集中

これ結構面白いなー