diff --git a/gui_app.py b/gui_app.py index 2bc4cd2..140eb8b 100644 --- a/gui_app.py +++ b/gui_app.py @@ -10,19 +10,43 @@ def __init__(self): self.tkroot = tk.Tk() self.lp = lumen_profiler.LumenProfiler() + self.is_open = False + self.is_analyzed = False def make_window(self): self.tkroot.title("Lumen Profiler") self.tkroot.geometry("800x600") + + # ファイル入力フレーム self.top_frame = tk.Frame(self.tkroot) - self.top_frame.pack(fill=tk.X) + self.top_frame.pack(fill=tk.X, pady=5) self.file_button = tk.Button( self.top_frame, text="映像ファイルを開く", command=self.open_movie ) 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) - self.canvas = tk.Canvas(self.tkroot) + self.file_text.pack(side=tk.LEFT, fill=tk.X, padx=(20, 0)) + + # 分析フレーム + self.analize_frame = tk.Frame(self.tkroot) + # self.analize_frame.pack(fill=tk.X, pady=5) + self.analyze_button = tk.Button( + self.analize_frame, text="分析を実行", command=self.analyze + ) + self.analyze_button.pack(side=tk.LEFT) + self.area_ratio_label = tk.Label(self.analize_frame, text="暗部の面積比率(%)") + self.area_ratio_label.pack(side=tk.LEFT, padx=(20, 0)) + self.area_ratio_text = tk.Entry(self.analize_frame, width=5, justify=tk.RIGHT) + self.area_ratio_text.insert(tk.END, "8.0") + self.area_ratio_text.pack(side=tk.LEFT) + self.interval_label = tk.Label(self.analize_frame, text="分析フレーム間隔") + self.interval_label.pack(side=tk.LEFT, padx=(20, 0)) + self.interval_text = tk.Entry(self.analize_frame, width=5, justify=tk.RIGHT) + self.interval_text.insert(tk.END, "2") + self.interval_text.pack(side=tk.LEFT) + + # 画像表示 + self.canvas = tk.Canvas(self.tkroot, bg="black") self.canvas.pack(fill=tk.BOTH, expand=True) self.time_slider = tk.Scale( self.tkroot, @@ -35,6 +59,15 @@ self.tkroot.mainloop() + def analyze(self): + interval = int(self.interval_text.get()) + self.lp.profiling(interval) + self.time_slider.config(to=len(self.lp.results) - 1) + self.time_slider.set(0) + self.show_image() + self.is_analyzed = True + + # 映像ファイルを開く def open_movie(self): filename = tk.filedialog.askopenfilename(filetypes=[("mp4", "*.mp4")]) if filename == "": # cancel @@ -43,14 +76,23 @@ self.file_text.config(text=filename) self.time_slider.set(0) self.time_slider.config(to=self.lp.frame_count - 1) - self.show_image(self.lp.frames[0]) + 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_time_slider_change(self, event): - rid = self.time_slider.get() - self.show_image(self.lp.frames[rid]) + self.show_image() - def show_image(self, img): - pil = Image.fromarray(self.lp.bgr2rgb(img)) + # 画像表示 + def show_image(self): + rid = self.time_slider.get() + if not self.is_analyzed: + img = self.lp.bgr2rgb(self.lp.frames[rid]) + else: + img = self.lp.bgr2rgb(self.lp.draw(rid)) + pil = Image.fromarray(img) pil = ImageOps.pad(pil, (self.canvas.winfo_width(), self.canvas.winfo_height())) self.disp = ImageTk.PhotoImage(pil) # self.canvas.delete("all")