medtagger / medtagger Goto Github PK
View Code? Open in Web Editor NEWA collaborative framework for annotating medical datasets using crowdsourcing.
License: Apache License 2.0
A collaborative framework for annotating medical datasets using crowdsourcing.
License: Apache License 2.0
User can use slider on the right to move between Slices.
User can only click on this slider which is not intuitive.
It would be nice to provide a hint for keyboard shortcuts.
Labels should have flexible data structure and be ready to handle new formats like:
Right now there is a fixed schema for the data structure.
It may be needed to move Labels from SQL to the HBase or at least introduce JSONB column to the model.
Videos on tutorial page should be using English labels/texts.
MedTagger's frontend's first implementation was purely in Polish. It resulted in many labels/buttons/error messages that are still using Polish language. Videos on tutorial page were recorded on the old version of MedTagger which was using Polish.
User should be able to skip the tutorial and/or display tutorial only once.
User should walk through the tutorial each time he/she wants to label scans.
If user provides wrong password there should an error telling him why his/her account cannot be created.
At this moment the only constraint for password its it length: it has to be at least 8 characters. (https://github.com/jpowie01/MedTagger/blob/master/backend/medtagger/api/auth/serializers.py)
If user provides wrong password there is no error and nothing happends after clicking on 'Register' button. To know that something is wrong user would have to go to browser dev tools.
Scan Categories' images should be defined/stored in the database (Postgres or Cassandra). Frontend should fetch them together with list of all available categories.
Scan Categories' images are now stored in the frontend repository in Git. Scan Categories endpoint returns path to them, so that the HTML knows which one to use.
Code comments and documentation for Selector interface. This will help contributors to easily create new kind of graphical selectors according to marker/viewer architecture.
Self-documenting code, not enough information to easily start creating new selectors.
Python code in backend should be validated by "radon" tool in CI.
MedTagger backend uses a few linters already but we should add more validators to increate automation and code quality.
Backend Workers should log in the same way as API.
Worker logs are not saved on the disk.
Look for logging setup in API part.
User can draw in whatever way he/she wants.
Drawing from right to left causes errors...
Call to API:
{
"selections": [
{
"slice_index": 177,
"x": 0.6191666666666666,
"y": 0.71,
"width": -0.12166666666666667,
"height": -0.06166666666666667
},
{
"slice_index": 178,
"x": 0.4275,
"y": 0.6116666666666667,
"width": -0.10833333333333334,
"height": -0.06333333333333334
}
]
}
Response (status: 400):
{
"errors": {
"selections.0.width": "-0.12166666666666667 is less than the minimum of 0.0",
"selections.0.height": "-0.06166666666666667 is less than the minimum of 0.0",
"selections.1.width": "-0.10833333333333334 is less than the minimum of 0.0",
"selections.1.height": "-0.06333333333333334 is less than the minimum of 0.0"
},
"message": "Input payload validation failed"
}
Functional tests should not use development database for testing. It should create its own instances and perform tests on them. It should not break developer's environment.
Functional tests uses dockerized instances of Postgres and HBase. This is fine but... the same database instances are used in the development environment.
make functional_tests
.REST/WebSocket API calls should be pointed to the URL that includes port on which appliaction is hosted.
Currently, UI call REST/WebSocket API to the default port (80). It should check port on which UI has been hosted.
http://hostname/api/v1/...
.This should as easy as changing prod environment configuration file.
User should move between login page and home page smoothly.
There can be a glitch that makes whole MedTagger unusable and unstable. In console logs there is an error:
TypeError: Cannot read property 'role' of null
I was using Google Chrome 63 (stable). Refreshing the page helped.
MedTagger should load more Slices from Z orientation at once.
MedTagger fetches only 10 Slices at once. It could be increased to at least 25 or even more. Loading 10 Slices takes up to ~0.5s, so it's acceptable to load more that 10 Slices at once.
User can change its personal information at any time using Settings page.
User should only be able to change their first and last name. The E-mail field should be grayed out.
Form fields are filled with user data but there is no way to change them. User cannot modify these fields and there is no "Save" button available.
Consider changing the name of the section from "User data" to something else.
Functional tests should use Alembic migrations and Python scripts to prepare Postgres.
Functional tests uses create_all()
method which skips Alembic migrations. This may result in being inconsistent with production.
Functional/integration tests should be as much similar to production environment as possible!
Nginx should be able to handle port during proxy forwarding to Swagger UI.
Going to http://host:1234/api/v1
makes call for http://host/api/v1/swagger.json
which doesn't contain port.
Error on the Swagger UI:
Can't read from server. It may not have the appropriate access-control-origin settings.
Label should have new field that will tell us how much time given person spent on labeling.
We don't know anything about time taken for labeling.
User wants to develop frontend without setting up backend each time he/she wants to edit JS/HTML files.
Backend needs to be set up and working for developing frontend.
Consider simplifying backend environment. It should be as light as possible if the developer doesn't want to upload/label/verify scans.
MedTagger should remember that user skipped given Scan. It tells us that there was nothing to label on the Scan, which is very important information!
User can skip Scans and MedTagger won't know whether given Scan wasn't shown to any user or users skipped them due to lack of potential issues.
It may be needed to work on this issue first: #65.
All of the form fields and all variables should be cleaned after clicking "Upload more scans" button after completed upload.
Not all form fields are cleared properly.
There should be a script that will allow administrators to back up entire system's data.
There is no scripts or any mechanisms that allows to back up stored data. In case of issues, system will lost its data.
Backup scripts should be able to store data on disk and restore them!
3D Scans should show views from X & Y axis.
MedTagger's backend is ready to convert and prepare Slices from other orientations than Z axis. These can be retireved by the WebSocket API in the same way as it is done for Z axis but to do so, you've got to add additional parameter called "orientation".
Functional tests should clean the tables in Postgres and HBase.
Functional tests drops all the available tables and create them again. This may be (and probably is) time consuming.
Please compare both implementations before merge.
All development environments should work (as much as possible) the same. That's why Vagrant should also be able to work on localhost.
Now, Vagrant virtual machine hosts itself on 10.0.0.99.
vagrant up
.Email should not be moved to another line if it's too long. (Or maybe it should be moved a little bit lower under the avatar)
When user has e-mail that is too long it is moved to another line under the avatar.
Roles should be represented as enum instead of string. This enum of roles should be also stored in database. The roles should be : admin, doctor, volunteer.
Roles are represented as string.
MedTagger should handle movies.
Current implementation of MedTagger only works with 3D Scans.
This should be rather simple. Let's use current implementation of a backend, add new upload category and move slider from right to the bottom (play button would be nice but it can be done later).
MedTagger database should remember Scan's and Label's owner.
Scans and Labels are anonymous.
User should be able to upload new scans using 'Single 3D scan' option.
After choosing dicoms, the scans are not showing and the 'Upload button' is disabled. When checking logs we can see message: "$event.srcElement is undefined"
Using sending multiple scans mode, Slices should be sent one by one over WebSocket channel.
Right now, Slices are sent concurrently (each Scan individually in its own thread due to promises mechanism). It also results in broken progress bar which shows progress like below (uploading 10 scans at once):
Sent 10/500 slices.
Sent 20/500 slices.
Sent 30/500 slices.
...
Labeling/validation page should show a message "No Scans available!" if there is no Scans available.
Labeling/validation page doesn't show any error or message.
Users info should be displayed in that way to not go under the avatar. Additionally it should not go beyond the screen. If user first and/or last name is too long, only some of it should be displayed.
If users provied too long first and last name they are not shown properly. As shown on the picture, they are under the avatar and are going beyond the screen.
Uploading scans should be as fast as ISP can handle.
Scans upload is slow and even setup on a local machine takes too much time.
Let's figure out how to speed it up. At the beginning I would start with profiling both frontend and backend app as it may be a problem on both sides. I believe that it may be connected with:
MedTagger should be prepared for 2D Scans like X-Ray.
MedTagger only supports 3D Scans.
Administrator should be able to manage Scan Categories from the UI.
Right now, Scan Categories are enabled and defined by logging into the DB and what's more, images are loading from the frontend repository.
It may be related to this issue #23.
MedTagger should be using better URLs for frontend pages. Example:
/marker-tutorial
-> /labeling/tutorial
,/category
-> /labeling/choose-category
,/marker
-> /labeling
,MedTagger uses bad names. Examples above.
User would like to add additional comment to Labels (eg. "Unusual", "Too big", "Left kidney"). Form for additional comment could be shown as a dialog box/pop-up after clicking on "Send label" button.
Labels are just selections without any additional knowledge.
It may be needed to work on this issue first: #65.
Scan Categories should specify what could be labelled on the Scans by providing a list of predefined Labels Categories/Types.
Example: Kidneys category could specify that users can label two categories/types: left kidney, right kidney.
Labels aren't identified anyhow. They are just a list of selections.
It may be needed to work on this issue first: #65.
SQLAlchemy session object should be handled properly.
My intuition is that we are not using ScopedSessions properly. Linters hints that sessions has no properties like query
or commit()
. We should check it out and make sure that current implementation is proper one.
Look for the SQLAlchemy docs.
Scan Categories should be assigned with a plugin which will process Scans after upload. Default implementation should stay as it is now.
Scans are processed always in the same way (after upload).
This may be a blocker for enabling new types of scans, eg. 2D or movies. Also, it's a blocker for enabling Scan Categories other than lungs (different HU values).
Docker containers with databases should save its state on disk (attached volume) in order not to lose any data.
HBase can crash and destroy its container. It's highly possible that it will corrupt collected data.
docker-compose up
.User should be aware that registration process is in progress by the spinner indicator.
After clicking "Register" button, user has no feedback about the progress.
When user wants to register all of the fields should be clear.
If user provides email in log-in card and then goes to register card the email field is already filled in.
Enabling contributors to easily add support for different languages. Creation of translating service with support of .json formatted language files.
Hardcoded labels, english only.
Labeling page should show loading screen or some progress bar for loading new scan as this may take a while.
Labeling page shows empty place for loading Scan. User is confused about what is hapenning on the page and may leave the site.
There should be a page with information about the project.
The only documentation is stored in /docs
directory.
MedTagger should support compressed DICOMs without any workaround.
GDCM does not support Python 3 properly. That's why we cannot pass binary data for parsing and cannot use its method for uncompressing data.
Let's create issues in both GDCM library and PyDICOM package to fix it.
User should be able to cancel uploading scan(-s).
User cannot cancel uploading scans. It can even go to another page and all of the scans are still uploading!
Consider adding warning while switching pages. Example taken from Facebook:
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.