☚ Back Home

My Projects

  • All
  • Machine Learning
  • Automation
  • Hackathon Projects
  • Games
  • Blogging
guardyn
Guardyn - VandyHacks IV

Guardyn

Real-Time Threat Analysis

See the full Devpost Submission Here
Demo Video
What it does
Guardyn is security system whose goal is to achieve real-time threat analysis; specifically, detecting and reporting active shooters as soon as their presence is made known. It process and recognizes both people and objects we deem dangerous (for testing purposes, a water bottle), all in real time. Once Guardyn detects a deadly weapon, it immediately sends out alerts to authorities and civilians, making sure they are aware of the situation.

Guardyn won the following awards at VandyHacks IV:
1st Place

How we built it
The computer vision component Guardyn was made using Tensorflow's Object Detection API and a Haar Cascade classifier. Using these two in combination allows us to, in real-time, distinguish between harmless objects and dangerous ones, as well as the people that are in possession of them. We use the Haar Cascade to attempt to detect the location of the face and eyes of the suspect in the image (if they are facing the camera and/or not wearing a mask), and then we analyze this portion of the frame with our own algorithm to extrapolate skin tone, one of the few pieces of data we feed to users of the system.

We decided to use push notifications to alert civilians as it proved to be the fastest method of delivery vs SMS and other options. Our system is set up so that the notifications could be subscribed to across iOS, Android, or Web notification systems.
What I learned
I learned what seems like a semester's worth of knowledge about computer vision and machine learning in general. We also enjoyed having the opportunity to explore the strategies of mass deploying push notifications and the ways that users could interact with these alerts.venv
Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

code
WikiBeat
WikiBeat - HackGT 2018

WikiBeat

Freestyle Rap Bot

See the full Devpost Submission Here
Click here to try WikiBeat yourself!
Demo Video
What it does
Wikibeat is a freestyle rap bot that uses information on Wikipedia to write and perform a rap about absolutely any topic! WikiBeat uses natural language processing and the knowledge on the internet to put together couplets that are not only spicy, but also completely factual. This means that WikiBeat has both educational and entertainment value.

WikiBeat won the following awards at HackGT 2018:
3rd Place
How I built it
WikiBeat was a solo project at HackGT, so I am very proud to have completed it in time. The backend of WikiBeat is entirely Python. When a topic is received, it uses the Wikipedia api to gather content on the topic and process it into rhymes using NLTK and various logic. Then the Python wave module and the google text-to-speech api are used to turn the couplets into actual sound, and put them onto a beat. Once the beat is made, the frontend is notified, and moves to an appropriate page, where the lyrics are displayed dynamically line-by-line (as the song is playing) using javascript functions that I wrote.
What I learned
The biggest thing I learned was how to effectively organize time on a project. There were several times where I wanted to stop progress to fix a small detail, but I realized that if I didn't move on I wouldn't have a finished product at all. I also learned some cool javascript tips and tricks, and some more knowledge on NLP.
Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

code
degrees of wikipedia
Degrees of Wikipedia

Degrees of Wikipedia

Get from one wiki page to another in as few clicks as possible

Demo Video
What it does
I got the idea for this project while daydreaming in class, thinking about the six degrees of Kevin Bacon. It's the idea that almost any actor or actress in Hollywood can be linked to Bacon by a chain six or less people who have starred in a movie together. It's pretty crazy, but it works. I wondered if Wikipedia articles had the same level of interconnectedness, so I built Degrees of Wikipedia to find out.

How I built it
Degrees of Wikipedia works the same way that OracleOfBacon does for the most part. They both use a breadth first search (BFS) to find the shortest link between two objects. I built it in python 3 using the requests library , and I use selenium for the part that actually displays the result to the user in a browser window.
What I learned
I learned that wikipedia is incredibly interconnected. For instance, I've tried hundreds of random starting points, and have yet to find one that is more than 3 clicks away from the wiki page for Adolf Hitler. I also learned more about selenium, like how to highlight elements and create my own smoothscroll effect.

Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

code
personality prediction
Personiality Prediction - Senior Design Project

Personiality Prediction

Machine Learning to predict someone's personality based on word choice

