Inspiration

We wanted to use machine learning in a practical way, identifying the breed of cute pets. Secondarily, we also wanted an easier tool for finding animals to adopt or buy without knowing too clearly what you are looking for. With our tool, a user can now upload a random picture of a cute animal and find out where to get an animal just like the one in the photo.

What it does

I Want That Animal takes in a picture from the user, uses Google Vision to generate various labels, then filters down those labels to the ones most relevant to the user. The user selects which label they would like to search for, then I Want That Animal scrapes Kijiji for postings with that animal in the Greater Toronto Area.

How we built it

The application is build using Node.js.

Challenges we ran into

The Bootstrap Carousel and Cards displaying the pictures of the animals scraped from Kijiji on the “results” page were always deformed in terms of width/height. The image tags were taking up too much space despite the images themselves not filling up the whole tag, trying to fix it broke the images. Seeking help from a mentor at the hackathon greatly helped resolving this issue.

We had some issues uploading files and keeping them in the server. First it wasn’t showing up at all, then it was showing up as a plain file, and finally with “undefined” file names. This was a pretty frustrating problem that set us behind some time. Thanks to help from the Multer Library, it made handling files in our server quite a simple solution. Huge recommendation for those who develop Node.js apps.

Accomplishments that we're proud of

Google Vision is a very general tool that attempts to see everything from grass to mammals. We are really proud we managed to take their many results and distill it down to the ones most relevant to the user by filtering out common irrelevant labels in our use case. We think it is a really good example of how we can use logic to turn a very general machine learning model into something useful for us without having to use transfer learning.

What we learned

We need to plan more before starting a project to ensure everything we are working on will work together seamlessly. Furthermore, tests should be written so we don't waste time worrying if we broke the project.

Future Improvements

  • We could increasing the accuracy of our project by filtering out more inaccurate labels through automatic testing. - - More websites could have been scraped, as per the initial plan. Although, we had trouble finding more sites that sold pets.
  • Ajax and/or modern Javascript libraries could be used to avoid many redirects in the application-use cycle.
  • Adding images of possible labels in the label selection stage to help users identify the breed. The picture the user uploads may not contain enough information to definitively declare a specific breed. Displaying pictures of the possibilities and asking the user to choose one lets the user insert more information into the system, ultimately improving their experience.

Slideshow

For more information about our project, checkout our presentation! https://docs.google.com/presentation/d/1WpyL1Fy4kkmTFYfPnZ9Vk6Fp1tv71IPt4OFoM4Xrl_I/edit?usp=sharing

Share this project:

Updates