diff --git a/.gitignore b/.gitignore index 14ecd7d..2c1c0b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,10 @@ *.mp4 *.csv *.png +__pycache__/ +*.pyc +*.pyo +*.pyd +*.pyw +*.pyz +*.pywz diff --git a/gui_app.py b/gui_app.py index e0073d6..fe3eec6 100644 --- a/gui_app.py +++ b/gui_app.py @@ -1,5 +1,8 @@ import tkinter as tk +from tkinter import ttk import tkinter.filedialog +import threading +import time from PIL import Image, ImageOps, ImageTk @@ -26,6 +29,8 @@ self.file_button.pack(side=tk.LEFT) self.file_text = tk.Label(self.top_frame, text="no movie") self.file_text.pack(side=tk.LEFT, fill=tk.X, padx=(20, 0)) + self.progressbar = ttk.Progressbar(self.top_frame, orient="horizontal", length=200, mode="determinate", maximum=99) + self.progressbar.pack(side=tk.LEFT, padx=(20, 0)) # 分析フレーム self.analize_frame = tk.Frame(self.tkroot) @@ -49,6 +54,10 @@ self.sigma_text = tk.Entry(self.analize_frame, width=5, justify=tk.RIGHT) self.sigma_text.insert(tk.END, "5.0") self.sigma_text.pack(side=tk.LEFT) + self.save_button = tk.Button( + self.analize_frame, text="分析結果を保存", command=self.on_save + ) + self.save_button.pack(side=tk.LEFT) # 画像表示 self.canvas = tk.Canvas(self.tkroot, bg="black") @@ -80,15 +89,32 @@ filename = tk.filedialog.askopenfilename(filetypes=[("mp4", "*.mp4")]) if filename == "": # cancel return - self.lp.load_movie(filename) + + # 映像読み込み(ワーカースレッド) + thread = threading.Thread(target=self.lp.load_movie, args=(filename,)) + thread.start() + while thread.is_alive(): + self.progressbar.configure(value=len(self.lp.frames) % 100) + self.progressbar.update() + time.sleep(0.01) + thread.join() + self.progressbar.configure(value=0) + # self.lp.load_movie(filename) + + # 読み込み後の処理 self.file_text.config(text=filename) self.time_slider.set(0) self.time_slider.config(to=self.lp.frame_count - 1) + self.is_analyzed = False self.show_image() if not self.is_open: self.analize_frame.pack(fill=tk.X, pady=5, after=self.top_frame) self.is_open = True + # 分析結果を保存 + def on_save(self): + self.lp.csv_output("result.csv") + # スライダー操作イベント def on_time_slider_change(self, event): self.show_image() @@ -105,7 +131,7 @@ self.disp = ImageTk.PhotoImage(pil) # self.canvas.delete("all") self.canvas.create_image(0, 0, image=self.disp, anchor=tk.NW) - + self.save_button.config(state=tk.NORMAL if self.is_analyzed else tk.DISABLED) # main if __name__ == "__main__": diff --git a/lumen_profiler.py b/lumen_profiler.py index c9e0ed6..5ee492e 100644 --- a/lumen_profiler.py +++ b/lumen_profiler.py @@ -7,6 +7,7 @@ class LumenProfiler: def __init__(self): + self.frames = [] pass def load_movie(self, filename): diff --git a/requirements.txt b/requirements.txt index 0dd006b..622ea3b 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1,2 @@ opencv-python +pillow \ No newline at end of file