Esempio n. 1
0
    def update_preview_state(self, frame, contours):
        """
        Get the average color value for the contour for every X amount of frames
        to prevent flickering and more precise results.
        """
        max_average_rounds = 8
        for index, (x, y, w, h) in enumerate(contours):
            if index in self.average_sticker_colors and len(
                    self.average_sticker_colors[index]) == max_average_rounds:
                sorted_items = {}
                for bgr in self.average_sticker_colors[index]:
                    key = str(bgr)
                    if key in sorted_items:
                        sorted_items[key] += 1
                    else:
                        sorted_items[key] = 1
                most_common_color = max(sorted_items,
                                        key=lambda i: sorted_items[i])
                self.average_sticker_colors[index] = []
                self.preview_state[index] = eval(most_common_color)
                break

            roi = frame[y + 7:y + h - 7, x + 14:x + w - 14]
            avg_bgr = ColorDetector.get_dominant_color(roi)
            closest_color = ColorDetector.get_closest_color(
                avg_bgr)['color_bgr']
            self.preview_state[index] = closest_color
            if index in self.average_sticker_colors:
                self.average_sticker_colors[index].append(closest_color)
            else:
                self.average_sticker_colors[index] = [closest_color]
Esempio n. 2
0
 def update_snapshot_state(self, frame):
     """Update the snapshot state based on the current preview state."""
     self.snapshot_state = list(self.preview_state)
     center_color_name = ColorDetector.get_closest_color(
         self.snapshot_state[4])['color_name']
     self.sides[center_color_name] = self.snapshot_state
     self.draw_snapshot_stickers(frame)
Esempio n. 3
0
 def update_preview(self, frame):
     self.preview = list(self.state)
     center_color_name = ColorDetector.get_closest_color(
         self.preview[4])['color_name']
     self.sides[center_color_name] = self.preview
     self.draw_stickers(self.preview_stickers, frame, self.preview)