Interactive Demo
You can take the quiz we developed by visiting our website here. Please note that the quiz is over 30 questions long, and could potentially take a while to complete. Voice to text is availible when using Google Chrome.
Overview
This project was developed as a senior design project for Dr. Jinyan Fan of the Psychology department at Auburn University. Dr Fan wanted to show that the way that a person talks, and the words that they choose can accurately predict aspects of their personality.
Dr Fan expected that this could be particularly useful for employers that require potential employees to take a personality test, as a personality test is easy to lie on or mislead, but it's not easy to change speech patterns.
What it does
Our Personality Prediction system asks a series of casual questions to a user. The user's answers are then processed into feature scores, which is used with a linear regression model to predict a vector of scores, representing various personality traits. The most accurate of these include the "Big 5", all of which are within 95% average accuracy on our test set. The results are then presented to the user in a format of their choosing. Below are some sample images of how we display our results.

How we built it
This project involved several layers of complexity, since we started from scratch and delivered a full product by the end of the semester. I worked on the backend of the project, while my team members worked on the front end. Most of the backend was accomplished with Python. The server and website routing was accomplished with bottle and beaker. Features were extracted from text by using nltk for preprocessing, (stemming, stop words, etc), and then the dimensionality is reduced by categorizing each word based on a dictionary from LIWC.
To understand how this works, take a look at the example below.

Using this technique, lots of words can be condensed into a set amount of feature scores. I then use scikit-learn to generate a regression model from our training set, and score the users' data against that to generate the results. The results are displayed on plots generated using plot.ly.
What I learned
I learned a massive amount about natural language processing during this project, and got some solid experience developing a product from beginning to end.

Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

code
Pretendtious
Pretendtious - HackGSU Fall '17

Pretendtious

Stealth Tool to Make You Look Sophisticated

See the full Devpost Submission Here
Demo Video
What it does
Pretendtious is an executable MacOS app that lets you instantly hide the current state of your desktop, and replaces it with a socially acceptable suite of open tabs, saved bookmarks, and a temporary socially acceptable wallpaper. The behavior of Pretentious is somewhat random for believability, but can be fully customized using the settings interface.

Pretendtious won the following awards at HackGSU Fall '17:
Funniest Hack Award
Judges Choice Award
How we built it
Pretendtious is built with a hodgepodge of Python, bash scripts, and applescripts. The settings interface was built with PyQt5, which is a GUI library for python. The settings interface interacts with the local cached data for the application to determine the behavior of Pretendtious when it is launched.

The behavior of the application is dictated primarily by a suite of applescripts that I wrote from scratch, along with some bash scripts that are patched into the apple scripts.
What I learned
I learned a lot about how applescripts work, how to build GUIs for Python, general better programming practices, and also how to produce an effective promotional video.
Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

Silly Promotional Video
Promo video courtesy of Jack Sims
code
country music generator
Country Music Generator

Country Music Generator

Proof that modern country music is all the same

Demo Video
Overview
Let's face it - country music all sounds the same these days. In fact, it's so easy to throw together the lyrics for a country song, even a computer could do it.
What it does
My country music generator writes country lyrics by building a type of statistical model called a Markov Model. The training data it uses is a set of lyrics from the top ~80 country songs each year from 2013 - 2017. This makes the dataset about 97,000 words long.

How I built it
I scraped lyrics off of azlyrics.com with python and the requests library. I then congregated all of the lyrics into a single text file. The markov model, which is written in java, then builds the model from that text file, and assigns a length of a k-gram (the length in characters at the end of the current generation to be considered when adding a new character). Once the model is built, any arbitrary length of text can be generated.
What I learned
I learned that country music is just as similar and cookie-cutter as I thought. The generator worked better than I had anticipated, and I got some very funny results from it. Also, certain words are extremely common in the genre. Below is a word cloud from the training data.

Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

code
deeplearning pokemon
Deep Learning Pokemon Generation

Deep Learning Pokemon Generation

Can we use Deep learning to create new Pokemon?

Demo Video
Overview
Generative Adversarial Networks are really hot right now in the field of deep learning, and for a good reason. GANs are incredible at generating realistic data. We decided to use one to generate pictures of new pokemon. This project is best explained by watching the demo video above.

How we built it
This project was for a Deep Learning course at auburn. For the GAN we used a tool called hyperGAN running on my desktop with a GTX 1060, and we wrote a VAE ourselves using Keras.
What I learned
I learned a massive amount about the way that GANs work, as I was required to in order to use on and present intelligently about it. I also learned a lot about Variational Autoencoders, since I had to write one.

Project Code

Unfortunately this project's code is not on github. That is because the original repository became so full of training data and generated images that it was too large to be hosted. However, you can still download the code for my VAE and my augmentation script via the round button at the top right.

code
bananagrams
Bananagrams Solver

Bananagrams Solver

Let the computer do the work for Bananagrams

