diff --git a/gui_app.py b/gui_app.py index 075a32a..ba496e8 100644 --- a/gui_app.py +++ b/gui_app.py @@ -79,7 +79,18 @@ interval = int(self.interval_text.get()) ratio = float(self.area_ratio_text.get()) / 100 sigma = float(self.sigma_text.get()) - self.lp.profiling(ratio, sigma, interval) + + # 分析(ワーカースレッド) + thread = threading.Thread(target=self.lp.profiling, args=(ratio, sigma, interval)) + thread.start() + while thread.is_alive(): + self.progressbar.configure(value=self.lp.progress_count % 100) + self.progressbar.update() + time.sleep(0.01) + thread.join() + self.progressbar.configure(value=0) + #self.lp.profiling(ratio, sigma, interval) + self.time_slider.config(to=len(self.lp.results) - 1) self.time_slider.set(0) self.is_analyzed = True @@ -95,7 +106,7 @@ thread = threading.Thread(target=self.lp.load_movie, args=(self.moviefilename,)) thread.start() while thread.is_alive(): - self.progressbar.configure(value=len(self.lp.frames) % 100) + self.progressbar.configure(value=self.lp.progress_count % 100) self.progressbar.update() time.sleep(0.01) thread.join() diff --git a/lumen_profiler.py b/lumen_profiler.py index 5ee492e..b2effe5 100644 --- a/lumen_profiler.py +++ b/lumen_profiler.py @@ -7,11 +7,12 @@ class LumenProfiler: def __init__(self): - self.frames = [] + self.progress_count = 0 pass def load_movie(self, filename): self.frames = [] + self.progress_count = 0 cap = cv2.VideoCapture(filename) while True: # 画像読み込み @@ -19,11 +20,13 @@ if not ret: break self.frames.append(frame) + self.progress_count += 1 self.frame_count = len(self.frames) cap.release() def profiling(self, area_ratio, sigma, step=1): self.results = [] + self.progress_count = 0 for idx in range(0, len(self.frames), step): frame = self.frames[idx] mask = self.lumen_mask(frame, area_ratio, sigma) @@ -38,6 +41,7 @@ "sigma": sigma, } self.results.append(result) + self.progress_count += 1 def draw(self, rid): disp = self.results[rid]["frame"].copy()