from keras.models import load_model from PIL import Image import numpy as np import cv2 import requests from keras.models import model_from_json import face_recognition import os from datetime import datetime from keras.models import model_from_json from keras.preprocessing.image import img_to_array from PIL import Image import io import streamlit as st bytes_data=None Images = [] classnames = [] myList = os.listdir() #st.write(myList) for cls in myList: if os.path.splitext(cls)[1] == ".jpg" : curImg = cv2.imread(f'{cls}') Images.append(curImg) classnames.append(os.path.splitext(cls)[0]) st.write(classnames) # load model emotion_dict = {0:'angry', 1 :'happy', 2: 'neutral', 3:'sad', 4: 'surprise'} # load json and create model json_file = open('emotion_model1.json', 'r') loaded_model_json = json_file.read() json_file.close() classifier = model_from_json(loaded_model_json) # load weights into new model classifier.load_weights("emotion_model1.h5") #load face try: face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') except Exception: st.write("Error loading cascade classifiers") def findEncodings(Images): encodeList = [] for img in Images: img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) encode = face_recognition.face_encodings(img)[0] encodeList.append(encode) return encodeList encodeListknown = findEncodings(Images) st.write('Encoding Complete') img_file_buffer=st.camera_input("Take a picture") if img_file_buffer is not None: test_image = Image.open(img_file_buffer) image1 = Image.open(img_file_buffer) st.image(test_image, use_column_width=True) image = np.asarray(test_image) img = np.asarray(image1) img = cv2.resize(img,(0,0),None,0.25,0.25) #image gray img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale( image=img_gray, scaleFactor=1.3, minNeighbors=5) try: for (x, y, w, h) in faces: cv2.rectangle(img=img, pt1=(x, y), pt2=( x + w, y + h), color=(255, 0, 0), thickness=2) roi_gray = img_gray[y:y + h, x:x + w] roi_gray = cv2.resize(roi_gray, (48, 48), interpolation=cv2.INTER_AREA) if np.sum([roi_gray]) != 0: roi = roi_gray.astype('float') / 255.0 roi = img_to_array(roi) roi = np.expand_dims(roi, axis=0) prediction = classifier.predict(roi)[0] maxindex = int(np.argmax(prediction)) finalout = emotion_dict[maxindex] output = str(finalout) st.write(output) label_position = (x, y) img = cv2.putText(img, output, label_position, cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) st.image(img, use_column_width=True) except: st.write("face is not clear") ######################### imgS = cv2.resize(image,(0,0),None,0.25,0.25) imgS = cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB) facesCurFrame = face_recognition.face_locations(imgS) encodesCurFrame = face_recognition.face_encodings(imgS,facesCurFrame) for encodeFace,faceLoc in zip(encodesCurFrame,facesCurFrame): matches = face_recognition.compare_faces(encodeListknown,encodeFace) faceDis = face_recognition.face_distance(encodeListknown,encodeFace) matchIndex = np.argmin(faceDis) if matches[matchIndex]: name = classnames[matchIndex] st.write(name) y1, x2, y2, x1 = faceLoc y1, x2, y2, x1 = y1*4,x2*4,y2*4,x1*4 cv2.rectangle(image,(x1,y1),(x2,y2),(0,255,0),2) cv2.rectangle(image,(x1,y2-35),(x2,y2),(0,255,0),cv2.FILLED) cv2.putText(image,name,(x1+6,y2-6),cv2.FONT_HERSHEY_COMPLEX,1,(255, 255, 255),2) ############## if name: if output=='happy': url = "https://kiwi-whispering-plier.glitch.me/update" data = { 'name': name, } response = requests.get(url, params=data) if response.status_code == 200 : st.write(" data updated on : https://kiwi-whispering-plier.glitch.me" ) st.image(image) else : st.write("data not updated ") ############################## else: st.write("Please smile") else: st.write("Failed")