質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

581閲覧

VOSKによるスピーカーからの音声出力のオフライン文字起こしについて

yodagabe

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2023/10/05 05:16

実現したいこと

ウェブ会議で他者が喋った内容をリアルタイムで文字起こししたいです。

前提

プログラミング初学者です。
PC環境はwindows11, anacondaとVScodeを使用しており、VScodeのターミナルで実行しております。
下記のサイトの情報を参考に、pythonコードを作成、実行しました。
https://qiita.com/3998/items/a18b50aaf58e0176e6a5

発生している問題・エラーメッセージ

ターミナル上にエラーメッセージは出ず、printで返ってくるはずの「Type Ctrl+C to stop」という文字も出てこない状態で、プログラムが終了する状態です。

該当のソースコード

python

1import copy 2import multiprocessing as mp 3import soundcard as sc 4import json 5import numpy as np 6import vosk 7import sounddevice as sd 8 9def capture_audio_output(audio_queue: mp.Queue, 10 capture_sec: float, 11 sample_rate: int) -> None: 12 13 num_frame: int = int(sample_rate * capture_sec) 14 while True: 15 audio = sc.get_microphone(include_loopback=True, id=str(sc.default_speaker().name)) \ 16 .record(numframes=num_frame, samplerate=sample_rate, blocksize=sample_rate) 17 audio_queue.put(copy.copy(audio[:, 0])) 18 19def speech_to_text(audio_queue: mp.Queue, 20 sample_rate: int) -> None: 21 NO_LOG: int = -1 22 MODEL_PATH = 'speech2text' 23 24 vosk.SetLogLevel(NO_LOG) 25 26 model: vosk.Model = vosk.Model(model_path=MODEL_PATH) 27 recognizer = vosk.KaldiRecognizer(model, sample_rate) 28 29 print("Recognizer is ready") 30 print("Output sound from a speaker or a headphone") 31 print("#" * 40) 32 33 while True: 34 audio = audio_queue.get() 35 audio = map(lambda x: (x+1)/2, audio) 36 audio = np.fromiter(audio, np.float16) 37 audio = audio.tobytes() 38 39 if recognizer.AcceptWaveform(audio): 40 result: json = json.loads(recognizer.Result()) 41 text = result["text"].replace(" ", "") 42 if text != "": 43 print(f"Recognized text: {text}") 44 print(text) 45 else: 46 print("Recognition failed") 47 48def main(): 49 CAPTURE_SEC: int = 0.4 50 audio_queue: mp.Queue = mp.Queue() 51 sample_rate: int = int(sd.query_devices(kind="output")["default_samplerate"]) 52 stt_proc: mp.Process = mp.Process(target=speech_to_text, 53 args=(audio_queue, sample_rate)) 54 print("Type Ctrl+C to stop") 55 stt_proc.start() 56 57 try: 58 capture_audio_output(audio_queue=audio_queue, capture_sec=CAPTURE_SEC, sample_rate=sample_rate) 59 stt_proc.join() 60 except KeyboardInterrupt: 61 stt_proc.terminate() 62 63 print("\nDone")

試したこと

初心者につきあまりたくさんのことは試せていません。。。
各ライブラリのバージョンチェック、スピーカーの動作チェック、sample_rateの変更(sample_rate = 44100としても変化なし)、CAPTURE_SEC(1~10まで変えても変化なし)、ChatGPTを使用してのコードの確認は行い、問題なさそうでした。

補足情報(FW/ツールのバージョンなど)

下記、ライブラリのバージョン情報です。
ca-certificates 2023.08.22 haa95532_0
certifi 2023.7.22 pypi_0 pypi
cffi 1.16.0 pypi_0 pypi
charset-normalizer 3.3.0 pypi_0 pypi
colorama 0.4.6 pypi_0 pypi
idna 3.4 pypi_0 pypi
numpy 1.24.4 pypi_0 pypi
openssl 1.1.1w h2bbff1b_0
pip 23.2.1 py38haa95532_0
pyaudio 0.2.11 pypi_0 pypi
pycparser 2.21 pypi_0 pypi
python 3.8.5 h5fd99cc_1
requests 2.31.0 pypi_0 pypi
setuptools 68.0.0 py38haa95532_0
soundcard 0.4.2 pypi_0 pypi
sounddevice 0.4.6 pypi_0 pypi
soundfile 0.12.1 pypi_0 pypi
speechrecognition 3.8.1 pypi_0 pypi
sqlite 3.41.2 h2bbff1b_0
srt 3.5.3 pypi_0 pypi
tqdm 4.66.1 pypi_0 pypi
urllib3 2.0.6 pypi_0 pypi
vc 14.2 h21ff451_1
vosk 0.3.45 pypi_0 pypi
vs2015_runtime 14.27.29016 h5e58377_2
websockets 11.0.3 pypi_0 pypi
wheel 0.41.2 py38haa95532_0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fiveHundred

2023/10/05 05:20

関数の定義のみで、main()を呼び出している箇所すらありませんが、意図した通りですか?
poto568

2023/10/05 05:48

他の物が足りているかどうか分かりませんが、上記コメントの通りmain呼んでませんね。 「参考にコードを作成」するまでもなく、記事のリンク先に丸ごとソースがありますから、 コピペなりダウンロードするなりして動作確認するところから始めると良いかもしれません。 https://github.com/tez3998/audio-output-to-text/blob/master/run.py
yodagabe

2023/10/05 06:14

コメント頂きありがとうございます。 ご指摘の通りでした。お恥ずかしい限りです。。。 コードの一番下に下記コードを追加したところ走り始めました。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー if __name__ == "__main__": main() ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー 実際文字起こしをさせると、精度が高くない状態でして、もしご存じでしたら、文字起こしの精度を向上させる方法の概要を教えていただけますと幸いです。
hoshi-takanori

2023/10/05 23:23

> 文字起こしの精度を向上させる方法 ですが、 https://qiita.com/3998/items/a18b50aaf58e0176e6a5 より、 > VOSKは無料で使えます。より精度の高いモデルを使いたい場合は、開発者に相談する必要があるようです。 だそうです。
guest

回答1

0

記事に、

ソースコード全体はGitHubに置いてあります。

と書いてあり、リンク先のGitHubに全ソースコードがありますので、それを使ってみてください。

投稿2023/10/05 06:41

TakaiY

総合スコア14245

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問