実現したいこと
ウェブ会議で他者が喋った内容をリアルタイムで文字起こししたいです。
前提
プログラミング初学者です。
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
