Filter Projects by Tags

close

Other Active Tags:

Filter Projects by Type

MINDecoding

2020 - Present
  • Python
  • AI, ML, DL
  • PyTorch
  • Tensorflow
  • CUDA
  • Signal Processing
Grad School

This project is the focus of my Master's research at Oregon State University.

From my NSF Research Fellowship Proposal: The objective of my research is to develop novel adaptive movement intent decoders that leverage (1) human movement models, (2) extensive prosthetic sensor data, and (3) human feedback in order to learn from the user over time, allowing naturalistic, fine-grained and intuitive control of prosthetic limbs.

This software is comprised of a library of Deep Network-based Decoders, called MINDecoders, and the corresponding GUI, called The MINDecoding-Interface, that provides the functionality to collect EMG or EEG from real subjects, train decoders with that biological data, test those decoders either online with a real subject or offline with existing datasets, and analyze those tests using a variety of result metrics.

My research is focused on label estimation methods and online learning to enable the semi-supervised adaptation of the deep networks within these decoders. I just received my M.Sc. for my thesis entitled "Adaptive Movement Intent Decoding for Intuitive Control of Neuroprostheses". You can check out the abstract here.

The MINDecoding GUI

Real-Time DTW

2021
  • Cython
  • Signal Processing
Grad School

As part of my Master's Thesis research, I derived and implemented a new variation of real-time Dynamic Time Warping (DTW). This algorithm builds upon the pre-existing real-time DTW algorithm called SPRING, which is designed for pattern detection. More specifically, this method finds subsequences in a real-time input sequence that match a pre-defined template according to the DTW distance metric.

This novel variation incorporates an adaptive vertical scaling factor between the stored template and the real-time input. This allows the algorithm to detect subsequences of varying amplitudes, despite using a template of a predefined amplitude. I'm currently working on a publication for this algorithm.

Pyrameterized

2021
  • Python
  • Unit Testing
  • Continous Integration
Grad School

This is a Python configuration utility library that I've developed to make the parameterers of Python classes shareable and updateable using dictionaries. It also makes saving/loading objects to/from json quite simple.

In addition to using this project in Python projects containing shareable configurations, I have used this project to learn unit testing and Github workflows for Python. The Github repo contains a slick workflow that formats, lints, and tests the code, and creates test coverage and release version badges.

Robotic Hand

2021
  • C/C++
  • Arduino
  • Control Systems
Grad School

A fellow OSU mechanical engineering student and I are developing a 3D-printed robotic hand for use in my research on ML-based control of prosthetic arms. For this project, I created a simple C++ PID Controller for the Teensy microcontroller in the 5 fingered robotic hand, using the Arduino IDE for programming. I also created the Serial interface that allows the MINDecoding-Interface software to control this robotic hand. We will be completing version 1.0 of the hand soon, with version 2.0 featuring a wrist and/or forearm attachment for intact subjects.

Embodied Dataset Transformer

2021
  • Python
  • SAT
  • Embodied AI
Grad School

For my graduate Computational Theory project, fellow student Jacob Krantz and I created a Dataset Transformer that culls episodes from embodied navigation datasets. More specifically, we developed a Python tool that uses SAT Solvers to find the largest subset of episodes in existing embodied navigation datasets such that an agent can inter-navigate between them all.

I derived the reduction to the minimum vertex cover problem (MVC) and the maximum independent set problem (MIS), and derived the MAX-SAT equations necessary for solving these problems with off-the-shelf SAT Solvers. This SAT-based method proved to be even more efficient than standard MVC solvers in common Python libraries, as we show in our final paper.

Habitat Simulator from Jacob's VLN-CE Paper

Audio Stretch

2020
  • Python
  • Cython
  • C/C++
  • Signal Processing
For Fun

As a fun project based upon my brother Christian's work, I created the Python3 AudioStretch program that matches the beats of a stored audio loop to a live audio input.

To do this, I used standard Python libraries for audio I/O, and then wrote my own Cython wrappers for the popular C library rubberband for audio stretching and the BTrack library for real time beat detection. I also developed my own custom Python CircularBuffer class to store live audio buffers efficiently. And finally I developed the master program that parses audio files to create loops, and then stretches the loop to match the beats of either a live input or an mp3 input. This was a great learning experience for Cython and real time signal processing in Python.

Although beat detection and tempo matching is a difficult signal processing problem, the final program works well in matching beats, even during tempo changes. All that's missing are some more detailed safety checks to ensure that the beat tracker doesn't skip beats.

Mt Bachelor Parking

2020
  • Python
  • REST
  • Networking
For Fun

