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

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

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

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

whisperの音声認識について

chem_search
chem_search

総合スコア29

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1回答

0グッド

0クリップ

1402閲覧

投稿2022/10/17 14:53

編集2022/10/18 10:42

前提

Pythonの音声認識ライブラリ「Whisper」を試してみようと思ったのですが、
うまくいかず、質問させて頂きました。

実現したいこと

jupyter notebookのファイルと同じフォルダ内にある音声ファイルを、
whisperで読み込み、音声認識を行う。

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

FileNotFoundError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_4848/290471416.py in <module> 5 path = ".\\testsample.mp3" 6 ----> 7 result = model.transcribe(path, verbose=True, language='ja') 8 print(result["text"]) ~\anaconda3\envs\pip-env\lib\site-packages\whisper\transcribe.py in transcribe(model, audio, verbose, temperature, compression_ratio_threshold, logprob_threshold, no_speech_threshold, condition_on_previous_text, **decode_options) 82 decode_options["fp16"] = False 83 ---> 84 mel = log_mel_spectrogram(audio) 85 86 if decode_options.get("language", None) is None: ~\anaconda3\envs\pip-env\lib\site-packages\whisper\audio.py in log_mel_spectrogram(audio, n_mels) 109 if not torch.is_tensor(audio): 110 if isinstance(audio, str): --> 111 audio = load_audio(audio) 112 audio = torch.from_numpy(audio) 113 ~\anaconda3\envs\pip-env\lib\site-packages\whisper\audio.py in load_audio(file, sr) 42 ffmpeg.input(file, threads=0) 43 .output("-", format="s16le", acodec="pcm_s16le", ac=1, ar=sr) ---> 44 .run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True) 45 ) 46 except ffmpeg.Error as e: ~\anaconda3\envs\pip-env\lib\site-packages\ffmpeg\_run.py in run(stream_spec, cmd, capture_stdout, capture_stderr, input, quiet, overwrite_output) 318 pipe_stderr=capture_stderr, 319 quiet=quiet, --> 320 overwrite_output=overwrite_output, 321 ) 322 out, err = process.communicate(input) ~\anaconda3\envs\pip-env\lib\site-packages\ffmpeg\_run.py in run_async(stream_spec, cmd, pipe_stdin, pipe_stdout, pipe_stderr, quiet, overwrite_output) 283 stderr_stream = subprocess.PIPE if pipe_stderr or quiet else None 284 return subprocess.Popen( --> 285 args, stdin=stdin_stream, stdout=stdout_stream, stderr=stderr_stream 286 ) 287 ~\anaconda3\envs\pip-env\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text) 798 c2pread, c2pwrite, 799 errread, errwrite, --> 800 restore_signals, start_new_session) 801 except: 802 # Cleanup if the child failed starting. ~\anaconda3\envs\pip-env\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session) 1205 env, 1206 os.fspath(cwd) if cwd is not None else None, -> 1207 startupinfo) 1208 finally: 1209 # Child is launched. Close the parent's copy of those pipe FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

該当のソースコード

python

1import whisper 2 3model = whisper.load_model("large") 4 5path = "testsample.mp3" 6 7result = model.transcribe(path, verbose=True, language='ja') 8print(result["text"]) 9

試したこと

上記のソースコードを実行すると、
エラー「FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。」が出ます。

何かしらパスがおかしいのかと思い、読み込みたい音声ファイルがあるフォルダ内に
「aaa.csv」というファイルを作って、以下のことを試しました。

python

1import glob 2 3files = glob.glob("./*") 4print(files) 5#出力 ['.\\aaa.csv', '.\\testsample.mp3', '.\\whisper-test.ipynb'] 6

その結果、csvファイルも音声ファイルもちゃんと認識されており、
下記のコードは問題無く実行できました。

python

1import pandas as pd 2 3df=pd.read_csv(files[0])

また、該当のソースコード内のpathの部分をfiles[1]に変えても認識されませんでした。

なぜこのような現象が起こるのでしょうか?

試したこと2

jbpb0様に提案頂いた以下のコードの実行を試みたところ、
やはりエラーが出ました。

python

1import ffmpeg 2file = '音声ファイル名' 3sr = 16000 4out, _ = (ffmpeg.input(file, threads=0).output("-", format="s16le", acodec="pcm_s16le", ac=1, ar=sr).run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True)) 5

python

1FileNotFoundError Traceback (most recent call last) 2~\AppData\Local\Temp/ipykernel_13216/2098733105.py in <module> 3 2 file = 'testsample.mp3' 4 3 sr = 16000 5----> 4 out, _ = (ffmpeg.input(file, threads=0).output("-", format="s16le", acodec="pcm_s16le", ac=1, ar=sr).run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True)) 6 7~\anaconda3\envs\pip-env\lib\site-packages\ffmpeg\_run.py in run(stream_spec, cmd, capture_stdout, capture_stderr, input, quiet, overwrite_output) 8 318 pipe_stderr=capture_stderr, 9 319 quiet=quiet, 10--> 320 overwrite_output=overwrite_output, 11 321 ) 12 322 out, err = process.communicate(input) 13 14~\anaconda3\envs\pip-env\lib\site-packages\ffmpeg\_run.py in run_async(stream_spec, cmd, pipe_stdin, pipe_stdout, pipe_stderr, quiet, overwrite_output) 15 283 stderr_stream = subprocess.PIPE if pipe_stderr or quiet else None 16 284 return subprocess.Popen( 17--> 285 args, stdin=stdin_stream, stdout=stdout_stream, stderr=stderr_stream 18 286 ) 19 287 20 21~\anaconda3\envs\pip-env\lib\subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text) 22 798 c2pread, c2pwrite, 23 799 errread, errwrite, 24--> 800 restore_signals, start_new_session) 25 801 except: 26 802 # Cleanup if the child failed starting. 27 28~\anaconda3\envs\pip-env\lib\subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session) 29 1205 env, 30 1206 os.fspath(cwd) if cwd is not None else None, 31-> 1207 startupinfo) 32 1208 finally: 33 1209 # Child is launched. Close the parent's copy of those pipe 34 35FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。

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

