from metrics import dice_loss, dice_coef, iou from libs import * os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" """ Global parameters """ H = 512 W = 512 def load_image(image_file): img = Image.open(image_file) return img def choose_background(col1, col2, col3): background_file = None bg_image = None with col3: with st.spinner("[UPLOAD] Background uploading"): try: if background_file is None: try: background_file = st.file_uploader('[UPLOAD] Please upload your background:', type=["png", "jpg", "jpeg"]) time.sleep(1) except: pass except: print("[ERROR] Sorry, something went wrong!") pass if background_file is not None: with col2: st.success("Load background successfully!...") bg_image = load_image(background_file) print(type(bg_image)) save_path = "backgrounds/" + background_file.name bg_image.save(save_path) return bg_image, save_path def create_dir(path): if not os.path.exists(path): os.makedirs(path) def check_clothe(model_path, img_path): # Model model = torch.hub.load('ultralytics/yolov5', 'custom', model_path) # or yolov5n - yolov5x6, custom # Inference results = model(img_path) # Results new_results = results.pandas().xyxy[0].sort_values("confidence").to_json(orient="records") new_results = json.loads(new_results) classes_in_img = [] classes_count_dict = {} item = '' if len(new_results) != 0: for i in range(len(new_results)): classes_in_img.append(new_results[i]['name']) set_of_classes = set(classes_in_img) list_of_classes = list(set_of_classes) older_value_count = 0 for idx in range(len(list_of_classes)): value_count = classes_in_img.count(list_of_classes[idx]) if value_count > older_value_count: item = list_of_classes[idx] else: item = None return item def main_processing(col1, col2, col3, sport_bg_path, swim_bg_path, office_bg_path, img_path, name, detection_model_path, background_model_path): """ Seeding """ bg_path = None np.random.seed(42) tf.random.set_seed(42) model_path = detection_model_path stadium_sport_bg_path = sport_bg_path beach_swim_bg_path = swim_bg_path office_bg_path = office_bg_path """ Directory for storing files """ create_dir("remove_bg") st.write('Auto detect or choosing background? ') if bg_path is None: if st.checkbox('Choose background'): try: bg_img, save_path = choose_background(col1, col2, col3) bg_path = save_path except: pass """ Directory for storing files """ elif st.checkbox('Automatic background'): item = check_clothe(model_path, img_path) if item == 'sport': bg_path = stadium_sport_bg_path st.write("Hãy tiếp tục luyện tập TDTT chăm chỉ nhé!...") if item == 'swim': bg_path = beach_swim_bg_path st.write("Thời tiết thế này không đi biển hơi phí nhé!...") if item == 'office': bg_path = office_bg_path st.write("Chơi nhiều roài, đi làm chăm chỉ thuii...") if item == None: st.warning("Sorry, mô hình chúng tôi không biết bạn đang mặc cái quái gì hết...") st.warning("Chọn background bạn muốn nhé!") try: background_img, save_path = choose_background(col1, col2, col3) bg_path = save_path except: pass else: pass else: pass if bg_path is not None: """ Loading model: DeepLabV3+ """ with CustomObjectScope({'iou': iou, 'dice_coef': dice_coef, 'dice_loss': dice_loss}): model = tf.keras.models.load_model(background_model_path) """ Read the image """ image = cv2.imread(img_path, cv2.IMREAD_COLOR) h, w, _ = image.shape x = cv2.resize(image, (W, H)) x = x / 255.0 x = x.astype(np.float32) x = np.expand_dims(x, axis=0) """ Prediction """ y = model.predict(x)[0] y = cv2.resize(y, (w, h)) y = np.expand_dims(y, axis=-1) y = y > 0.5 photo_mask = y background_mask = np.abs(1 - y) cv2.imwrite( f"remove_bg\\{name}_1.png", photo_mask * 255) cv2.imwrite( f"remove_bg\\{name}_2.png", background_mask * 255) cv2.imwrite( f"remove_bg\\{name}_3.png", image * photo_mask) cv2.imwrite( f"remove_bg\\{name}_4.png", image * background_mask) bg_img = cv2.imread(bg_path, cv2.IMREAD_COLOR) print(bg_img.shape) new_bg_img = cv2.resize(bg_img, (w, h)) new_new_bg_img = new_bg_img * background_mask cv2.imwrite( f"remove_bg\\{name}_5.png", new_new_bg_img) final_final_img = new_new_bg_img + image * photo_mask final_img_path = f"remove_bg\\{name}_6.png" cv2.imwrite( final_img_path, final_final_img) return final_img_path # if __name__ == '__main__': # """ Seeding """ # np.random.seed(42) # tf.random.set_seed(42) # # bg_path = "" # background_model_path = "weight_files\\model.h5" # detection_model_path = "weight_files\\clothes_detection_model.pt" # # stadium_sport_bg_path = "backgrounds\\camnou_stadium.jpg" # beach_swim_bg_path = "backgrounds\\beach.jpg" # office_bg_path = "backgrounds\\office-bg.jpg" # # img_path = "images\\truong-van-bang-10163832.jpg" # # main(sport_bg_path=stadium_sport_bg_path, swim_bg_path=beach_swim_bg_path, office_bg_path=office_bg_path, name="a", img_path=img_path, detection_model_path=detection_model_path, background_model_path=background_model_path)