Demonstration of Gesture Recogniton Feature Matching

Gesture Recognition

Gesture Recognition using SIFT Feature Matching

One of the final projects I completed as part of my University of Minnesota coursework was OpenGesture, a hand gesture recognition system with the goal of being operable on any home user computer. To accomplish this goal, myself and another member of the class used the Scale-Invarient-Feature-Transformation (SIFT) feature matching algorithm to match images captured by the user’s webcam with images used by the user to set a gesture. This had the advantage of allowing the user to create virtually limitless gestures, including those that involved objects, facial expressions and more.

We chose SIFT feature extraction due to its relatively lightweight approach to gathering features for matching, allowing it to run without the help of a GPU or dedicated image processing hardware.

To see the report and github repository visit one of the links below.

Wordle Move 1
Wordle Move 2
Wordle Move 3
Wordle Move 4

Auto Wordle

An Genetic Evolution Algorithm to Solve Wordle Puzzles

Having enjoyed the then newly popular Wordle puzzle game, I decided to create and implement a simple Artificial Intelligence Model capable of solving these puzzles with the goal of beating the average human player. I developed 2 algorithms, both with similar success levels, slightly beating an average human player and learned a lot along the way.

The first algorithm implemented both genetic evolution and the minimax algorithm. Described in more detail in the linked report, the basics of the algorithm are as follows:

  1. Build a generation of 100 agents, each of which solve a standard test set of puzzles.
  2. Each possible guess is given a set of descriptors, and each agent has (initially random) different modifiers to those descriptors, thus deciding what descriptors are most important to consider when considering a guess
  3. Each agent uses the minimax algorithm to check possible future game states from each possible guess and chooses the most favorable guess.
  4. This is repeated over multiple generations, with each new generation being a product of the best agents from the previous generation.

This algorithm was slightly more successful than an average human player, so experiment two tested if the minimax algorithm was even needed, or if simply guessing the word with the highest assigned weight would work instead. The results of these experiments and more information about the algorithm can be found in the linked report. The github repository containing all of the source code can also be found below.

UML Diagram of Drone Search and Rescue Project

Drone Search and Rescue

Collaborative Group Project to Simulate Drone Search and Rescue

One of the University of Minnesota’s required courses, CSCI 3081w, is a semester-long exercise in group collaboration. As part of a team of 5, our goal was to create a search and rescue simulation that utilized drones and a map of the University of Minnesota’s campus. At the beginning of the instructor supplied simulation a robot was randomly placed in the map, and we were tasked with creating a drone, operating it using a search algorithm (while being mindful of battery range), using it’s built in virtual camera to capture images of the map, run an image recognition algorithm to detect the robot and then recover and return the robot to a hospital on the map.

As it was a group project, each group member was responsible for different aspects of the code. My responsibilities were the creation and implementation of the drone’s movement after launching, including determining the best strategy for patrolling the map and the implementation of the image processor for detecting the robot in the pictures taken by the drone.

I consider this one of the most valuable class experiences that I have had during my education, as it not only taught the proper principles for git based collaboration, but also challenged me to work with members of a team that might not have the same goals or work ethic.

As the project is owned by the professor of CSCI 3081w, the repository is private and unable to be forked publicly. As such a copy of the source code is linked below instead.

Image of Bash Shell Working

Bash Shell

Replica Bash Shell for Unix Systems

As part of my University of Minnesota CSCI 4061 coursework, a classmate and I collaborated to create a basic UNIX interpreter capable of replicating the popular BASH shell used in most UNIX distributions.

In order to accomplish this, we created a main process to process each command and corresponding tokens (for instance, in the command ls $filepath, $filepath is a token). To execute the command, the main process creates a child process and opens a pipe to said process in order to pass along the information needed to execute the command.

Unfortunately all 4061 github repositories are private and cannot be forked outside of the organization; however a copy of the source code is linked below.

Image of Source Code for This Website

Portfolio Website

Responsive Website using HTML, CSS and Javascript

During my time at the University of Minnesota, my coursework primarily focused on back-end development and AI algorithm creation. As a result, my involvement in web development has been relatively limited since my high school years. Nonetheless, I acknowledged the importance of acquiring a thorough understanding of how web development operates and how it relates to my primary areas of interest.

In the months following my graduation in December 2022, I embarked on a self-guided journey to learn HTML, CSS, JavaScript, and eventually React and database integration. Through practice and enrollment in multiple online courses, I have been teaching myself these web development technologies. One of my goals was to have a functional portfolio website by Summer 2023. To achieve this objective, I have developed this website from scratch, opting to write all the HTML, CSS style sheets, and JavaScript scripts myself instead of relying on pre-existing libraries. By taking this approach, I not only accomplished my goal but also ensured a profound grasp of the fundamental aspects of web development. This, in turn, enables me to better comprehend and engage with more advanced concepts as I encounter them in the future.

For a complete copy of this website's code, please refer to my GitHub repository linked below.

Image of My Server

My Server

A Personal Home Server for Mass Storage, Serving Media and Hosting Webpages and Tools

As I became more interested in photography (read more below) and began to amass large raw photos, I recognized the need for a storage solution capable of storing everything I had already with the ability to be expanded to store more in the future. While there exists a lot of good Network Attached Storage devices, I desired something with more power and expandability. After some research I decided on a server running UnRAID. While I didn’t know it at the time, my server has grown to be much more than just a file storage system, and has become an integral part of my daily life.

