def _exe_image_put(self, x, y, image, frame):
        window_height = 218
        window_width = 178
        # 画像の加工
        print("frame", type(frame))
        print("image", type(image))
        try:
            t = self.time
            if t > 15:
                t = 15
            easing_num = easing.easing(t, 0, 1, 15, "ease_in_expo")
            window_width = int(window_width * (self.similar_num / 5) *
                               easing_num)
            window_height = int(window_height * (self.similar_num / 5) *
                                easing_num)

            print("window_width", window_width)
            print("window_height", window_height)
            image = image.resize((window_width, window_height))
            print("self.time:", self.time)
            # 代入してやらないと動かない
            self.image_frame = self.image_frame.rotate(10)
            # PIL.ImageDraw.Draw.ellipse(xy, fill=None, outline=None)
            # imageを(重要)くり抜くmask
            # きれいな円でくり抜く
            padding = (window_height - window_width) / 2
            self.image_frame = self.image_frame.resize(
                (int(window_width), int(window_height - 2 * padding)))
            image.paste(self.image_frame, (0, int(padding), int(window_width),
                                           int(window_height - padding)),
                        self.image_frame.split()[3])

            mask_im = Image.new("L", image.size, 0)
            draw = ImageDraw.Draw(mask_im)
            draw.ellipse((0, padding, window_width, window_height - padding),
                         fill=255)
            radius = int(window_width / 2)
            # 類似度に応じて拡大、縮小
            # window_size = (int(2*window_width*(self.similar_num/8)), int(2*window_width*(self.similar_num/8)))
            # image = image.resize(window_size)

            frame.paste(image,
                        (x - radius, y - radius, x - radius + window_width,
                         y - radius + window_height), mask_im)
            print("im in exe put try")
        except:
            exc_type, exc_value, exc_traceback = sys.exc_info()
            traceback.print_exception(exc_type,
                                      exc_value,
                                      exc_traceback,
                                      limit=2,
                                      file=sys.stdout)
            print("something happened in _exe_put")

        # 時間経過
        self.time += 1
        return frame
    def _exe_image_put(self, x, y, image, frame):
        window_height = 218
        window_width = 178
        # 画像の加工
        print("frame", type(frame))
        print("image", type(image))
        try:
            t = self.time
            if t > 15:
                t = 15
            easing_num = easing.easing(t, 0, 1, 15, "ease_in_expo")
            window_width = int(window_width * (self.similar_num/5)*easing_num)
            window_height = int(window_height * (self.similar_num/5)*easing_num)

            # 類似顔の大きさ変更(縮尺変更)
            image_resized = image.resize((window_width, window_height))
            # 正方形にトリミング
            image_trimmed = image_resized.crop((0, (window_height-window_width)/2, window_width, (window_height-window_width)/2+window_width))
            # 枠は5pixの太さにする
            padding = int(2*self.similar_num*easing_num)
            image_frame_resized = self.image_frame.resize((image_trimmed.width+2*padding, image_trimmed.height+2*padding))
            image_frame_resized = image_frame_resized.rotate(self.time*5)


            mask_im = Image.new("L", image_trimmed.size, 0)
            draw = ImageDraw.Draw(mask_im)
            draw.ellipse((0, 0, image_trimmed.width, image_trimmed.height), fill=255)
            # 類似度に応じて拡大、縮小
            # window_size = (int(2*window_width*(self.similar_num/8)), int(2*window_width*(self.similar_num/8)))
            # image = image.resize(window_size)

            image_frame_resized.paste(image_trimmed, (padding, padding, padding+image_trimmed.width, padding+image_trimmed.height), mask_im)

            mask_im = Image.new("L", image_frame_resized.size, 0)
            draw = ImageDraw.Draw(mask_im)
            draw.ellipse((0, 0, image_frame_resized.width, image_frame_resized.height), fill=255)
            radius = int(image_frame_resized.width/2)
            # 類似度に応じて拡大、縮小
            # window_size = (int(2*window_width*(self.similar_num/8)), int(2*window_width*(self.similar_num/8)))
            # image = image.resize(window_size)
            frame.paste(image_frame_resized, (x-radius, y-radius, x-radius+image_frame_resized.width, y-radius+image_frame_resized.height), mask_im)


        except:
            exc_type, exc_value, exc_traceback = sys.exc_info()
            traceback.print_exception(exc_type, exc_value, exc_traceback,
                              limit=2, file=sys.stdout)
            print("something happened in _exe_put")

        # 時間経過
        self.time += 1
        return frame
