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
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,
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)
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
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)