Alongside file storage, my server now runs multiple docker containers, each with their own unique purpose. Some of the most used include

  • Plex:
    A media delivery platform often described as a self hosted Netflix.
  • Radarr and Sonarr:
    A media grabbing tool for the automation of finding, downloading and organizing new media releases.
  • LetsEncrypt:
    A reverse proxy service to enable the safe and secure hosting of web pages like this one (which is being hosted on said server).
  • ApacheGuacamole:
    A webpage based VNC/remote desktop client for accessing machines on my local network from outside of the network safely.
  • Nextcloud:
    A self hosted cloud storage platform, like Onedrive or Google Drive.
  • Various Game Servers

The server has been through multiple hardware iterations since its inception, including being custom watercooled, but I have settled on a power sipping 11th Gen i5 with integrated graphics (for extremely efficient media transcoding). Expansion slots are taken up by an LSI 9207-8i SAS card and a Mellanox Connect-X3 10-gigabit card.

Screenshot of Pfsense Router Dashboa

Router and Home Network

Replacement for a Tradional Home Router running Pfsense

Motivated by dissatisfaction with the limited options and functionalities offered by off-the-shelf home routers/access points, I embarked on the endeavor of constructing my own solution. My aim was to create a more robust and feature-rich system that could establish improved connectivity with other devices on my network. After conducting thorough research, I opted to build a router utilizing standard PC components housed in a 2U case, operating on pfSense—an open-source router/dns/firewall operating system—alongside a Ubiquiti access point for wireless connectivity.

The initial conception of this project arose during a period when I shared living space with six roommates. In such an environment, I desired the ability to segregate my server and personal devices from those of the other network users. Additionally, it was crucial to establish a clear separation between guest devices and the devices owned by the occupants of our house. With pfSense, I found a suitable solution that facilitated the creation of multiple VLANs, each with its own distinct IP address pool, effectively isolating network traffic. Moreover, by constructing a custom solution, I was able to implement 10-gigabit networking between my primary desktop, router, and server, thereby significantly enhancing file transfer speeds. Furthermore, pfSense afforded me control over open ports to the wider internet, enabling the secure hosting of webpages, including the one you are currently accessing.

Photo of Minneapolis taken by me

Photography

Capturing and Sharing the Twin Cities and More

During my Freshman year of College and the year before the Covid-19 pandemic I discovered a passion for photography, specifically photography of cityscapes. During this year I ran a successful Instagram page with the goal of posting a different photo every 2 days. While my photography mainly focused on capturing the Twin Cities of Minneapolis and St. Paul, I did get the opportunity to travel and share some beautiful photos from cities such as New York, Chicago and Washington D.C.

I also had the opportunity to showcase my work at a University sponsored art festival and at a local coffee shop. Furthermore, I sold prints of some of my photos to members of the local community.

During this time Minneapolis and the surrounding area was also shook by the death of George Floyd and the ensuing protests. I was able to use my photographic skills to capture moments from these protests, peaceful and violent, which helped me and others around me grasp the full brevity of the situation and understand the feelings of those more directly afflicted.

Photo of My Current Main Computer

My Computer(s)

My Custom PC Buidling Hobby and Business

Building custom computers has been a long-standing passion of mine, stemming from the moment I assembled my first Gaming PC at the age of 15. While my interest in computer gaming, particularly playing with friends, has undoubtedly played a role, my enthusiasm for custom PC building extends far beyond mere gaming purposes. Since 2015, my personal computer(s) have undergone numerous iterations, each one distinct and increasingly intricate in design.

In recent years, I have undertaken the creation of multiple custom water-cooled systems, with a penchant for employing hard tubing. This choice not only yields visually captivating systems but also ensures optimal cooling performance. The combination of aesthetics and efficient cooling has become a hallmark of my builds.

During the pandemic, the availability of Graphics Cards, an essential component for running video games, was severely constrained. Capitalizing on this situation, I seized the opportunity to establish a small-scale PC building enterprise. By sourcing reasonably priced components, both new and used, I meticulously integrated them into systems that I then sold at a fair and affordable price point. This endeavor allowed me to cater to the needs of those seeking high-quality PC setups despite the challenging market conditions.

Image of My dad and the cars I work on.

My Honda Civic

Daily Driver and Ongoing Project

My 2012 Honda Civic Si has been a captivating project and a source of daily gratification since its acquisition in early 2020. My interest in automobiles was sparked by my father, Jeff, who dedicated his career to engineering engines and power systems for prominent Fortune 500 companies. This vehicle, along with his own collection of vehicles and motorcycle, has become a remarkable avenue for bonding and spending quality time together in recent years.

In addition to meticulously carrying out all standard maintenance procedures, I have undertaken several modifications to enhance the car's performance and driving experience. These modifications include the installation of a new suspension kit, which imparts a more assertive stance and improved handling characteristics. Furthermore, I have replaced the clutch and installed a lighter flywheel, resulting in heightened torque output and enhanced overall performance. Moreover, an aftermarket head unit and stereo system have been integrated to augment the daily driving experience. These modifications aim to optimize various aspects of the vehicle's functionality.

With my unwavering dedication to this project, I intend to continue modifying and refining the vehicle in the future. By pursuing further enhancements, I aspire to establish a distinct and customized identity for my car.