Projects
A few from over the years:
- Photomosaics
- MIT Moodmeter
- Assassins: the App
- Dejavu: Audio Fingerprinting in Python
- Bloompy: Bloom Filter in 29 Lines of Python
- PeerChat: Decentralized, P2P chat in Golang using Kademlia DHT
- Deuces: Texas Hold’em Hand Evaluation in Python
Photomosaics
Using Facebook’s Faiss library + OpenCV to create mosaics from your family / mobile photos. Simply give it a directory of files and a target image and you can create photos reconstructed entirely from other photos in your “codebook”.
You can also create GIFs from videos, use an interactive GUI, deploy through Docker, and do face recogition as well. Check it out here:
https://github.com/worldveil/photomosaic
MIT Moodmeter
Using computer vision to detect mood around the MIT campus with an interactive installation that recognized facial expressions in real-time. An analysis on correlative markers for happiness among students was conducted.
Published in Ubicomp ‘12. Paper availible in PDF.
Assassins: the App
iOS, Android, and mobile web Assassins MMORPG IRL.
We got about 1,000 MIT students running around with spoons and smartphones to disrupt class on several occassions on campus.
Used the Open Facebook Graph API — may it rest in peace — circa 2011 to match people with Facebook connections playing the game and mathemtically minimize the number of strangers you’d need to interact with to play.
Dejavu: Audio Fingerprinting in Python
An open-source implementation of a spectral landmark-based audio fingerprinting algorithm for detecting duplicate versions of audio from a corpus of tagged tracks.
Basically what Shazam does, but using only Python and NumPy.
A not so short post about how it works here.
Bloompy: Bloom Filter in 29 Lines of Python
A probabilistic data structure in which we can ask membership set queries with no false negatives and minimal false positives using only a string of bits.
For a given approximate number of elements (n
) and a desired false positive probability (p
), there exists an optimal setting of:
- length of bit vector (
m
) - number of hash functions (
k
)
in order to minimize the space required while still maintaining p
under condition of n
elements or less. These optimal settings are found through the equation for m
:
and for k
:
Find the implmentation and explanation here, but know that it’s something I made on a car ride, not a production-ready library.
PeerChat: Decentralized, P2P chat in Golang using Kademlia DHT
Class project for MIT Distributed Systems class. A chat service with no central server based on the same distributed hash table (DHT) data structure that enables BitTorrent.
Find the code in Golang here.
Deuces: Texas Hold’em Hand Evaluation in Python
Originally built for MIT’s Pokerbots AI competition and ported to Java, this library computes scores for texas hold’em poker hands in a very efficient manner using bit math and a series of hash tables.
Find the code here.