Table of Contents
This Spring Boot server is primarily designed for diagnosing Alzheimer's Disease (AD) using synthetic or fictitious MRI images. Serving as a launching pad for future full-stack endeavors that integrate machine learning, this project encapsulated a total 6 weekdays, averaging 9 hours of work per day. While certainly limited to just fictitious images, this project provides a valuable foundation for learning, research, and innovation in the fields of Full Stack Java development and Machine Learning with Python integration.
- Synthetic MRI Analysis: The server specializes in analyzing synthetic MRI images to simulate the diagnosis of AD with the assistance of AI
- Educational and Research Tool: This project provides a controlled environment for healthcare professionals, students and researchers to realize the impact AI could provide in early diagnosis of AD
- Explore Machine Learning Integration: As a starting point, this project demonstrates the potential integrations of Machine Learning into a Full Stack solution
- Use of Real Data: Due to the server supporting the injection of custom saved Tensorflow models, upon the development of a model that has high accuracy with real MRI images, that model can be loaded into this site and predictions with real MRI images can be run. Note that one should never take the findings of this ML model over their own medical providers
Name | Description | Finished | Notes |
---|---|---|---|
User desires to see all models available to predict against |
|
✓ | |
User wishes to upload their own saved Tensorflow model |
|
✓ | |
User desires to see information about the currently selected model |
|
✕ | Currently not many details to show, only model ID and name |
User desires to delete the currently active model |
|
✓ | |
User desires to delete all currently loaded models |
|
✓ | |
User desires to have an MRI of their own or someone close to them analyzed |
|
✓ | |
User desires to see how the predictive model works with a random test image |
|
✓ | |
User wishes to get the results from a prior MRI prediction |
|
✓ | |
For security, user wishes to delete MRI image from prediction database |
|
✓ |
Description | Automated Spring Boot |
Automated Angular |
Notes |
---|---|---|---|
Start server, verify it comes up as expected | ✕ | ✕ | |
Stop server, clean shutdown. Verify DB persists on restart | ✕ | ✕ | |
Stop server, kill. Verify DB persists on restart | ✕ | ✕ | |
Load default model, verify predictions | ✓ | ✕ | |
Load new model, verify predictions | ✓ | ✕ | |
Load invalid model, verify Bad Request | ✓ | ✕ | |
Get info on loaded model. Accuracy, loss, etc.. | ✕ | ✕ | No accuracy/loss saved in database currently |
Get info on invalid model ID, verify Not Found | ✓ | ✕ | |
Delete model with valid model ID | ✓ | ✕ | |
Delete model with invalid model ID, verify Not Found | ✓ | ✕ | |
Run prediction for an MRI file, verify confidence returned | ✓ | ✕ | |
Run prediction for invalid MRI file, verify Bad Request | ✓ | ✕ | |
Run prediction for random file in Impairment category, verify confidence returned | ✓ | ✕ | |
Verify unable to run predictions invalid Impairment category, verify Bad Request | ✓ | ✕ | |
Run prediction for random test image, verify confidence returned | ✓ | ✕ | |
Verify unable to run predictions for invalid model ID, verify Bad Request | ✓ | ✕ |
The backend server is implemented with Spring Boot, utilizing an H2 database that persists on disk. The Rest API exposed by this server supports most
basic CRUD requests to interact with both Tensorflow models and individual MRI prediction.
None of the model training occurs on this Spring Boot server. While we are leveraging Amazon's DJL framework that enables Deep Learning support in Java,
the models were all trained using the Neural Network found at the following link:
The frontend server is implemented with Angular and serves as a simplistic yet clean interface to interact with the Spring Boot server than the Rest API. The home page can be seen below, accessed at http://localhost:4200
From the homepage, a user can navigate to one of several options under both the Models and Predictions headers. In this readme, we've just shown the pages required to access to submit a prediction to the default model. To choose the default model, navigate to Models -> Choose Active Model. Click one of the following options and verify the text stating 'Current Model: {ID}' updates correctly. The default model will always have ID == 1.
Next, navigate to Predictions -> Submit new MRI for Assessment to see the next screenshot shown below. From here, choose a file to upload to the predictive model that you have chosen. For convenience, test images (that the default model was not trained on) are included in src/main/resources/images/Combined Dataset.zip. Unzip this and choose an image. Each fictitious MRI in this dataset is sorted by the Impairment level that the MRI was emulating. Because of this fact, we will have confidence if the model is performing as expected after uploading some MRIs and verifying their predictions match our actual value.
- Automated testing for Angular frontend - using Karma: https://karma-runner.github.io/6.4/index.html
- Increase test coverage for Spring Boot server
- Angular frontend not handling exceptions from the backend
- Implement safer keys in the database. Currently just incrementing
- Add Users - should have their own inventory of models and predictions
- SSL for security when dealing with real data
- Fix concurrency issues
- Remove test images from Angular server, rely on images in backend
- Fix packaging of final jar - currently not executable
- When running predict() on an image, should we run predict for every model? (under user?)
Email: jttrull0@gmail.com
LinkedInGitHub