PlantPal — Android plant recognition app.
The aim of this project was to create an image classifier which can identify different plant species using a modern machine learning technique known as a Convolutional Neural Network (CNN). Other ways to accomplish machine learning using algorithms such as K-Nearest Neighbour and Support Vector Machines are also explored. The final system is presented to the user in the form of an Android application which can accurately identify different plant species.
This project explores the area of machine learning by comparing the accuracy of different machine learning algorithms and techniques. A Convolutional Neural Network (CNN) was built from scratch using a Neural Network API called Keras which uses TensorFlow as the backend. Another machine learning technique called transfer learning was explored which involved retraining a prebuilt CNN model with new data that consisted of different plant species. The client side of the system is an Android application which uses the latest technologies such as RxJava (Reactive eXtensions), Room Database (Google ORM library), Retrofit (Networking API) and TensorFlow Lite. The Android application made use of various architectural and design patterns. The architectural pattern used was Model View Presenter (MVP) and the design patterns used were singletons, the repository pattern and the observer pattern which was implemented using RxJava. The Android application is also capable of offline usage. The backend of the system is a REST API developed in Python using a development technique called Test Driven Development. The REST API was built using a micro-framework called Flask. Unit and integration tests were written for both the client and backend of the system.
This project concluded that in terms of accuracy, CNNs are the best for performing the task of plant identification. The accuracy for transfer learning (93.52%) out performed that of a CNN built from scratch (84%). The SVM algorithm came third with an accuracy of 50%, while the KNN algorithm performed the worst with an accuracy of 42.86%.