Pythonスキルの習得

Python & Whisper_mic リアルタイムで音声文字起こし – ストリーミング処理対応 –

Python & Whisper_mic リアルタイムで音声文字起こし - ストリーミング処理対応 -

こんにちは、Zero-Cheeseです。

この記事では、

  • ローカル環境で(サーバ、クラウド環境では使用せず)、
  • PythonWhisper_micを使用して、
  • リアルタイム(ストリーミング方式)で、音声から文字起こしを行う方法

解説しています。

対象読者:

  • Pythonを、基本レベルで扱える方(入門書を一冊程度理解している方)
  • リアルタイムで、音声を文字に変換するシステムに、興味がある方

whisper_micとは?

whisper_micは、

  • Whisperを利用して、マイクの音声をリアルタイムで、テキスト化する

パッケージです。

このツールは、言語の自動認識機能を備えていますが、日本語を韓国語に誤認するケースが見られます。

そこで本記事では、この問題を解消し、さらにPythonから実行可能なコードを、紹介致します。

whisper_micのライセンス

whisper_micは、MITライセンス下で、利用可能です。

これは、商用利用、改変、再配布、有料販売など、幅広い用途で、利用可能です。

(ただし、「著作権表示」と「MITライセンスの全文」の記載が、必要となります。)

環境構築

whisper_micは、pipコマンドを使用して、簡単にインストールできます。

pip install whisper-mic

リアルタイム文字起こし方法

whisper_mic コードの変更と呼び出し

whisper_mic コードの変更部分

音声言語が「英語」以外の場合、「日本語」に指定するようコードを変更します。

具体的には、whisper_mic/whisper_mic/whisper_mic.pyファイルの、約100行目にあるtranscribe( ) メソッドを、下記のように変更します。

def transcribe(self,data=None, realtime: bool = False) -> None:
        # 他のコード
        if self.english:
            result = self.audio_model.transcribe(audio_data,language='english')
        else:
            result = self.audio_model.transcribe(audio_data,language='japanese')
# コードは続く・・・

10行目が変更部分です。 language引数に、「japanese」を指定しています。

whisper_micの呼出し

whisper_micを呼出すコードは、次の通りです。

Pythonコードのファイル名は、任意で大丈夫です。

from whisper_mic.whisper_mic import WhisperMic

mic = WhisperMic(model='large-v2', verbose=True)
mic.listen_loop()

model引数に指定する「モデル」は、下記の表をご参照下さい。

精度が高いモデルほど、ファイル容量が大きく、処理も重くなります。

モデル名パラメータ量英語専用
モデル名
多言語
モデル名
必要な
VRAM
相対速度
tiny39 Mtiny.entiny〜 1 GB〜 32x
base74 Mbase.enbase〜 1 GB〜 16x
small244 Msmall.ensmall〜 2 GB〜 6x
medium769 Mmedium.enmedium〜 5 GB〜 2x
large1550 M無しlarge〜 10 GB1x
large-v21550 M無しlarge-v2(〜 10 GB)?(1x)?
※ 多言語モデルは、日本語もサポートしています
※ 相対速度とは、「largeモデル」を基準の 1 とした際の、処理速度の相対指標です

※ large-v2モデルは、largeモデルに対し、2.5倍のエポック数で追加学習され、性能が向上(リンク先論文のP4参照

実行結果

本コードを実行すると、以下のように、JSONが逐次表示されます。
(わかりやすさのため、1回目と2回目の表示内容に改行を挿入していますが、実際は改行が入りません。)

{'text': 'やる!', 'segments': [{'id': 0, 'seek': 0, 'start': 0.0, 'end': 2.0, 'text': 'やる!', 'tokens': [50364, 7355, 4895, 0, 50464], 'temperature': 0.0, 'avg_logprob': -0.6988972822825114, 'compression_ratio': 0.4666666666666667, 'no_speech_prob': 0.14680470526218414}], 'language': 'japanese'}

{'text': 'あるわぁ、筆圧えぇー、筆圧感知あるんだこれ', 'segments': [{'id': 0, 'seek': 0, 'start': 0.0, 'end': 2.0, 'text': 'あるわぁ、筆圧', 'tokens': [50364, 24719, 9206, 11951, 1231, 7973, 228, 2523, 100, 50464], 'temperature': 0.0, 'avg_logprob': -0.3888755211463341, 'compression_ratio': 1.0161290322580645, 'no_speech_prob': 0.06986737996339798}, {'id': 1, 'seek': 0, 'start': 2.0, 'end': 4.0, 'text': 'えぇー、筆圧感知あるんだこれ', 'tokens': [50464, 6474, 20861, 3384, 1231, 7973, 228, 2523, 100, 9709, 6498, 24719, 26983, 9329, 50564], 'temperature': 0.0, 'avg_logprob': -0.3888755211463341, 'compression_ratio': 1.0161290322580645, 'no_speech_prob': 0.06986737996339798}], 'language': 'japanese'}

雑談

以前、バーチャルな「友達」作りを目的として、次のような記事を作成しました。

友達がいない?大丈夫! AIがあなたのパートナーになる! PythonとGPT-2で自作対話パートナーを作る
友達がいない?大丈夫! AIがあなたのパートナーになる! PythonとGPT-2で自作対話パートナーを作る友達がいないあなたへの解決策を提供します。本ブログでは、PythonとGPT-2を使用して、自分だけのAI対話パートナーを作る方法をステップバイステップで解説しています。...

「Whisper + GPT-4」を利用すれば、かなり自然な会話ができる『友達』を実現できそうです。

もしChatGPTをAPIなしで動かすことができれば、API利用料を気にせず、ローカル環境で思う存分楽しめそうです。(ただし、GPUの電気代がすごいことになりそうですね…)

ただ、現状のPCスペックを考えると、もう少し未来の話になりそうです。

今後の人類の進化に、期待です。

本記事も、最後までのお付き合い頂き、ありがとうございました!

それでは、またお会いしましょう!