Demo Video
Overview
If you're not familiar with bananagrams, its a game similar to scrabble in which you are given a set of tiles, and you must make a valid "scrabble-like" board using as many tiles as you can. It turns out this can be really difficult. That's why I wrote a script to do this for me.

How I built it

This project was made for hack_state at Mississippi State University. Originally, we had much more ambitious goals than just a script. My other team members were to work on a front end where you could simply take a picture of your tiles, and be given back an arrangement of them. Due to overestimations in our teams ability and time constraints, we settled for something much less at the hackathon. After the event, I extracted the script that I had wrote, and tweaked it to be standalone with simple text input. This is the current state of the project.

The project uses a combination of a prefix tree (or "trie") and a depth first search. A dictionary of valid words is contained in the project folder, and a prefix tree is built with that dictionary. When given an input of letters, the program finds all possible words to make using the letters at any given point, and tries to place one on the board in a legal way.

The program follows a "longest first" heuristic, in which longer words are prioritized over smaller words in order to get rid of as many tiles as possible. If not all tiles can be used, the configuration which uses the most tiles is displayed to the user.

What I learned
I used this event as an opportunity to further my python skills, and also learn about prefix trees. I also learned to be conservative with estimations regarding how much can be done in two days.

Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

code
checkers
Reinforcement Learning Checkers

Reinforcement Learning Checkers

Overview
This was the final project for my AI class at Auburn during my junior year. The best way to learn about this project is to download and read our project report. It is extremely detailed, and goes into every step of the project.

How We built it

We built this project completely from scratch. No external machine learning or game engine libraries were used. We wrote our own game engine for checkers in python, and we wrote all the logic for the agent to learn, store data, and make decisions using Python. Again, more details can be found in the project report.

What I learned
This was probably the most pivotal class for me at Auburn. I went in to the class knowing almost nothing about AI, and by the time I was done I knew it was what I wanted to do for a career. This project, along with others in the class opened my eyes to the possibilities of machine learning.

Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

code
hq bot
HQ Trivia Bot

HQ Trivia Bot

Real time bot to answer HQ Questions

Demo Video
Overview
**DISCLAIMER: I have not, nor do I intend on using this bot for financial gain. I have never won HQ using it. It is purely an educational endeavor. **
If you're not familiar, HQ is a wildly popular trivia app for mobile devices. It runs on a schedule, and occurs once or twice daily like a TV show. Participants tune in from their mobile devices when the game begins to answer questions. The participants that make it past a certain number of questions share a cash reward that is split between them. Lots of people have tried to automate answers to HQ with little success. I wondered if I could do better.
What it does
When a question pops up on my phone screen, I take a screenshot, and notify my computer that I took a screenshot. The computer then grabs the photo from my phone's file system and tries to find an answer to the question. It is accurate about 70% of the time, according to my collected data of about 45 questions.

How I built it
My bot is written in python, and uses an open source library called tesseract-ocr for character recognition on my phone. The bot then hits google and wikipedia with variations of the question/answers. A confidence score is programmed in to each, and a voting process occurs between the google results and the wikipedia results for a final decision. The answer is then read aloud back to me, usually within 5 seconds of screenshotting.
What I learned
I learned that ocr can be very difficult, and that HQ really does not want people trying to cheat their game (The reason I had to use screenshots instead of screen mirroring was because the app shuts down if you try to record or mirror the screen).

Project Code

You can find the code for this project, and all my other projects via the round button at the top right of this popup window.

code
ASL game
ASL Game

ASL Game

Simple Phaser game to learn ASL alphabet

Overview
ASL, or American Sign Language, is a language used by hundreds of thousands of deaf and hearing people across the world. This is a simple game i made using Phaser to help myself practice learning the ASL alphabet.
What it does
Images of different ASL letters flash on the screen, and you simply press the corresponding letter on your keyboard. If you get it correct, you get a point. If you guess incorrectly, you lose time on the clock. The game ends when the timer reaches zero.
Demo
You can try the game yourself by clicking here.

Future work
This project is unpolished and somewhat unfinished, because I made it primarily to help myself learn quickly, but I still have a goal of polishing it up and releasing it so that more people can benefit from it. I want to add sounds, animations, alternate pictures, and an option to share your scores with your friends.

code
blog
Getting a Job as a CompSci Student (Article)

Getting a Job as a CompSci Student (Article)

A practical guide for college students

Overview
This is an article I wrote for students who don't know how to go about applying for a job after college, like I did. As of April 2020, it has received 3.3K views and 828 full reads. Read the article here!
code