As an avid alpine skier, the past year of covid made access to skiing more difficult, with Mt. Bachelor offering only limited parking reservations. Therefore, I developed this simple Python Flask http server, to poll Mt. Bachelor's parking system through Parkwhiz's REST API.

This simple web server allows the user to enter requested parking dates, and then once the system finds a parking reservations, it texts the user's cell phone using Twilio. The Twilio texting interface also lets the user add, accept or cancel parking reservations via text. This was a great side project for learning about simple web servers, Twilio's texting interface, and integrating with standard REST APIs.

Crossword Recognition

2020
  • Python
  • Computer Vision
  • AI, ML, DL
For Fun

For this fun project, I used my computer vision skills to create a crossword recognizer. This recognizer uses standard computer vision techniques, such as image filtering, contour and keypoint detection, and perspective transformations, to first straighten and crop the crossword. Then the individual cells of the crossword are detected using similar techniques. Lastly, I used a pretrained deep network for optical character recognition, i.e. to detect all the hints for the crossword. All of this was implemented in Python using OpenCV.

From left to right: original crossword, detected text, cropped crossword, and the identified crossword shape.

3D Scene Reconstruction

2020
  • Python
  • AI, ML, DL
  • Computer Vision
  • PyTorch
  • CUDA
  • Distributed Computing
Grad School

AI agents that can interact with physical environments are often trained in perceptually rich simulations before being deployed into the real world. To mimic affordances of physical environments such as unconstrained movement and vision, simulated 3D scenes can be reconstructed from real-world scenes using sparsely- captured high-resolution RGBD images. In this work, we analyze the discrepancy of visual fidelity between camera captures in reconstructed scenes and raw RGBD images of the Matterport3D dataset, home to many embodied AI tasks such as vision-and-language navigation, PointGoal navigation, and embodied question answering. We show that a classifier can be trained to discriminate between reconstructed scene viewpoints and raw RGBD images. Further, we rank scenes by reconstruction quality using a keypoint matching algorithm. Finally, we apply a domain adaptation method, “Goggles”, to improve the visual quality of agent perception used previously on the Gibson dataset.

A qualitative example of the reconstruction improvement. From left to right: sim reconstruction, autoencoder, our improvement, original image.

Superlative Learning

2020
  • Python
  • AI, ML, DL
  • Computer Vision
  • PyTorch
  • CUDA
  • Distributed Computing
Grad School

Superlative reasoning, which requires identifying an instance from a set with the highest or lowest degree of some attribute, is often overlooked in the analysis of deep networks, despite the increased complexity of superlative tasks as compared to non-superlative tasks. We attempt to determine whether deep networks can learn superlative tasks and whether the increased complexity results in decreased performance. We first test a simple visual superlative task by teaching a CNN to identify the longest lines or largest polygons in an image. Our simple CNN learns this task easily. We further extend the problem to semantic goal navigation (SGN), where an agent must navigate an environment following language instructions. We extend the gym-miniworld virtual environment to support language grounding and superlative instructions, and train a Gated-Attention network using PPO on both superlative and non-superlative instructions. Unfortunately, results indicate that our agent was unable to learn SGN in this environment, eliminating our ability to analyze the performance of the network on superlative tasks.

An example scene from our custom gym-miniworld environment, for which an example instruction could be "Go to the tallest green object."

The Smart Helmet

2018-2019
  • Java
  • C/C++
  • Embedded
  • Unit Testing
  • RTOS
Undergrad

For my year-long senior design project at Gonzaga, two fellow engineers and I designed, developed, and built the Smart Helmet. The Smart Helmet is a helmet for cyclists that uses vehicle-to-everything communication (V2X) to communicate with nearby vehicles and provide collision warnings to the biker.

For this project, my two teammates and I built the hardware for the helmet, including 3 revision of PCBs, designed and wrote the core firmware in C on the ultra low power Apollo 2 Blue microcontroller, and also wrote a Java desktop Traffic Simulator which provides an advanced GUI for generating and driving cars, which we used for testing the Smart Helmet. I focused on the core firmware, which uses FreeRTOS as its real time operating system. I designed and wrote the logic and advanced collision detection on the helmet and in the Traffic Simulator, and I also helped write part of the GUI for the Simulator.

Abstract: arrow_drop_down
From left to right, top to bottom: The Smart Helmet, the perfboard prototype, the PCB design, the Traffic Simulator

Skyware Inventory 2

Summers 2018-2019
  • Full Stack Web Dev
  • Java
  • MySQL
  • HTML, CSS & JS
  • Spring Framework
  • HTML Templating
  • ORM
  • Agile
  • REST
Industry

As a Software Development Intern at Open Sky Software, Inc., I spent multiple summers upgrading their flagship inventory tracking product, Skyware Inventory.

