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

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

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

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

Q&A

解決済

1回答

289閲覧

nuitkaでで自動でインストールされるMingW64のgccの環境のみでwhisperをビルドするとwhisper\assetsが含まれない

nezukichi

総合スコア13

Python 3.x

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

MinGW

MinGW(ミン・ジー・ダブリュー)は GNUツールチェーンのWindows移植版です。 ランタイムライブラリと開発ツールで構成されています。

0グッド

0クリップ

投稿2024/10/11 06:19

編集2024/10/12 05:37

実現したいこと

PythonでOpenAI-Whisperを利用したアプリをnuitkaで自動でインストールされるMingW64の環境でビルドするときにwhisper\assetsが含まれるようにしたい。
最終的に--onefile --windows-console=disableのオプションを使いたいのですが、上記のファイルが含まれないためにexeファイルを作ってもアプリが止まってしまいます。

発生している問題・分からないこと

python -m nuitka --mingw64 --standalone --enable-plugin=tk-inter --module-parameter=numba-disable-jit=yes --module-parameter=torch-disable-jit=yes .\whisper_Tk.py
を実行してwhisper_Tk.distが作成され、その中にwhisper_Tk.exeという実行ファイルが作成されました。
しかし、それを実行し音声ファイルからテキストファイルを作成しようとすると下記のエラーメッセージが表示され、止まってしまいます。

エラーメッセージ

error

1Exception in thread Thread-1 (start_translation): 2Traceback (most recent call last): 3 File "E:\Python_Env\test\whisper_Tk.dist\threading.py", line 1075, in _bootstrap_inner 4 File "E:\Python_Env\test\whisper_Tk.dist\threading.py", line 1012, in run 5 File "E:\Python_Env\test\whisper_Tk.dist\whisper_Tk.py", line 60, in start_translation 6 File "E:\Python_Env\test\whisper_Tk.dist\whisper\transcribe.py", line 133, in transcribe 7 File "E:\Python_Env\test\whisper_Tk.dist\whisper\audio.py", line 151, in log_mel_spectrogram 8 File "E:\Python_Env\test\whisper_Tk.dist\whisper\audio.py", line 106, in mel_filters 9 File "E:\Python_Env\test\whisper_Tk.dist\numpy\lib\_npyio_impl.py", line 455, in load 10FileNotFoundError: [Errno 2] No such file or directory: 'E:\\Python_Env\\test\\whisper_Tk.dist\\whisper\\assets\\mel_filters.npz'

該当のソースコード

Python

1import tkinter as tk 2 3from tkinter import ttk 4 5from tkinter import filedialog 6 7import threading 8 9import whisper 10 11 12# メインウインドウ 13root = tk.Tk() 14root.title("OpenAI 文字起こし") 15root.geometry="700x80" 16 17# 変換精度選択 18# StringVar()を使って選択されたコンボボックスの値を保持 19lb_var = tk.StringVar() 20 21# 入出力ファイル名の管理用変数 22file_path_input = tk.StringVar() 23file_path_input.set("音声ファイル名") 24file_path_output = tk.StringVar() 25file_path_output.set("テキストファイル名") 26 27def open_input_file_dialog(): 28 # 音声ファイル選択ダイアログを表示 29 txt_path_input = filedialog.askopenfilename( 30 title = '音声ファイルを選択', 31 filetypes=[("MP3ファイル", "*.mp3")] 32 ) 33 34 if txt_path_input: 35 file_path_input.set(txt_path_input) 36 37def open_output_file_dialog(): 38 # テキストファイル選択ダイアログを表示 39 txt_path_output = filedialog.asksaveasfilename( 40 title = 'テキストファイルを選択', 41 filetypes=[("テキストファイル", "*.txt")] 42 ) 43 if txt_path_output != "" and txt_path_output[-4:] != '.txt': 44 txt_path_output += '.txt' 45 46 if txt_path_output: 47 file_path_output.set(txt_path_output) 48 49def start_thread(): 50 threading.Thread(target=start_translation, daemon=True).start() 51 52def start_translation(): 53 if file_path_input.get()!="音声ファイル名" and file_path_output.get()!="テキストファイル名": 54 btn_translation.config(text="変換中") 55 btn_translation.config(state="disabled") 56 root.update_idletasks 57 # 音声→テキスト変換開始 58 lb_idx = lb.curselection() 59 model = whisper.load_model(lb.get(lb_idx)) 60 result = model.transcribe(file_path_input.get()) 61 f = open(file_path_output.get() , 'w') 62 f.write(result["text"]) 63 f.close() 64 btn_translation.config(text="変換開始") 65 btn_translation.config(state="!disabled") 66 root.after(0) 67 68# 音声ファイル名表示用テキストボックス 69text_box_input = ttk.Entry(root, width=30, textvariable=file_path_input) 70text_box_input.grid(row=0, column=0, padx = 5, pady=10) 71text_box_input.config(state="disabled") 72 73# テキストファイル名表示用テキストボックス 74text_box_output = ttk.Entry(root, width=30, textvariable=file_path_output) 75text_box_output.grid(row=1, column=0, padx=5, pady=10) 76text_box_output.config(state="disabled") 77 78 79# 音声ファイル選択(読み込み用)ファイルダイアログ表示ボタン 80btn_input = ttk.Button(root, text="音声ファイルを選択する", command=open_input_file_dialog) 81btn_input.grid(row=0, column=1, padx=5, pady=10) 82 83# テキストファイル選択(新規ファイル作成用)ファイルダイアログ表示ボタン 84btn_output = ttk.Button(root,text="テキストファイルを選択する",command=open_output_file_dialog) 85btn_output.grid(row=1, column=1, padx=5, pady=10) 86 87# リストボックス用ラベル 88label = ttk.Label(root, text="       変換精度を選択") 89label.grid(row=2, column=0, padx=5, pady=10) 90 91# リストボックスの作成 92item_list = ["tiny", "base", "small", "medium", "large", "large-v3"] 93list_var = tk.StringVar(root, value=item_list) 94lb = tk.Listbox(root, listvariable=list_var) 95lb.select_set(3) # デフォルトの値 96lb.grid(row=2, column=1, padx=5, pady=10) 97 98 99# 変換開始ボタン 100btn_translation = ttk.Button(root, text="変換開始", command=start_thread) 101btn_translation.grid(row=3, column=0, padx=5, pady=10) 102 103# 終了ボタン 104btn_exit = ttk.Button(root,text="終了", command=root.destroy) 105btn_exit.grid(row=3, column=2, padx=5,pady=10) 106 107root.mainloop()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

whisper\assets
の下にあるべきファイルは
https://github.com/openai/whisper/blob/main/whisper/assets/
にあり、この中のファイルをdist\whisper\assestsに置くとexeファイルがエラーなく実行できるようになります。
しかし、ビルドしたときにこれらのファイルが自動で含まれるようにする方法はわかりませんでした。

ビルド環境は Windows11, Python 3.12.7, nuitka 2.4.8, gcc 13.2.0 です。
インストールしたモジュールは openai-whisper, faster-whisper, nuitka です。

補足

特になし

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

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

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

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

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

hiroki-o

2024/10/12 04:50

同じ手順で同じ現象が再現しました。 ただし、この手順だとgccは使用しません。clでコンパイルしています。 clはVisual Studioのを使用しているのか、別途ダウンロードしているのかまでは、切り分けていません。 まず、gccを使いたいのか、コンパイルできればclでもよいのかを、はっきりさせてください。 clでもよいなら、質問のタイトルと内容を編集してください。 1回コンパイルするのに1時間以上かかるので、いろいろ試すのは無理です。
nezukichi

2024/10/12 05:45

コメントありがとうございます。 職場のPCのSSDが容量不足でVisualStudioを入れる余裕がありません。 そこでnuitkaを実行した時に自動でインストールされるMingW64のgccを使ってコンパイルし、ビルドを行いたいと思っています。 タイトルと内容を変更しましたが、これでお分かりいただけますでしょうか?
guest

回答1

0

ベストアンサー

Windows 11、Python 3.12.7、venvで確認しました。

nuitkaのオプションに、以下を追加してください。

--include-data-dir=.\venv\Lib\site-packages\whisper\assets=whisper\assets

前のパスは、3ファイルがある場所です。ローカルのどこかにあります。環境に合わせて変えてください。
pythonコマンドを叩く場所(whisper_Tk.pyの場所)からの相対パス、またはフルパスを指定します。

後ろのパスはdistの中の実行ファイルからの相対パスなので、そのままです。

投稿2024/10/12 09:17

hiroki-o

総合スコア1072

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

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

nezukichi

2024/10/13 13:37

回答ありがとうございます。 試したところ問題が解決しました! 説明もわかりやすくしていただき大変助かりました。 また、前回の質問への回答もありがとうございました。 ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問