emotionDetector / app.py
Tanishq
Create app.py
fd6967b
Raw History Blame Contribute Delete
2.38 kB
import streamlit as st
from PIL import Image
import torch
from torch import nn as nn
from torchvision.transforms import transforms
class CNNModel(nn.Module):
def __init__(self):
super(CNNModel, self).__init__()
self.conv_layers = nn.Sequential(
nn.Conv2d(3, 32, kernel_size=3, padding=0),
nn.ReLU(),
nn.BatchNorm2d(32),
nn.MaxPool2d(kernel_size=2, stride=2),
nn.Conv2d(32, 64, kernel_size=3, padding=0),
nn.ReLU(),
nn.BatchNorm2d(64),
nn.MaxPool2d(kernel_size=2, stride=2),
nn.Conv2d(64, 128, kernel_size=3, padding=0),
nn.ReLU(),
nn.BatchNorm2d(128),
nn.MaxPool2d(kernel_size=2, stride=2)
)
self.fc_layers = nn.Sequential(
nn.Flatten(),
nn.Linear(128 * 30 * 30, 128),
nn.ReLU(),
nn.Dropout(0.1),
nn.Linear(128, 64),
nn.ReLU(),
nn.Dropout(0.1),
nn.Linear(64, 1),
nn.Sigmoid()
)
def forward(self, x):
x = self.conv_layers(x)
x = self.fc_layers(x)
return x
def load_checkpoint(checkpoint, model):
print("=> Loading checkpoint")
model.load_state_dict(checkpoint["state_dict"])
model = CNNModel()
load_checkpoint(torch.load("emotion.pth.tar"), model)
model.eval()
class_names = ["angry", "disgust", "fear", "happy", "neutral", "sad", "surprize"]
st.title("Emotion Detector")
st.write("Upload an image and let the model predict your emotion!")
uploaded_image = st.file_uploader("Choose an image...", type=["jpg", "png", "jpeg"])
if uploaded_image is not None:
image = Image.open(uploaded_image)
st.image(image, caption="Uploaded Image", use_column_width=True)
# Define the transformation to convert the image to a tensor
transform = transforms.Compose([
transforms.Resize((256, 256)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# Apply the transformation to the image
tensor_image = transform(image)
# Predict
predictions = model(tensor_image.unsqueeze(0))
predicted_class_index = torch.argmax(predictions).item()
predicted_class = class_names[predicted_class_index]
st.write(f"Prediction: {predicted_class}")