Code Monkey home page Code Monkey logo

pokedex-app's Introduction

Pokedex-App

Using AI, take a picture of an unknown Pokémon and learn about its attributes. Completed for IPRO 497 at Illinois Tech

Problem Statement

Pokémon enthusiasts can use this application and take a photo of any gen 1 pokemon and be provided with its name, type, and attributes (its pokedex information) so that they may easily be able to know which Pokemon to use in battles and learn more about the Pokemon in general.

Customer

Description

Any aspiring Pokémon enthusiast, Pokémon game player, or watcher of Pokémon anime, especially those who don't have much prior Pokémon experience.

Other customer(s) or stakeholder(s)

  • Diehard Pokémon fans who want to check their knowledge or work on memorizing new Pokémon stats
  • New Pokémon fans who do not yet know every Pokémon but want to learn more
  • Companies like Nintendo and Gamefreak because it facilitates use of their games/products
  • Competitive Pokémon players who need quick and easy access to information about each of their Pokémon

Application Type

Mobile application that can be used on smartphones and tablets equipped with a camera.

Tech stack

Client Tech (Frontend)

  • Smartphone (Android or iOS)
  • Camera
  • Kivy which creates apps using Python

Server Tech (Backend)

  • PC (desktop or laptop) for development
  • TensorFlow in Python for Yolov4 object detection

Top Application Capabilities (name at least 5)

  1. Take a photo within the application
  2. Identify each Pokémon in the photo
  3. Allow user to select an identified Pokémon
  4. Describe the selected Pokémon to the user
  5. Text-to-Speech description (secondary)
  6. In-Battle move recommender (secondary)

Top Two Scenarios

Scenario #1

Bob is playing Pokémon and encounters one that he does not know the stats for in battle. He doesn't know which of his Pokémon would pair up well against this Pokémon. He downloads the Pokedex App and takes a picture of the unknown Pokémon he encountered. The app then shows him all the relevant stats and information about this Pokémon. He then looks at which Pokémon he has available and decides which one to use in battle.

Scenario #2

Bob was watching a Pokémon anime for the first time and was fascinated by their abilities. He was unfamiliar with some of those Pokémon and wanted to learn more about them. Bob used the Pokedex application to take pictures of the Pokémon in the show and found out who they are as well as some fun facts about each one. Bob is happy.

Team Members

Please create a table for the details below

Name Location Time zone offset from Chicago (Chicago is 0 offset)
John Ford Chicago 0
Geovanni Pallares Chicago 0
Yousef Suleiman Chicago 0
Francisco Chavez Chicago 0
Elliot Willming Chicago 0

Team Working Agreement

What do we want to accomplish/learn together?

  • Develop a working application
  • Learn how to use the Kivy framework to develop Android and iOS applications
  • Use machine learning tools to facilitate object detection
  • Learn how to use the Agile framework to develop an application from scratch

Tools

  • We will use Google Docs to collaboratively formulate our ideas.
  • We will use Google Drive to exchange required files in instances where this might make more sense than uploading them to our GitHub repository.
  • We will use GitHub for version control. Team-members will push their finished code to a branch to ensure the main branch remains bug-free.
  • If we need to meet outside of class we will meet mornings on any day, later evening (after 7:30pm) Friday or on weekends. A time can be decided as necessary in the Discord.
  • If we need to meet outside of class we will use the following tool/tech for meetings: Discord text/voice chat
  • When we are not meeting together we will use the following tools/tech for communications:
Member Name Email
Elliot Willming [email protected]
Francisco Chavez [email protected]
Yousef Suleiman [email protected]
John Ford [email protected]
Geovanni Pallares [email protected]

Requested Approach/Behavior

  • We will communicate respectfully in a professional manner. Discussions only. No arguing/name calling of any kind. Respect the ideas of each team member.
  • We will divide work fairly. Each member will be responsible for the work they choose to be assigned to (based on their skillset). Each member should be assigned to one or more stories on the Kanban board.

Unacceptable behavior

  • No one member will be forced to take all the work upon themselves. No member will take work upon themselves without permission of the rest of the group.
  • We will not make comments that are disrespectful or potentially harmful towards fellow team members.
  • There will be no plagiarism of any of the code without giving due credit to the author.

How will we productively solve disagreement

  • We will make sure everyone has a voice and the opportunity to share their ideas.
  • We will discuss all possible solutions as well as the pros and cons.
  • We will attempt to come to a mutual agreement on how to approach the problem.
  • If we cannot come to a mutual agreement between all members, it will be put to a majority vote.

Sprint Schedule

To be updated

Week Sprint Leader
3 - Problem Framing John Ford
4 - Problem Framing John Ford
5 - Problem Framing Geovanni Pallares
6 - Problem Framing Geovanni Pallares
7 - Think, build, test, and demo for midterm Francisco Chavez
8 - Think, build, test, and demo for midterm Francisco Chavez
9 - Think, build, test, and demo for midterm Elliot Willming
10 - Think, build, test, and demo for midterm Elliot Willming
11 - Think, build, test, and demo for final Yousef Suleiman
12 - Think, build, test, and demo for final Yousef Suleiman
13 - Think, build, test, and demo for final John Ford
14 - Presentation dry run John Ford
15 - Presentation Geovanni Pallares

pokedex-app's People

Contributors

fchv avatar funkmonk9999 avatar gpallares5 avatar marinapojani15 avatar mschray avatar redefiningreality avatar yojoecapital avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

mschrayms

pokedex-app's Issues

UI Sketches

