Inspiration

Being a group of friends, we order a lot of food collectively and pay back whoever ordered all the food. However, this process requires a lot of math to make sure everyone pays back their fair share. During this process, a lot of mistakes can happen such as paying back the wrong person, the amount calculate ends up being incorrect, and so many more. To avoid all this, we thought we could make an application which makes this process significantly easier by computing all the values for each person in the group order while also factoring in tax

What it does

Our application, DivyUp, makes the process of splitting a group bill significantly easier. We allow users to enter their group members for the order and then scan the receipt they were given. After this, the app displays each persons name and their respective share for the order.

How we built it

DivyUp was made as a PWA (Progressive Web App) for cross-compatibility with mobile devices while maintaining a native look and feel. PyTesseract was used as the OCR engine for scanning receipts, and Flask was used as middleware to connect the Python OCR with the JS UI.

Challenges we ran into

One challenge was improving the accuracy of the OCR system. After experimentation, we realized that the JS implementation of Tesseract was less accurate compared to PyTesseract, which forced us to redesign our app with Python API compatibility. To further improve OCR, we also used a variety of pre-processing techniques, such as kernel convolution for denoising.

Accomplishments that we're proud of

We are proud of being able to deliver a fully functional application within the deadline. We are also proud of our ability to work together as a cohesive team, as well as our resilience in the face of various technical and practical challenges. Furthermore, we are extremely proud of our use of OCR, and our integration of OCR with our webapp via an API that we created ourselves.

What we learned

We learned a lot about the cycles of app development, as well as how to divide up work for collaborative projects. We also gained concrete knowledge on OCR and image processing techniques, in addition to Flask, PWA, and Flexbox for UI. Building on this, we learned a number of different tools for preprocessing images with open CV. Given the nature of our data, it was important for us to preprocess our data. However, it was also important that we used the right preprocessing techniques as each reccomended method that we found online was effective, but only worked well in certain situaions and with only few inputs. We learned how to effectively implement different solutions that we found online in order to solve issues that we faced during development. For example, we learned about the differences between using Augmented thresholds, normalization, and kernel sharpening (all of which have the same perform the same task but have varying impacts given different inputs).

What's next for DivyUp

We plan to scale this application upwards by including integration and compatibility with various money transfer applications such as Venmo, Zelle, and CashApp. This will allow the owner of a bill to send requests to their friends in order to streamline the 'paying back' process.

Built With

Share this project:

Updates