CoolFace
Apppublic

johnson906/recipedia

sourceHugging Faceupdated 4y agoView on Hugging Face
1likes
app.py121 linesDownload Raw Back to root
1from PIL import Image2import requests3import pickle4from io import BytesIO5import gradio as gr6from src.args import get_parser7from src.model import get_model8import torch9import os10from src.model1_inf import im2ingr11import numpy as np12 13response = requests.get("https://i.imgur.com/DwR24EM.jpeg")14dog_img = Image.open(BytesIO(response.content))15 16def img2ingr(image):17    # img_file = '../data/demo_imgs/1.jpg'18    # image = Image.open(img_file).convert('RGB')19    img = Image.fromarray(np.uint8(image)).convert('RGB')20    ingr = im2ingr(img, ingrs_vocab, model)21    return ' '.join(ingr)22 23def img_ingr2recipe(image, ingr):24    print(image.shape, ingr)25    return dog_img, "A delicious meme dog \n--------\n1. Cook it!\n2. GL&HF"26 27def change_checkbox(predicted_ingr):28    return gr.update(label="Ingredient required", interactive=True, choices=predicted_ingr.split(), value=predicted_ingr.split())29 30def add_ingr(new_ingr):31    print(new_ingr)32    return "hello"33 34def add_to_checkbox(old_ingr, new_ingr):35    # chack if in dict or not36    return gr.update(label="Ingredient required", interactive=True, choices=[*old_ingr, new_ingr], value=[*old_ingr, new_ingr])37 38 39""" load model1 """40args = get_parser()41 42# basic parameters43model_dir = './data'44data_dir = './data'45example_dir = './data/demo_imgs/'46device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')47map_loc = None if torch.cuda.is_available() else 'cpu'48 49# load ingredients vocab50ingrs_vocab = pickle.load(open(os.path.join(model_dir, 'ingr_vocab.pkl'), 'rb'))51vocab = pickle.load(open(os.path.join(data_dir, 'instr_vocab.pkl'), 'rb'))52 53ingr_vocab_size = len(ingrs_vocab)54instrs_vocab_size = len(vocab)55 56# model setting and loading57args.maxseqlen = 1558args.ingrs_only=True59model = get_model(args, ingr_vocab_size, instrs_vocab_size)60model_path = os.path.join(model_dir, 'modelbest.ckpt')61model.load_state_dict(torch.load(model_path, map_location=map_loc))62model.to(device)63model.eval()64model.ingrs_only = True65model.recipe_only = False66 67""" load model2 """68 69 70 71 72""" gradio """73# input image -> list all required ingrs -> checkbox for selecting ingrs / input_box for input more ingrs user want -> output: recipe and its image74with gr.Blocks() as demo:75    gr.Markdown(76    """77    # Recipedia78    Start finding the yummy recipe ...79    """)80    with gr.Tabs():81        with gr.TabItem("User"):82            # input image83            image_input = gr.Image(label="Upload the image of your yummy food", type='filepath')84            gr.Examples(examples=[example_dir+"1.jpg", example_dir+"2.jpg", example_dir+"3.jpg", example_dir+"4.jpg", example_dir+"5.jpg", example_dir+"6.jpg"], inputs=image_input)85            with gr.Row():86                # clear_img_btn = gr.Button("Clear")87                image_btn = gr.Button("Upload", variant="primary")88            # list all required ingrs -> checkbox for selecting ingrs / input_box for input more ingrs user want89            predicted_ingr = gr.Textbox(visible=False)90 91            with gr.Row():92                checkboxes = gr.CheckboxGroup(label="Ingredient required", interactive=True)93                new_ingr = gr.Textbox(label="Addtional ingredients", max_lines=1)94                    # with gr.Row():95                    #     new_btn_clear = gr.Button("Clear")96                    #     new_btn = gr.Button("Add", variant="primary")97 98            add_ingr = gr.Textbox(visible=False)99 100            with gr.Row():101                clear_ingr_btn = gr.Button("Reset")102                ingr_btn = gr.Button("Confirm", variant="primary")103 104            # output: recipe and its image105            with gr.Row():106                out_recipe = gr.Textbox(label="Your recipe", value="Spagetti ---\n1. cook it!")107                out_image = gr.Image(label="Looks yummy ><")108 109        with gr.TabItem("Example"):110            image_button = gr.Button("Flip")111        112        image_btn.click(img2ingr, inputs=image_input, outputs=predicted_ingr)113        predicted_ingr.change(fn=change_checkbox, inputs=predicted_ingr, outputs=checkboxes)114 115        # new_btn.click(img2ingr, inputs=new_ingr, outputs=predicted_ingr)116        new_ingr.submit(fn=add_to_checkbox, inputs=[checkboxes, new_ingr], outputs=checkboxes)117 118        ingr_btn.click(img_ingr2recipe, inputs=[image_input, checkboxes], outputs=[out_image, out_recipe])119 120 121demo.launch(debug=True, share=True)