示例#3
0
                easing_type = "ease_in_out_circular"
                for i in range(len(similar_windows)):
                    rect_top = rects[i][0]
                    rect_bottom = rects[i][1]
                    rect_left = rects[i][2]
                    rect_right = rects[i][3]
                    rect = (rect_left, rect_top, rect_right, rect_bottom)
                    face_frame_center_x = face_frame_centers[i][1]
                    face_frame_center_y = face_frame_centers[i][0]
                    for j in reversed(range(len(similar_windows[i]))):
                        t = similar_windows[i][j].time
                        if t > end_frame_num:
                            t = end_frame_num

                        x = easing.easing(
                            t, face_frame_center_x,
                            similar_windows[i][j].movement_amount_x,
                            end_frame_num, easing_type)
                        y = easing.easing(
                            t, face_frame_center_y,
                            similar_windows[i][j].movement_amount_y,
                            end_frame_num, easing_type)

                        # 情報更新・直線描画
                        lines[i][j].setter(face_frame_center_x,
                                           face_frame_center_y, x, y)
                        lines[i][j].draw_line(frame, rect)

                        x = int(x)
                        y = int(y)
                        print("xy", x, y)
                        similar_windows[i][j].put_on_frame(frame=frame,
示例#4
0
                for i in range(len(face_frames)):
                    face_frame_centers.append(face_frames[i].cal_center())

                # 類似顔表示
                print("len similar_windows", len(similar_windows))
                end_frame_num = 15
                easing_type = "ease_out_bounce"
                for i in range(len(similar_windows)):
                    for j in range(len(similar_windows[i])):
                        t = similar_windows[i][j].time
                        if t > end_frame_num:
                            t = end_frame_num
                        print("time", similar_windows[i][j].time)
                        print(face_frame_centers[i])
                        if j == 0:
                            x = easing.easing(t, face_frame_centers[i][1] - 80,
                                              0, end_frame_num, easing_type)
                            y = easing.easing(t, face_frame_centers[i][0] - 80,
                                              250, end_frame_num, easing_type)
                        elif j == 1:
                            x = easing.easing(t, face_frame_centers[i][1] - 80,
                                              300, end_frame_num, easing_type)
                            y = easing.easing(t, face_frame_centers[i][0] - 80,
                                              0, end_frame_num, easing_type)
                        elif j == 2:
                            x = easing.easing(t, face_frame_centers[i][1] - 80,
                                              300, end_frame_num, easing_type)
                            y = easing.easing(t, face_frame_centers[i][0] - 80,
                                              -250, end_frame_num, easing_type)
                        elif j == 3:
                            x = easing.easing(t, face_frame_centers[i][1] - 80,
                                              -300, end_frame_num, easing_type)
示例#5
0
                            amount_movement_y = 250
                        elif j == 4:
                            amount_movement_x = -300
                            amount_movement_y = 0
                        elif j == 5:
                            amount_movement_x = -300
                            amount_movement_y = -250
                        elif j == 6:
                            amount_movement_x = 0
                            amount_movement_y = -250
                        else:
                            amount_movement_x = 300
                            amount_movement_y = 250

                        x = easing.easing(t, face_frame_center_x,
                                          amount_movement_x, end_frame_num,
                                          easing_type)
                        y = easing.easing(t, face_frame_center_y,
                                          amount_movement_y, end_frame_num,
                                          easing_type)

                        # 情報更新・直線描画
                        lines[i][j].setter(face_frame_center_x,
                                           face_frame_center_y, x, y,
                                           amount_movement_x,
                                           amount_movement_y)
                        lines[i][j].draw_line(frame, rect)

                        x = int(x)
                        y = int(y)
                        print("xy", x, y)
    def _exe_image_put(self, x, y, image, frame):
        window_height = 218
        window_width = 178
        end_frame_num = 10
        wait_frame_num = 40

        # 画像の加工
        try:
            t = self.time
            if t < end_frame_num:
                easing_num = easing.easing(t, 0, 1, end_frame_num,
                                           "ease_out_expo")
            elif t < wait_frame_num:
                t = end_frame_num
                easing_num = easing.easing(t, 0, 1, end_frame_num,
                                           "ease_in_expo")
            else:
                easing_num = easing.easing(t % wait_frame_num, 1, -1,
                                           end_frame_num, "ease_out_expo")

            if self.lonly:
                window_width = int(window_width * (self.similar_num / 10) *
                                   easing_num * 1.5)
                window_height = int(window_height * (self.similar_num / 10) *
                                    easing_num * 1.5)
            else:
                window_width = int(window_width * (self.similar_num / 10) *
                                   easing_num)
                window_height = int(window_height * (self.similar_num / 10) *
                                    easing_num)

            # 類似顔の大きさ変更(縮尺変更)
            image_resized = image.resize((window_width, window_height))
            # 順位挿入
            image_resized = self._num_ride(image_resized, 8 - self.similar_num)
            # 正方形にトリミング
            image_trimmed = image_resized.crop(
                (0, (window_height - window_width) / 2, window_width,
                 (window_height - window_width) / 2 + window_width))
            # 枠は5pixの太さにする
            padding = int(2 * self.similar_num * easing_num)
            image_frame_resized = self.image_frame.resize(
                (image_trimmed.width + 2 * padding,
                 image_trimmed.height + 2 * padding))
            image_frame_resized = image_frame_resized.rotate(self.time * 5)

            mask_im = Image.new("L", image_trimmed.size, 0)
            draw = ImageDraw.Draw(mask_im)
            draw.ellipse((0, 0, image_trimmed.width, image_trimmed.height),
                         fill=255)
            # 類似度に応じて拡大、縮小
            # window_size = (int(2*window_width*(self.similar_num/8)), int(2*window_width*(self.similar_num/8)))
            # image = image.resize(window_size)

            image_frame_resized.paste(
                image_trimmed,
                (padding, padding, padding + image_trimmed.width,
                 padding + image_trimmed.height), mask_im)

            mask_im = Image.new("L", image_frame_resized.size, 0)
            draw = ImageDraw.Draw(mask_im)
            draw.ellipse(
                (0, 0, image_frame_resized.width, image_frame_resized.height),
                fill=255)
            self.radius = int(image_frame_resized.width / 2)
            # 類似度に応じて拡大、縮小
            # window_size = (int(2*window_width*(self.similar_num/8)), int(2*window_width*(self.similar_num/8)))
            # image = image.resize(window_size)
            frame.paste(image_frame_resized,
                        (x - self.radius, y - self.radius,
                         x - self.radius + image_frame_resized.width,
                         y - self.radius + image_frame_resized.height),
                        mask_im)

        except:
            exc_type, exc_value, exc_traceback = sys.exc_info()
            traceback.print_exception(exc_type,
                                      exc_value,
                                      exc_traceback,
                                      limit=2,
                                      file=sys.stdout)
            print("something happened in _exe_put")

        # 時間経過
        self.time += 1
        return frame
示例#7
0
 end_frame_num = 15
 easing_type = "ease_in_out_circular"
 for i in range(len(similar_windows)):
     for j in range(len(similar_windows[i])):
         t = similar_windows[i][j].time
         face_frame_center_x = int(face_frame_centers[i][1])
         face_frame_center_y = int(face_frame_centers[i][0])
         face_frame_width = face_frames[i].right - face_frames[
             i].left
         face_frame_height = face_frames[i].top - face_frames[
             i].bottom
         if t > end_frame_num:
             t = end_frame_num
         if j == 0:
             # 時間 初期位置、移動量、終了時間、イージングタイプ
             x = easing.easing(t, face_frame_center_x - 80, 0,
                               end_frame_num, easing_type)
             y = easing.easing(t, face_frame_center_y - 80, 250,
                               end_frame_num, easing_type)
         elif j == 1:
             x = easing.easing(t, face_frame_center_x - 80, 300,
                               end_frame_num, easing_type)
             y = easing.easing(t, face_frame_center_y - 80, 0,
                               end_frame_num, easing_type)
         elif j == 2:
             x = easing.easing(t, face_frame_center_x - 80, 300,
                               end_frame_num, easing_type)
             y = easing.easing(t, face_frame_center_y - 80,
                               -250, end_frame_num, easing_type)
         elif j == 3:
             x = easing.easing(t, face_frame_center_x - 80,
                               -300, end_frame_num, easing_type)