As a full stack Java web developer, I used the Spring Framework, along with Hibernate and Thymeleaf, to completely redesign the entire application. I designed and coded an advanced transaction manager in Java and MySQL that tracks inventory through time across multiple items, users, and locations. I incorporated industry standard reporting, such as LIFO, FIFO, and AVG costing. I also developed advanced front-end Javascript to handle editable tables with custom fields, ajax autocomplete, and flexible form validation.

This version 2.0 of Skyware Inventory was just released in Spring 2021! It is very slick, especially the new mobile version (which I designed and implemented almost completely by myself).

The new mobile-friendly Skyware Inventory interface.

Othello AI

2019
  • Java
  • AI, ML, DL
Undergrad

During my last semester at Gonzaga as an undergraduate, my teammate and I built an Othello playing AI for my Artificial Intelligence elective. I wrote this in Java, using Swing for the simple interface. The program allows the user to play against the AI. At the end of the class, all the teams competed in a tournament to determine the best AI, and mine won 1st!

This AI uses best first search with alpha-beta pruning to search the state space. Each move by the AI was required to complete within ten seconds, allowing this AI to search about 8-10 steps ahead in the game. The search uses an advanced heuristic value function that uses 8 different characteristics of the board to determine the value of the board's configuration. These characteristics include the score, the number of moves available, the number of corners taken or available, and the number of stable and unstable tokens. The AI also uses Zobrist Hashing to store all calculated heuristics in a hash table to increase the efficiency of the search.

The Othello Swing UI

Ethernet FPGA Communication

2018
  • VHDL
  • FPGA
  • Networking
Undergrad

As the final project for my senior year Digital Design class at Gonzaga, a fellow student and I successfully designed and programmed two FPGA dev boards in VHDL to use high speed Ethernet communication. The communication allowed the two dev boards to turn each other's LEDs on in different patterns using their switches. For this project we used Intel's Ethernet IP in Quartus to program the Ethernet hardware onto the FPGA.

This was one of my hardest projects at Gonzaga University. We were the only team in the class to successfully commplete the project according the original specifications. Completing the project required a ton of extra hours before the deadline(most of which was spent reading the Ethernet Hardware specifications), but it was definitely worth it when we were able to show off our working design to the class.

Extras:

The Altera FPGA development board

Association Rule Mining

2018
  • Java
  • Hadoop
  • AWS
  • Distributed Computing
Undergrad

This was the final project for my Parallel and Cloud Computing Elective. This is a Java Hadoop MapReduce program to mine the confidence of association rules that we ran on AWS. These association rules were parsed from large input files of concept identification codes. On the AWS EMR clusters, the execution time of the program was tested for different cluster sizes, for different amounts of input files, and using both the Hadoop file system and the Amazon S3 file system.

Extras:

Template Web App

Summer 2017
  • Full Stack Web Dev
  • Java
  • MySQL
  • HTML, CSS & JS
  • Spring Framework
  • HTML Templating
  • ORM
  • Agile
Industry

As a Software Development Intern at Open Sky Software, Inc., I helped prepare a 'Template' Web Application to serve as the scaffolding for the firm’s future web applications. This web app runs on a Tomcat server, and uses Java for server side business logic along with a MySQL database, and employs HTML5, CSS Flex, and Javascript for the front end. Over the course of this project, I

  • Implemented the Model-View-Controller architecture in Java using the Spring Framework, with Hibernate to interface between Java entities and the MySQL database;
  • Incorporated the Thymeleaf HTML5 templating framework to create and serve views;
  • Learned best practices in HTML5/CSS leveraging the LESS pre-processor;
  • Tested the application for all interface modes (desktop, tablet, and mobile);
  • Developed custom error handling and detailed audit logging;
  • and lastly, learned the agile development framework Kanban.

Zoolander

2017
  • Java
  • Spring Framework
  • MySQL
Undergrad

This final project for my Database Management class at Gonzaga is a Java command line interface that allows the user to interact with a custom Zoo database. This imitates a program that might exist for a Zoo to keep track of all its animals, their feeding patterns, and the feed purchases.

This project was designed to incorporate many advanced SQL queries, such as joins, groups, aggregates, and subqueries. This program was written using the Spring Shell, which provides a very nice CLI.

Extras:

Password Manager

Summer 2016
  • Java
  • Spring Framework
  • Encryption
  • Agile
Industry

For my first summer as a Software Development Intern at Open Sky Software, Inc., I designed and programmed a Java command line password manager using the Spring Shell Framework to store and share encrypted company passwords among employees. To do this, I learned cryptographic libraries and best practices for data encryption, including encrypting data at rest and in transit. I also learned Subversion and Git software version control, and I reinforced proper coding practices by shadowing veteran employees.