Draw wireframe sketches of the UI for each screen a user will see when using the app.

  • Draw sketch of the start screen the user will see when launching the app
  • Draw sketch of the photo capture screen
  • Draw sketch of the pokemon statistics screen that will display information

Object Detection (Testing): Testing Algorithm

Test an object detection model for detecting Pokémon in an image.

  • For each Pokémon the algorithm has been trained for, take 5 different pictures of a Pokémon and record how often the app identifies it

Object Detection (Testing)

Use pretrained object detection model to detect Pokémon in an image.

For each pokemon the algorithm has been trained for:

  • Take 5 different pictures of a pokemon and record how often the app identifies it

Object Detection (Training): Preprocessing

Create scripts that will prepare the dataset for training the Yolo algorithm.
Script functionality:

setup.py

  • Create images and annotations directories
  • Put image and annotation files in their respective directories

prepare_training.py

  • Extract data from XML annotation files
  • Convert data to Yolov5 format
  • Store data in respective TXT files
  • Split the dataset into training, validation, and testing images
  • Move images to their respective directories

Object Detection (Training): Train Yolov5 on Sample Dataset

Attempt to train the Yolov5 model using the provided sample road sign dataset that is known to work.
This is to ensure that the training works correctly prior to being performed on the final Pokémon dataset.

  • Add yaml file road_sign_data.yaml to specify location of image directories and labels
  • Edit the configurations file for the yolov5 training script hyp.scratch.yaml to reflect desired parameters
  • Rename annotations directory to labels
  • Run the yolov5 training algorithm train.py on the prepared road sign dataset (requires completed #26)
  • Evaluate the training results and ensure they match those of the tutorial
  • Test the resulting model on the provided test images using the testing script

Object Detection: Preliminary Research

Complete the research required for understanding how to implement the object detection.

  • Determine which version of Yolo to use
  • Find a good tutorial for training a Yolo model
  • Find a good tutorial for using a Yolo model with pre-trained weights

Review Peer Feedback

Review peer feedback for our team.

  • Access student feedback on blackboard
  • Go through comments made by each student.

Training/Testing Data

Find images of Pokémon to train the object detection algorithm.

  • Locate a publicly available database online
  • Import the database to your local machine
  • "Prune" or remove images from the database so that it only includes the select gen 1 Pokémon to use for testing the model
  • Gather additional test images that contain multiple Pokémon in each image

Coalesce Pokemon Object Detection Datasets for Yolov5

  • Put various datasets of pokemon into one consecutive dataset
  • Make sure labels are approperiate such that 2 datasets don't overlap
  • Make sure the classes are named properly such that a class does not have different names for the same pokemon

Populate Statistics Screen

  • Write a function to assign a color to a passed list of types
  • Name
  • Picture
  • Description
  • Types
  • Weaknesses
  • Abilities
  • HP
  • Attack
  • Defense
  • Sp. Attack
  • Sp. Defense
  • Speed
  • Moveset
  • Evolutions

Object Detection (Training): Clean Code

Create a more streamlined process for training the Yolov5 model. The current process requires renaming the annotations folder to labels and executing multiple scripts in the correct order with the correct command line arguments, which is not ideal.

  • Combine setup.py and prepare_training.py scripts
  • Modify test.py to use "labels" directory rather than "annotations" directory → upon further investigation, the tutorial calls it test.py, but actual script it's referring to is val.py
  • Write out commands and arguments (requires #31)
  • Debug errors

Pokémon Statistics Display

Create a basic app that displays statistics on a specified Pokémon, as obtained from an internal database (csv file?).
This information will display in a new screen after the user has taken an image and object detection has been completed.

  • Name of Pokémon along with a description of each one.{Geo}
  • Type weakness(es){Geo}
  • Competitive information (move list, type of team member, recommended held item){Geo}

Object Detection (Training): Hyperparameters Research

  • Research the different Yolov5 architectures to determine which would be best suited for this application.
  • Research the Yolov5 hyperparameter options to determine how the parameters will affect the model.
  • Determine the hyperparameters best suited for this application.

Build Home UI Screen

Build a Home Screen using Kivy for the app to display once the user starts the app.

  • Display the App name at the top
  • Display instructions to use the app
  • Include a Button to open the camera
  • Display a list of pokemon the user can select

Object Detection (Training): Prepare Sample Dataset

Use the setup.py and prepare_training.py scripts from #25 to prepare the sample road sign dataset.
This is in order to test the Yolov5 training algorithm on this known-to-work dataset first to ensure no errors prior to using it on the final Pokémon image dataset.

  • Download road sign dataset
  • Move images and annotations into the base working directory
  • Run setup.py
  • Run prepare_training.py

Kivy and Dependencies Primer

Installing and getting familiar with Kivy.

  • Install Python 3
  • Create a virtual environment in Python 3 (optional)
  • Install Kivy using the pip package manager
  • Install TensorFlow for ML development
  • Ensure installation works by running a basic hello world script that imports Kivy and TensorFlow

Camera Display

Create a basic app that opens the phone camera, takes a picture, and saves the picture on the device.

  • Make start screen in Python
  • Add button to capture photo
  • Create photo capture function in Python
  • Save captured photo to phone

Run app on Android-x86 VM

  • Get an Android-x86 VM running on PC
  • Build app and transfer it to VM
  • Try to run the app
  • Take note of any screen scalability issues and think of ways to solve them

Research using Yolo model

Research how to use a trained yolo model to identify objects in new images

  • Find out if the yolo training algorithm must be included in app
  • Find out package requirements for using trained model

Test running yolo model

Attempt to run a sample yolo model included in the yolov5 package

  • Load yolov5s model
  • Obtain and print results from yolov5s model

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.