python 3.7.11
whisper 1.0

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

qnoir

2022/10/17 15:06

「下記のコードは問題無く実行できました。」のコードの末尾で print(files[0]) を追加して実行したら .\\aaa.csv と表示されるはずです。 ならば、問題のコードでも、同様に「path = '.\\testsample.mp3'」としてみたらよいのではないでしょうか?
chem_search

2022/10/17 21:58

ご質問ありがとうございます。 質問の最後に書いたように、 path = files[1] や、質問内には書きませんでしたが、 path = '.\\testsample.mp3' としても同様のエラーが発生してしまいました。
jbpb0

2022/10/17 22:14

質問に記載のエラーメッセージよりも上に「Traceback」と書かれてたら、そこから下をできるだけ省略せずに質問に記載してください (ここに書くのではなく、質問を編集して追記する) ユーザー名等の個人情報は伏せ字でいいですが、それ以外はできるだけそのまま記載してください
chem_search

2022/10/17 22:21

>jbpb0様 大変失礼しました。また、アドバイスありがとうございます。 エラーメッセージを追記いたしました。
jbpb0

2022/10/18 10:29 編集

エラーメッセージを見ると、「ffmpeg」を「subprocess」で実行しようとしてるところでコケてるようです > FileNotFoundError: [WinError 2] 指定されたファイルが見つかりません。 の「指定されたファイル」が何のことなのか、調べた方がいいかも (「音声ファイル」ではないかも)
jbpb0

2022/10/18 11:51 編集

https://github.com/openai/whisper#setup の「Setup」に 「It also requires the command-line tool ffmpeg to be installed on your system」 と書かれてますが、それは大丈夫でしょうか? 【追記】 > ~\anaconda3\envs\pip-env\lib\site-packages\whisper\audio.py in load_audio(file, sr) 42 ffmpeg.input(file, threads=0) 43 .output("-", format="s16le", acodec="pcm_s16le", ac=1, ar=sr) ---> 44 .run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True) 45 ) https://github.com/openai/whisper/blob/main/whisper/audio.py の41行目あたりから引用した、下記を実行できますでしょうか? import ffmpeg file = '音声ファイル名' sr = 16000 out, _ = (ffmpeg.input(file, threads=0).output("-", format="s16le", acodec="pcm_s16le", ac=1, ar=sr).run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True)) 「out, _ = (ffmpeg.input(file, ...」は、長いけど一行です
jbpb0

2022/10/18 01:27

> jupyter notebookのファイルと同じフォルダ内にある音声ファイル jupyterで %ls を実行したら、その音声ファイルはそこにありますでしょうか? 質問文によると大丈夫だとは思いますが、念の為の確認です
jbpb0

2022/10/18 11:52 編集

google colabで、「/content」に音声ファイルを置いて、下記のコードを実行したら、エラー出ずに実行でき、音声ファイル中の日本語音声がテキスト化されて表示されました !pip install git+https://github.com/openai/whisper.git import sys sys.path.append("/content/whisper") import whisper model = whisper.load_model("large") path = "音声ファイル名" result = model.transcribe(path, verbose=True, language='ja') print(result["text"]) 音声ファイルを置いてる場所が正しいなら、質問のコードに誤りは無いと思います 質問者さんのpython実行環境に原因があるのではないですかね (パソコンにffmpeg「本体」が入ってないとか)
chem_search

2022/10/18 10:39

お返事が遅れて申し訳ありませんでした。 以下、回答いたします。 >%ls このマジックコマンドで、音声ファイルの存在は確認できています。 >ffmpegのライブラリ こちらは既にインストール済みです。 >下記のコードの実行 import ffmpeg file = '音声ファイル名' sr = 16000 out, _ = (ffmpeg.input(file, threads=0).output("-", format="s16le", acodec="pcm_s16le", ac=1, ar=sr).run(cmd=["ffmpeg", "-nostdin"], capture_stdout=True, capture_stderr=True)) こちらでも同様のエラーが出ます。 その内容については本文に追記します。
chem_search

2022/10/18 11:03

>jbpb0様 大変申し訳ありません、ffmpegをライブラリの一種だと勘違いしており、 別途インストールが必要であるということを分かっていませんでした。 ffmpegをインストールして再度実行したところ、 元のコードでうまく動かすことができました。 素人質問に丁寧にご回答くださり、本当にありがとうございました。

回答1

0

ベストアンサー

ffmpeg「本体」をインストールしてください

参考
Setup
It also requires the command-line tool ffmpeg to be installed on your system

投稿2022/10/18 11:50

jbpb0

総合スコア7521

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

chem_search

2022/10/18 12:24

丁寧に回答頂き、ありがとうございました! 初歩的な部分での勘違いが原因でしたが、解決までお付き合いくださり、ありがとうございます。

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

ただいまの回答率
86.02%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。