One of my friends family members recently passed away due to tuberculosis. The issue was that the disease was not properly diagnosed by the doctors, and the doctors said that he was "normal". If he was properly diagnosed he could have gotten the proper medical treatment, and could have been alive. Tuberculosis is a serious infectious disease that mainly affects your lungs. The bacteria that cause tuberculosis are spread from one person to another. Tuberculosis is currently one of the 10 top causes of death and the leading case from a single infectious agent (higher then AIDS/HIV). In 2019 itself, an estimated 10 million people fell ill with tuberculosis worldwide, most of these deaths are caused by poor diagnoses of the disease. If tuberculosis can be identified, it can be easily treated with the use of antibiotics, but without proper diagnosis by medical practitioners there are many unnecessary deaths happening every year due to tuberculosis.

What it does

This world spread issue happening currently is what inspired me to make TumorCast. By using Deep Learning, I created a web application for medical practitioners and doctors to use to diagnose tuberculosis in patients using X RAY images of chests. My web application allows doctors to get a second opinion on X RAY images to determine whether or not the patient has tuberculosis. This will help reduce the number of incorrectly diagnosed patients in the world thus reducing the number of deaths that are caused by tuberculosis. All the medical practitioners need to do is to head over to the TumorCast website and click on get started. And then after that upload an X RAY image of the patients chest, and finally click predict to determine whether the patient has tuberculosis or not. Sample images can be found in the google drive link below.

How I built it

The Machine Learning model itself was made using TensorFlow, and then was converted into a TensorflowJS model. When the user clicks on predict the request is sent to the backend server which calls the model with all its weights, and then takes the input image and predicts whether or not the patient has tuborculosis. The front end was made using plain HTML, CSS and JavaScript, the server side programming was done using nodeJS.

Challenges I ran into

The first challenge I ran into was the backend. I used Flask for my backend first but ran into a lot of issues related to chrome and system caching. I then switched my server side code to Golang but I had issues with POST and GET requests that I couldn't solve. So I instead decided to use node.js for my server side programming and it worked great, since I am familiar with using JavaScript it allowed me to easily implement server side programming for my website. For my front end I decided to use HTML, CSS and JavaScript because I ran into lots of issues and compile errors when using a frontend framework like react. When initially training the model I got an accuracy of 73%, but with proper tuning I was able to get an average above 90%.

Accomplishments that I'm proud of

I am proud of making a such an accurate model in TensorFlow. I am not very experience with deep learning and TensorFlow, so getting a machine learning model that is accurate is a big accomplishment for me. I am also proud that I created an end to end ML solution that can help save lives of many people in the world. Creating TumorCast was not just a confidence booster because it worked at the end, it was a confidence booster because it was going to help other people around the world.

What I learned

By creating TumorCast, I learned how to use TensorFlow and TensorFlowJS. I learned how to use my model in my websites to create an end to end Machine learning solution that medical practitioners can use. I also improved my skills in web development by creating a web app and also my server side programming skills by using nodeJS.

What's next for TumorCast

My future plan for TumorCast is to make it more scalable. I plan on deploying the model on a cloud service like google cloud and accessing the model from the cloud, this would increase the client side performance. I also plan on making a database of all the images the users upload, and passing those images through a data pipeline for preprocessing the images, and then saving those images from the user into a dataset for the model to train on weekly. This allows the model to be up to date and also constantly improves the accuracy of the model and reduces the bias due to the large variation of unique X RAY images of patients. I also plan on expanding the use case of TumorCast to other medical conditions like heart diseases and brain tumors, by implementing more models.

Test it Out!

You can test out TumorCast by clicking on the netlify link below, and using the sample images from the links below. The first link takes you to a google drive folder that contains images of XRAYS that have tuberculosis, and the second link takes you to images of XRAYS that are from normal patients.

Built With

Share this project: