実現したいこと
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 です。
補足
特になし
回答1件
あなたの回答
tips
プレビュー