Inspiration

When I (Vinay) was 16, I had just made the Under-16 Malaysian national cricket team for the Under-16 Asian Championships. As part of the registration process, I had to undergo a bone age test to verify my age--because parents in countries like Afghanistan, Iran, Nepal, etc. don't have to register their children at birth, meaning ages could be easily falsified to allow older players to play age-group tournaments--which I ended up failing as the doctor classified me as a 17-year-old. The test involves an x-ray of patients' hands and then a doctor would look at it, measure the length of specific points on the x-ray, and then decide how old the patient is. However, this process is highly subjective and doctors can have differing opinions. Back to my story, after I failed the first test, my manager took my x-ray to another doctor who then said I was a 16-year-old, which allowed me to participate in the tournament. The goal of this application is to create a more accurate and consistent means of classifying bone ages, so that eligible athletes are not excluded and ineligible athletes are not included in major international youth athletic events.

What it does

Our application takes in an x-ray image, runs a trained machine learning classifier, and outputs the predicted age of the individual with a confidence level.

How we built it

We acquired training data of around 20,000 x-ray images from Kaggle, which was then filtered and categorized into groups of 13-18 year-olds (our focus group) using Python. These images were then fed into a machine learning classifier on IBM Watson's Visual Recognition service as our training data, also using Python. The rest of our application (web application) is built using Angular, Node, and Express, which interacts with our Python script that runs the API calls to Watson with new images and returns a JSON object back to our Javascript framework that parses the data and displays it to the user.

Challenges we ran into

First, we had an issue training the machine learning model with the 20,000 images as IBM Watson has a limit for its free version. We had to compromise on some accuracy by cutting down our training data down to around 1000 images just for the sake of this hackathon. Next, connecting the Python script to our Javascript framework is something none of us have done before, and ultimately, this served as our biggest stumbling block.

Accomplishments that we're proud of

We are proud that we were able to hack up a solution to a real-world problem as opposed to solving a problem nobody knew they had.

What we learned

We learned that solving a real-world problem can be done by anyone with a computer. In addition to that, we learned to effectively work as team by communicating well, encouraging each other, and not giving up when faced with time crunches and failing code.

What's next for Bone Age Classifier

First, we would like to spend some time to create a more accurate machine learning model which is a project in itself. Right now, we had to minimize our training data and exclude meaningful metadata (age) to allow us to utilize the IBM Watson service. This has definitely compromised on accuracy which we found to be acceptable for the sake of this hackathon. In addition to that, we would like to utilize regression models instead of classifiers which could provide us with more accurate results. Next, as a more optimistic plan, we would like to expand our focus group from 13-18 year-olds to include younger children and to add more metadata (medical abnormalities) which would allow the application to be used to identify growth abnormalities, bone density issues, and other medical issues that are usually identified by a doctor's opinion on x-ray images of children's hands.

Share this project:

Updates