Project Info
Inspiration
All three members of the team have had personal experiences with people on the autism spectrum, and seen firsthand their struggles with deciphering emotions. With the recent coronavirus pandemic, the use of online conference programs such as Zoom have exacerbated the issue of reading emotional cues. This is not only a problem for the 75+ million people struggling with ASD worldwide, but also for people with alexithymia, a condition that affects individuals’ ability to understand emotion (which makes up 10% of the world population). Our team decided to solve this problem through the development of Evatone, a tool that provides assistance in emotion identification on video conferencing platforms.
What it does
Our tool is emotion detection software specifically incorporated for video conferencing. It allows users to see what major expressions they elicit as they speak and identify major emotions expressed by the other participants in the video conference. This appears as labels on video participants’ faces, allowing people with Autism and alexithymia to quickly gauge the emotions of others in the meeting room.
How we built it
We created a live webcam feed using Typescript (part of our front end) that takes in video input. At set intervals, we send a frame from the video as a JPG image to the Python backend using Flask REST APIs. In our backend, we used the Hume Expression Measurement streaming API, along with a web socket to maintain an open connection, to analyze the facial expression of the frames in real-time, and detect the emotion. We parsed the output of Hume’s list of emotions detected to include only the emotion with the highest score (as this represented the dominant emotion), and then sent this data back to the front end (Typescript) to display it on our live webcam feed. Using cv2’s face detection model paired with div elements part of our html, we then overlay a red box over the face detected in the webcam with the dominant emotion label.
Challenges we ran into
One challenge we ran into was ensuring that the live webcam feed was running the entire time our application was running. Originally, we built out both the live webcam feed and the backend with Python, using Python’s cv2 library to capture the frames. However, we found that the cv2 webcam frames conflicted with how we were sending frames to Hume’s API. Thus, we transitioned to using Typescript for the webcam and Python for the backend, which allowed us to run the webcam feed the whole time while simultaneously sending frames to our model.
Accomplishments we're proud of
We are proud of being able to connect the front end and back end of our code, seamlessly presenting our backend output and data in a more presentable way and with a much better user interface, using front-end code. We are also proud that we were able to learn how to use Hume’s API. On Saturday, we spent hours at Hume’s table debugging our code and learning how web sockets work to allow real-time continuous detection of emotion in facial expressions. We’re really proud that, while we ran into challenges with using Hume’s streaming API, we pushed through, asked questions, and got our final output!
What we learned
We learned how to work with APIs, as we navigated the Hume API to incorporate it into our code for facial emotion detection. We learned about web sockets and how they allow for a continuous connection. We also learned how to code in TypeScript and how to use Flask as a framework for connecting HTML/CSS/JavaScript with our backend Python code using POST and GET.
What's next
We envision Evatone to be incorporated into online meeting platforms like Zoom, Google Meet, and Microsoft Teams. Furthermore, we see Evatone increasing accessibility for people with autism across the online sphere. We have thought about making a Chrome extension that can scan for any face currently on screen, whether that belongs to a Zoom call or a YouTube video, and similarly detect the emotion of the face, helping people with autism navigate online social interactions with ease.
Evatone
With our society's transition to an online world, it has become even harder for people with Autism to navigate people’s emotions in online conversations. Thus, Evatone partners with online call services like Zoom, Google Meet, and Microsoft Teams to provide a real-time emotion detection tool to help with facial expression identification. This increases accessibility on their platforms for those with autism spectrum disorder (ASD), emotional dysregulation, and alexithymia.
To run our code:
- Ensure that the typescript file has been compiled to javascript by running "tsc camera.ts --outDir static/js" in terminal
- Run the app.py file by running "python app.py" in terminal. This will open up a local host with a demo of our product.
Analysis
View
Metric
- 11
- 2
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- HTMLIn code
- JavaScriptIn code
- PythonIn code
- TypeScriptIn code
- CSSClaimed
- FlaskClaimed
4 of 6 appear in the indexed code. 2 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
25 KB
Source files
14
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
jesslyng33/evatone
15 files · 83 KB · @ b427ab7
Structure
Interface
1 file · 7%Screens, components and styles rendered to the user.
Application logic
10 files · 67%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- Python63%
- JavaScript14%
- TypeScript13%
- HTML6%
- Markdown3%
- YAML1%
Share of indexed source by file size. Binary and vendored files are excluded.
Feature verification
Dominant emotion extraction (highest score)Verified
Parsed Hume's output to include only the emotion with the highest score
Claimed on Devposthigh confidenceapp.py:62— Loop compares emotion scores and keeps the max-score emotion/name as largest_emotion/largest_score
Face detection via cv2 with overlay box and emotion label on webcam feedVerified
Using cv2's face detection model paired with div elements, overlay a red box over the detected face with the dominant emotion label
Claimed on Devposthigh confidenceapp.py:29— cv2 CascadeClassifier haarcascade_frontalface_default.xml detects faces and returns bounding boxes with emotion attachedstatic/js/camera.js:51— Frontend creates .face-rectangle and .face-label divs positioned at returned face coordinatestemplates/index.html:40— CSS defines .face-rectangle with a red border, matching the 'red box' claim
Flask REST API backendVerified
Send frames to the Python backend using Flask REST APIs
Claimed on Devposthigh confidenceapp.py:10— Flask app instantiated with routes for index and process-frame
Hume Expression Measurement streaming API integration via websocketVerified
Used the Hume Expression Measurement streaming API, along with a web socket, to analyze facial expression and detect emotion in real-time
Claimed on Devposthigh confidenceapp.py:54— process_with_hume connects to AsyncHumeClient's expression_measurement.stream (a websocket-based streaming client) and sends the image file for analysis
Live webcam feed capture (TypeScript frontend)Verified
Live webcam feed using TypeScript that takes in video input
Claimed on Devposthigh confidencecamera.ts:8— getUserMedia is called to capture webcam video stream and attach it to the video elementstatic/js/camera.js:7— compiled JS confirms the webcam capture logic is present and shippable
Periodic frame capture sent to backend as JPGVerified
At set intervals, send a frame from the video as a JPG image to the Python backend
Claimed on Devposthigh confidencecamera.ts:15— setInterval every 1000ms calls captureAndSendFramecamera.ts:38— canvas.toBlob generates image/jpeg blob and POSTs it via fetch to /process-frameapp.py:19— Flask route /process-frame receives the uploaded image file
Standalone local demo app (run via app.py, own webcam UI)Verified
Run the app.py file to open a local host with a demo of the product
Claimed on readmehigh confidenceapp.py:75— app.run(debug=True) starts a Flask server serving templates/index.html, which contains the webcam demo UI
TypeScript compiled to JavaScript for frontend build stepVerified
tsc camera.ts --outDir static/js compiles TypeScript to JavaScript before running
Claimed on readmehigh confidencecamera.ts— TypeScript source file existsstatic/js/camera.js— Corresponding compiled JS output exists matching the same logic, consistent with the documented tsc build step
Real-time emotion labels displayed on video conference participants' facesCode-supported
Emotion detection appears as labels on video participants' faces to help identify others' emotions
Claimed on readmemedium confidencestatic/js/camera.js:44— Displays detected emotion text and draws labeled boxes on faces in the local webcam feed, but this is a standalone demo page, not integrated into any actual video call with other participants
Chrome extension to scan any face on screen (future work)Claimed only
Chrome extension that can scan for any face on screen and detect emotion for any Zoom call or YouTube video
Claimed on Devposthigh confidenceIntegration/partnership with Zoom, Google Meet, Microsoft TeamsClaimed only
Evatone partners with online call services like Zoom, Google Meet, and Microsoft Teams
Claimed on readmehigh confidence
An AI agent derived these features from the project’s Devpost page and readme, then searched the code for each one. Verified features are backed by cited code; claimed-only features had no supporting code, which is not by itself proof a feature is missing.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.