Spaces:
Sleeping
Sleeping
File size: 4,809 Bytes
edbbffa def2cf6 edbbffa 49c5d4a edbbffa 8662b29 edbbffa 8662b29 edbbffa 49c5d4a 2678eae 49c5d4a 2678eae 49c5d4a 2678eae 49c5d4a 2678eae edbbffa df5c2cf 400d220 df5c2cf 098bd84 df5c2cf ed132ab df5c2cf a40406b df5c2cf 400d220 5476995 400d220 |
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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
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
image = cv2.UMat(image)
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)
image = cv2.UMat.get(image)
##############
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")
|