| | import streamlit as st |
| | from fastai.vision.all import * |
| | from fastcore.all import * |
| | from fastbook import * |
| | from PIL import Image |
| | import numpy as np |
| |
|
| | @st.cache_resource |
| | def load_model(): |
| | return load_learner('model.pkl') |
| |
|
| | @st.cache_data |
| | def classify(_img): |
| | model = load_model() |
| | name, pred_idx, preds = model.predict(_img) |
| | return name |
| |
|
| | @st.cache_data |
| | def show_output(button, _output): |
| | with st.container(): |
| | if (button) and (_output is not None): |
| | with st.spinner(text='Loading...'): |
| | out_array = np.asarray(_output) |
| | name = classify(out_array) |
| | url = search_images_ddg((f'{name} soccer player'), max_images=1) |
| | img = download_url(url[0]) |
| | im = Image.open(img) |
| | st.success(f'Congratulations! You Look Like: {name}!!') |
| | st.divider() |
| | st.image(im.resize((480,376))) |
| | st.balloons() |
| | if (show_output): |
| | st.cache_data.clear() |
| | st.cache_resource() |
| |
|
| | def button_predict(): |
| | st.subheader("That's a lovely picture!") |
| | button = st.button('Click here to see who you look like!') |
| | return button |
| |
|
| | title = ':red[Upload Your Image And See which 2022 FIFA WC Football Player You Look Like]! ⚽ 🧔🏽' |
| |
|
| | st.title(title) |
| | st.divider() |
| | with st.container(): |
| | st.header('You can upload your image below using one of the following two options:') |
| | col1, col2 = st.columns(2) |
| | with col1: |
| | st.subheader('1. Upload an Image:') |
| | upload_image = st.file_uploader(label='Local', type=['png', 'jpg', 'jpeg']) |
| | with col2: |
| | st.subheader('2. Take a Picture: ') |
| | webcam_image = st.camera_input(label='Webcam', ) |
| | st.divider() |
| | with st.container(): |
| | if (upload_image): |
| | output = Image.open(upload_image) |
| | st.image(upload_image, caption="Uploaded Image") |
| | button = button_predict() |
| | show_output(button, output) |
| | elif (webcam_image): |
| | output = Image.open(webcam_image) |
| | st.image(webcam_image, caption="Webcam Image") |
| | button = button_predict() |
| | show_output(button, output) |
| | else: |
| | st.header('Please upload an image to proceed...') |
| | st.divider() |
| |
|