Even after implementing the buckets, we didn't get very great accuracy. Often, some fingers would register in the wrong state, especially fingers that were supposed to be half-bent. We realized that many sets of finger positions were not an ASL sign for a letter. We decided to relax some constraints by saying that for each letter, fingers could be in multiple positions and still be decoded as that letter. This greatly increased the accuracy of the system, and made it SO MUCH COOLER!
Another important thing that we added was a debouncing/error-checking algorithm. For debouncing, we stored the last letter printed, and ensured that each letter could only be printed once per successful decode. For the error-checking, we made an array of recently decoded letters. When the past seven letters are the same, the letter is printed. This helped to stop the printing of transition letters - letters that get decoded while the hand is moving from one letter to the other.
P.S. pictures, video, and final report coming soon!