Spaces:
Runtime error
Runtime error
File size: 2,932 Bytes
ec77159 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
from tensorflow import keras
from keras.preprocessing import image
import pickle
from sklearn.metrics.pairwise import cosine_similarity
import streamlit as st
from PIL import Image
import os
import cv2
from mtcnn import MTCNN
import numpy as np
#keras.applications.resnet50.ResNet50
#VGGFace(model='resnet50',include_top=False,input_shape=(224,224,3),pooling='avg')
#st.text("Hello Welcome")
detector = MTCNN()
model = keras.applications.resnet50.ResNet50(
include_top=False,
input_shape=(224,224,3),
pooling='avg',
weights='imagenet'
)
feature_list = pickle.load(open('embedding.pkl', 'rb'))
filenames = pickle.load(open('filenames.pkl', 'rb'))
filenames = [sub.replace('/kaggle/input/bollywood-celeb-localized-face-dataset/', 'https://technirmitisoftwares.com/img_data/data/') for sub in filenames]
def save_uploaded_image(uploaded_image):
try:
with open(uploaded_image.name, 'wb') as f:
f.write(uploaded_image.getbuffer())
return True
except:
return False
def extract_features(img_path, model, detector):
img = cv2.imread(img_path)
results = detector.detect_faces(img)
x, y, width, height = results[0]['box']
face = img[y:y + height, x:x + width]
# extract its features
image = Image.fromarray(face)
image = image.resize((224, 224))
face_array = np.asarray(image)
face_array = face_array.astype('float32')
expanded_img = np.expand_dims(face_array, axis=0)
preprocessed_img = keras.applications.resnet50.preprocess_input(expanded_img)
result = model.predict(preprocessed_img).flatten()
return result
def recommend(feature_list,features):
similarity = []
for i in range(len(feature_list)):
similarity.append(cosine_similarity(features.reshape(1, -1), feature_list[i].reshape(1, -1))[0][0])
index_pos = sorted(list(enumerate(similarity)), reverse=True, key=lambda x: x[1])[0][0]
return index_pos
st.title('Which bollywood celebrity are you?')
uploaded_image = st.file_uploader('Choose an image')
if uploaded_image is not None:
# save the image in a directory
if save_uploaded_image(uploaded_image):
display_image = Image.open(uploaded_image)
st.header("Image Uploded!, Processing...")
#st.image(display_image)
# extract the features
features = extract_features(uploaded_image.name, model, detector)
#st.text(features)
#st.text(features.shape)
# recommend
index_pos = recommend(feature_list,features)
predicted_actor = filenames[index_pos]
#st.header(predicted_actor)
# display
col1,col2 = st.columns(2)
with col1:
st.header('Your uploaded image')
st.image(display_image,width=150)
with col2:
st.header("Look Like: " + predicted_actor.split("/")[7])
st.image(filenames[index_pos],width=150)
|