From 56ac84f44273fc468275c787a3a7fe4d204ce4e3 Mon Sep 17 00:00:00 2001 From: Stinky-Tofu Date: Mon, 13 Feb 2023 10:57:28 +0800 Subject: [PATCH] update IDPhoto (#5717) Co-authored-by: xiaozhihong --- modelcenter/PP-Matting/APP/app.py | 206 ++++++++++++++---- modelcenter/PP-Matting/APP/images/husband.jpg | Bin 0 -> 32680 bytes modelcenter/PP-Matting/APP/images/wife.jpg | Bin 0 -> 36917 bytes modelcenter/PP-Matting/APP/utils.py | 27 +-- 4 files changed, 177 insertions(+), 56 deletions(-) create mode 100644 modelcenter/PP-Matting/APP/images/husband.jpg create mode 100644 modelcenter/PP-Matting/APP/images/wife.jpg diff --git a/modelcenter/PP-Matting/APP/app.py b/modelcenter/PP-Matting/APP/app.py index 26f4aabc..6318adb8 100644 --- a/modelcenter/PP-Matting/APP/app.py +++ b/modelcenter/PP-Matting/APP/app.py @@ -1,15 +1,111 @@ import gradio as gr import numpy as np +import cv2 import utils from predict import build_predictor -IMAGE_DEMO = "./images/idphoto.jpg" +ID_PHOTO_IMAGE_DEMO = "./images/idphoto.jpg" + +MC_PHOTO_BG = "Red" +MC_PHOTO_SIZE = (413, 626) +MC_PHOTO_WIFE_IMAGE_DEMO = "./images/wife.jpg" +MC_PHOTO_HUSBAND_IMAGE_DEMO = "./images/husband.jpg" + predictor = build_predictor() sizes_play = utils.size_play() -def get_output(img, size, bg, download_size): +def crop(img, alpha, thr=0.001): + """ + Crop the image and alpha according to alpha mask. + + Args: + img(numpy:ndarray): The image array. + alpha(numpy:ndarray): The alpha corresponding to the image. + thr(float): The threshold used to generate the alpha mask. + + Returns: + img_cropped(numpy:ndarray): Image after crop. + alpha_cropped(numpy:ndarray): alpha after crop. + """ + _, mask = cv2.threshold(alpha, 0, 255, cv2.THRESH_BINARY, thr) + cnt, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) + x, y, w, h = cv2.boundingRect(cnt[0]) + return img[y: y + h, x: x + w], alpha[y: y + h, x: x + w] + + +def copy_img_to_bg(img, alpha, target_h, target_x, bg_color, bg_size): + """ + Copy img and alpha to the corresponding background respectively. + + Args: + img(numpy:ndarray): The image array. + alpha(numpy:ndarray): The alpha corresponding to the image. + target_h(int): The target height of img in background. + target_x(int): The target position of the img's x-center in the background. + bg_color(str): The color of background, the options are "White"、"Blue"、"Red". + bg_size(tuple): The size of background. + + Returns: + res_img(numpy:ndarray): Result after copy img to background. + res_alpha(numpy:ndarray): Result after copy alpha to background. + """ + bg_h, bg_w = bg_size + img_h, img_w, _ = img.shape + r = 1.0 * img_h / target_h + target_w = int(img_w / r) + + res_img = np.ones((bg_h, bg_w, 3)) * utils.COLOR_MAP[bg_color] + res_alpha = np.zeros((bg_h, bg_w)) + + img = cv2.resize(img, (target_w, target_h), interpolation=cv2.INTER_AREA) + alpha = cv2.resize(alpha, (target_w, target_h), interpolation=cv2.INTER_AREA) + + x1 = int(max(0, target_x - target_w / 2)) + y1 = int(max(0, bg_h - target_h)) + x2 = int(min(bg_w, x1+target_w)) + y2 = int(min(bg_h, y1+target_h)) + act_w = x2 - x1 + act_h = y2 - y1 + res_img[y1: y2, x1: x2] = img[:act_h, :act_w] + res_alpha[y1: y2, x1: x2] = alpha[:act_h, :act_w] + + return res_img, res_alpha + + +def get_mc_photo_app_output(wife, husband): + """ + Composite marriage certificate photo + + Args: + wife(numpy:ndarray): The wife image array. + husband(numpy:ndarray): The husband image array. + + Returns: + res(numpy:ndarray): The composited marriage certificate photo. + res_download(str): The path of res. + """ + alpha_wife = predictor.run(wife) + alpha_husband = predictor.run(husband) + + _, wife_fg = utils.bg_replace(wife, alpha_wife, bg_name=MC_PHOTO_BG) + husband, _ = utils.bg_replace(husband, alpha_husband, bg_name=MC_PHOTO_BG) + + wife_fg, alpha_wife = crop(wife_fg, alpha_wife) + husband, alpha_husband = crop(husband, alpha_husband) + + wife_fg, alpha_wife = copy_img_to_bg(wife_fg, alpha_wife, 338, 225, MC_PHOTO_BG, MC_PHOTO_SIZE) + husband, alpha_husband = copy_img_to_bg(husband, alpha_husband, 375, 401, MC_PHOTO_BG, MC_PHOTO_SIZE) + + alpha_wife = alpha_wife[:, :, None] / 255.0 + res = (wife_fg * alpha_wife + (1 - alpha_wife) * husband).astype(np.uint8) + + res_download = utils.download(res, "Large") + return res, res_download + + +def get_id_photo_output(img, size, bg, download_size): """ Get the special size and background photo. @@ -21,7 +117,7 @@ def get_output(img, size, bg, download_size): """ alpha = predictor.run(img) - res = utils.bg_replace(img, alpha, bg_name=bg) + res, _ = utils.bg_replace(img, alpha, bg_name=bg) size_index = sizes_play.index(size) res = utils.adjust_size(res, size_index) @@ -29,49 +125,79 @@ def get_output(img, size, bg, download_size): return res, res_download -def download(img, size): - utils.download(img, size) - return None +def clear_id_photo_all(): + utils.delete_result() + return None, None, sizes_play[0], 'White', 'Large', None -with gr.Blocks() as demo: - gr.Markdown("""# ID Photo DIY""") +def clear_mc_photo_all(): + utils.delete_result() + return None, None, None, None + - img_in = gr.Image(value=IMAGE_DEMO, label="Input image") +with gr.Blocks() as demo: + gr.Markdown("""# ID and MC(Marriage Certificate) Photo DIY""") gr.Markdown( - """Tips: Please upload photos with good posture, center portrait, crown free, no jewelry, ears and eyebrows exposed.""" + """Tips: Please upload photos with good posture, center portrait, + crown free, no jewelry, ears and eyebrows exposed.""" ) - with gr.Row(): - size = gr.Dropdown(sizes_play, label="Sizes", value=sizes_play[0]) - bg = gr.Radio( - ["White", "Red", "Blue"], label="Background color", value='White') - download_size = gr.Radio( - ["Small", "Middle", "Large"], - label="File size (affects image quality)", - value='Large', - interactive=True) - - with gr.Row(): - btn1 = gr.Button("Clear") - btn2 = gr.Button("Submit") - - img_out = gr.Image( - label="Output image", interactive=False).style(height=300) - f1 = gr.File(label='Image download').style(height=50) - with gr.Row(): - gr.Markdown( - """This application is supported by [PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg). - If you have any questions or feature requists, welcome to raise issues on [GitHub](https://github.com/PaddlePaddle/PaddleSeg/issues). BTW, a star is a great encouragement for us, thanks! ^_^""" - ) - - btn2.click( - fn=get_output, - inputs=[img_in, size, bg, download_size], - outputs=[img_out, f1]) - btn1.click( - fn=utils.clear_all, + with gr.Tab("IDPhoto"): + id_photo_img_in = gr.Image(value=ID_PHOTO_IMAGE_DEMO, label="Input image") + with gr.Row(): + id_photo_size = gr.Dropdown(sizes_play, label="Sizes", value=sizes_play[0]) + id_photo_bg = gr.Radio( + ["White", "Red", "Blue"], label="Background color", value='White') + id_photo_download_size = gr.Radio( + ["Small", "Middle", "Large"], + label="File size (affects image quality)", + value='Large', + interactive=True) + + with gr.Row(): + id_photo_clear_btn = gr.Button("Clear") + id_photo_submit_btn = gr.Button("Submit") + + id_photo_img_out = gr.Image(label="Output image", interactive=False).style(height=300) + id_photo_downloaded_img = gr.File(label='Image download').style(height=50) + + id_photo_clear_btn.click( + fn=clear_id_photo_all, + inputs=None, + outputs=[id_photo_img_in, id_photo_img_out, id_photo_size, id_photo_bg, + id_photo_download_size, id_photo_downloaded_img]) + id_photo_submit_btn.click( + fn=get_id_photo_output, + inputs=[id_photo_img_in, id_photo_size, id_photo_bg, id_photo_download_size], + outputs=[id_photo_img_out, id_photo_downloaded_img]) + + with gr.Tab("MCPhoto"): + with gr.Row(): + mc_photo_img_wife = gr.Image(value=MC_PHOTO_WIFE_IMAGE_DEMO, label="Wife", interactive=True) + mc_photo_img_husband = gr.Image(value=MC_PHOTO_HUSBAND_IMAGE_DEMO, label="Husband", interactive=True) + + with gr.Row(): + mc_photo_clear_button = gr.Button("Clear") + mc_photo_submit_button = gr.Button("Submit") + + mc_photo_img_out = gr.Image(label="Output image", interactive=False).style(height=300) + mc_photo_download_img = gr.File(label='Image download').style(height=50) + + mc_photo_clear_button.click( + fn=clear_mc_photo_all, inputs=None, - outputs=[img_in, img_out, size, bg, download_size, f1]) + outputs=[mc_photo_img_wife, mc_photo_img_husband, mc_photo_img_out, mc_photo_download_img]) + mc_photo_submit_button.click( + fn=get_mc_photo_app_output, + inputs=[mc_photo_img_wife, mc_photo_img_husband], + outputs=[mc_photo_img_out, mc_photo_download_img]) + + gr.Markdown( + """This application is supported by + [PaddleSeg](https://github.com/PaddlePaddle/PaddleSeg). + If you have any question or feature request, + welcome to raise issues on [GitHub](https://github.com/PaddlePaddle/PaddleSeg/issues). + BTW, a star is a great encouragement for us, thanks! ^_^""" + ) gr.Button.style(1) diff --git a/modelcenter/PP-Matting/APP/images/husband.jpg b/modelcenter/PP-Matting/APP/images/husband.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e79a52d3b9753ba0324fc774a935b6f156eb3d52 GIT binary patch literal 32680 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�Jz&^|MNff@0cg=2!DfDT&DE%v9zv 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 900: - os.remove(os.path.join(root, res)) - - -def clear_all(): - delete_result() - return None, None, size_play()[0], 'White', 'Large', None + if int(time.time()) - int(os.path.splitext(res)[0]) > 10000: + os.remove(os.path.join(CACHE_DIR, res)) def size_play(): @@ -86,10 +82,10 @@ def bg_replace(img, alpha, bg_name): bg = COLOR_MAP[bg_name] bg = np.array(bg)[None, None, :] alpha = alpha / 255. - pymatting.estimate_foreground_ml(img / 255., alpha) * 255 + fg = pymatting.estimate_foreground_ml(img / 255., alpha, return_background=False) * 255 alpha = alpha[:, :, None] - res = alpha * img + (1 - alpha) * bg - return res.astype('uint8') + res = alpha * fg + (1 - alpha) * bg + return res.astype('uint8'), fg.astype('uint8') def adjust_size(img, size_index): @@ -121,16 +117,15 @@ def adjust_size(img, size_index): def download(img, size): q = SAVE_SIZE[size] + if not os.path.exists(CACHE_DIR): + os.makedirs(CACHE_DIR) while True: name = str(int(time.time())) - tmp_name = './.temp/' + name + '.jpg' + tmp_name = os.path.join(CACHE_DIR, name + '.jpg') if not os.path.exists(tmp_name): break else: time.sleep(1) - dir_name = os.path.dirname(tmp_name) - if not os.path.exists(dir_name): - os.makedirs(dir_name) im = Image.fromarray(img) im.save(tmp_name, 'jpeg', quality=q, dpi=(300, 300)) -- GitLab