Spaces:
Sleeping
Sleeping
File size: 4,315 Bytes
edbbffa def2cf6 edbbffa 49c5d4a edbbffa 8662b29 edbbffa 8662b29 edbbffa 49c5d4a 2678eae 49c5d4a 2678eae 49c5d4a 2678eae 49c5d4a 2678eae edbbffa 4f2e34a af0aeb3 4f2e34a 49c5d4a 4f2e34a 49c5d4a 7c3e7c7 49c5d4a 7c3e7c7 49c5d4a 7c3e7c7 49c5d4a 7c3e7c7 49c5d4a 4f2e34a 7c3e7c7 4f2e34a 7c3e7c7 cbbdd22 9b07b0d 7c3e7c7 49c5d4a 738a81e c7dc050 873c510 |
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 |
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)
st.write("resize")
#image gray
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
image=img_gray, scaleFactor=1.3, minNeighbors=5)
st.write("gray")
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)
st.write("emotion done")
#########################
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)
st.write("recog")
for encodeFace,faceLoc in zip(encodesCurFrame,facesCurFrame):
matches = face_recognition.compare_faces(encodeListknown,encodeFace)
faceDis = face_recognition.face_distance(encodeListknown,encodeFace)
#print(faceDis)
matchIndex = np.argmin(faceDis)
st.write("matching")
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)
st.write("matched")
##############
if name:
if output=='happy':
url = "https://kiwi-whispering-plier.glitch.me/update"
data = {
'name': name,
}
else:
st.write("Please smile")
else:
st.write("FAiled")
|