My vision worsened a lot after the pandemic started. When I wasn't eating, sleeping, or running outside, I was on my screen. School, video entertainment, video games, social media, and programming hobbies are all things that are done on screens. Since I was trying to learn about A.I, such as face detection and predictions, I decided that I could try to create an app that would help me monitor bad habits such as blinking less in front of the screen. That's how I got to building EyeHelp.
What it does
EyeHelp is a desktop application with a few functions. EyeHelp has 20-20-20 timer that regularly notifies the user to take a break every 20 minutes. Along with the timer, EyeHelp gives the user's blinking rate, along with recommendations for whether they should blink more. If EyeHelp does not think the user needs to blink more, it will give another tip to reduce vision loss like keeping your eyes at least an arm's length away from your screen. Next, there is a calibration section for calculating the eye aspect ratio threshold (distance eye's vertical landmarks in relation to the distance between eye's horizontal landmarks). This eye aspect ratio threshold determines whether a user is blinking or not. There is also a graphing function which allows a user to see their eye aspect ratio throughout time (of a session). Lastly, there is a configuration section which allows the user to turn on their camera during eye detection (if they would like to see the blink detection at work), and there is also a button to reset the eye aspect ratio threshold to its default.
How we built it
I programmed this app using Python 3.7 in the Visual Studio Code IDE. The packages I used are Briefcase for converting the project in a native application, Toga for creating the User Interface, dlib for facial landmarks detection, opencv for image processing, scipy for calculating distance between eye landmarks, imutils for video stream and some other utilities, matplotlib for graphing, and standard python modules.
Challenges we ran into
This was my second time creating a User Interface (the first was a tutorial project from Beeware), and implementing it with blink detection got very confusing for me. After trying out multiple solutions, I stuck with python's threading module to run multiple threads at the same time for the extra features. I also had a lot of trouble trying to get the blink detection to run multiple times. A challenge that I have not yet fixed is that the application only works in developer mode and not the application.
Accomplishments that we're proud of
I'm proud of creating my first actual User Interface desktop application (even if it only works in developer mode right now) and implementing it with a eye blinking detector. I'm also proud of my time management and focus on this project.
What we learned
I learned how to create User Interface apps with Python, how to create something a little more intricate than a standard face detector, and how to use thread in Python.
What's next for EyeHelp
I will try to first get EyeHelp to work outside of developer mode. Some features I would like to add are : -blinking statistics with history -general health app things (food consumption, exercise, sleep) because they all contribute to eye health If I get all of those features done, I would also like to try creating developing this app for mobile.