ai.vietqt
edit path
baae5a2
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)