Spaces:
Sleeping
Sleeping
File size: 4,688 Bytes
619f4a4 03b28d9 619f4a4 03b28d9 619f4a4 03b28d9 619f4a4 03b28d9 619f4a4 03b28d9 619f4a4 03b28d9 619f4a4 03b28d9 619f4a4 03b28d9 |
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 |
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")
|