Exemplo n.º 1
0
def set_user_info(user_id: int, firstName: str, lastName: str) -> None:
    """Set user's information."""
    try:
        user = UsersRepository.get_user_by_id(user_id)
        UsersRepository.set_user_info(user, firstName, lastName)
    except NoResultFound:
        raise InvalidArgumentsException('User with this id does not exist.')
Exemplo n.º 2
0
def test_get_predefined_label_for_scan_in_task__predefined_label(
        prepare_environment: Any) -> None:
    """Test for fetching Predefined Label that exists."""
    # Step 1. Prepare a structure for the test
    dataset = DatasetsRepository.add_new_dataset('KIDNEYS', 'Kidneys')
    task = TasksRepository.add_task('MARK_KIDNEYS', 'Mark Kidneys',
                                    'path/to/image', ['KIDNEYS'], [])
    LabelTagsRepository.add_new_tag('EXAMPLE_TAG', 'Example Tag',
                                    [LabelTool.RECTANGLE], task.id)
    scan = ScansRepository.add_new_scan(dataset, 0)
    user_id = UsersRepository.add_new_user(
        User('user@medtagger', 'HASH', 'Admin', 'Admin'))
    user = UsersRepository.get_user_by_id(user_id)

    # Step 2. Add Label which is predefined
    label = LabelsRepository.add_new_label(scan.id,
                                           task.key,
                                           user,
                                           LabelingTime(0),
                                           is_predefined=True)

    # Step 3. Check if there is is Predefined Label
    predefined_label = LabelsRepository.get_predefined_label_for_scan_in_task(
        scan, task)
    assert predefined_label
    assert predefined_label.id == label.id
Exemplo n.º 3
0
def test_get_predefined_brush_label_elements(prepare_environment: Any) -> None:
    """Test for fetching Predefined Brush Label Elements."""
    # Step 1. Prepare a structure for the test
    dataset = DatasetsRepository.add_new_dataset('KIDNEYS', 'Kidneys')
    task = TasksRepository.add_task('MARK_KIDNEYS', 'Mark Kidneys',
                                    'path/to/image', ['KIDNEYS'], [])
    label_tag = LabelTagsRepository.add_new_tag('EXAMPLE_TAG', 'Example Tag',
                                                [LabelTool.RECTANGLE], task.id)
    scan = ScansRepository.add_new_scan(dataset, 3)
    user_id = UsersRepository.add_new_user(
        User('user@medtagger', 'HASH', 'Admin', 'Admin'))
    user = UsersRepository.get_user_by_id(user_id)

    # Step 2. Add Label with Brush Elements
    label = LabelsRepository.add_new_label(scan.id,
                                           task.key,
                                           user,
                                           LabelingTime(0),
                                           is_predefined=True)
    LabelsRepository.add_new_brush_label_element(label.id, 0, 0, 0, b'',
                                                 label_tag)
    LabelsRepository.add_new_brush_label_element(label.id, 1, 0, 0, b'',
                                                 label_tag)
    LabelsRepository.add_new_brush_label_element(label.id, 2, 0, 0, b'',
                                                 label_tag)

    # Step 3. Check if there is is Predefined Label
    brush_label_elements = LabelsRepository.get_predefined_brush_label_elements(
        scan.id, task.id, 0, 3)
    assert len(brush_label_elements) == 3
    brush_label_elements = LabelsRepository.get_predefined_brush_label_elements(
        scan.id, task.id, 0, 1)
    assert len(brush_label_elements) == 1
Exemplo n.º 4
0
def test_parsing_chain_label_elements(prepare_environment: Any) -> None:
    """Test parsing Chain Label Element to numpy array."""
    user_id = UsersRepository.add_new_user(
        models.User('user@medtagger', 'HASH', 'Admin', 'Admin'))
    user = UsersRepository.get_user_by_id(user_id)
    scan, label_tag = helpers.prepare_scan_and_tag_for_labeling()
    label = helpers.prepare_empty_label(scan, user)
    for slice_index in range(3):
        points = [
            Point(x=0, y=0),
            Point(x=1, y=0),
            Point(x=1, y=1),
            Point(x=0, y=1),
        ]
        LabelsRepository.add_new_chain_label_element(label.id,
                                                     slice_index,
                                                     label_tag,
                                                     points,
                                                     loop=True)

    query = models.ChainLabelElement.query.join(models.Label)
    query = query.filter(models.Label.scan_id == scan.id)
    label_elements = query.all()

    parser = chain.ChainLabelElementParser()
    data = parser.convert_to_numpy(label_elements)
    assert data.shape == (3, SLICE_WIDTH * SLICE_HEIGHT)
    assert data.sum(
    ) == 3 * SLICE_WIDTH * SLICE_HEIGHT  # Squares fill whole Slice
Exemplo n.º 5
0
def set_user_role(user_id: int, role_name: str) -> None:
    """Set user's role. Old role will be replaced."""
    try:
        user = UsersRepository.get_user_by_id(user_id)
    except NoResultFound:
        raise InvalidArgumentsException('User with this id does not exist.')
    try:
        role = get_role_with_name(role_name)
    except NoResultFound:
        raise InvalidArgumentsException('Role with this name does not exist.')
    with db_transaction_session() as session:
        user.roles = [role]
        session.add(user)
Exemplo n.º 6
0
def test_data_set_generator(prepare_environment: Any) -> None:  # pylint: disable=too-many-locals
    """Test Data Set Generator against rectangular Label Elements from real database."""
    user_id = UsersRepository.add_new_user(
        models.User('user@medtagger', 'HASH', 'Admin', 'Admin'))
    user = UsersRepository.get_user_by_id(user_id)
    scan, label_tag = helpers.prepare_scan_and_tag_for_labeling()

    label_a = helpers.prepare_empty_label(scan, user)
    for slice_index in range(3):
        LabelsRepository.add_new_rectangular_label_element(
            label_a.id, LabelPosition(x=1, y=1, slice_index=slice_index),
            LabelShape(width=0, height=0), label_tag)
    label_b = helpers.prepare_empty_label(scan, user)
    for slice_index in range(3):
        LabelsRepository.add_new_rectangular_label_element(
            label_b.id, LabelPosition(x=0, y=0, slice_index=slice_index),
            LabelShape(width=1, height=1), label_tag)
    label_c = helpers.prepare_empty_label(scan, user)
    for slice_index in range(3):
        LabelsRepository.add_new_rectangular_label_element(
            label_c.id, LabelPosition(x=1, y=1, slice_index=slice_index),
            LabelShape(width=0, height=0), label_tag)

    algorithm = majority_voting.MajorityVotingAlgorithm()
    data_set_generator = generator.DataSetGenerator(algorithm)

    query = models.RectangularLabelElement.query.join(models.Label)
    query = query.filter(models.Label.scan_id == scan.id)
    label_elements = query.all()

    ground_truth_for_slice_id = data_set_generator.generate(label_elements)
    assert sorted(list(ground_truth_for_slice_id.keys())) == sorted(
        [_slice.id for _slice in scan.slices])

    example_slice_id = scan.slices[0].id
    expected_ground_truth = np.array([1, 1, 1, 1])
    assert ground_truth_for_slice_id[
        example_slice_id].shape == expected_ground_truth.shape

    ground_truth = ground_truth_for_slice_id[example_slice_id]
    for i in range(expected_ground_truth.shape[0]):
        assert math.isclose(ground_truth[i],
                            expected_ground_truth[i],
                            abs_tol=1e-5)
def test_get_predefined_label_for_scan_in_task__predefined_label_for_given_task(
        prepare_environment: Any) -> None:
    """Test for fetching Predefined Label only for specific Task."""
    # Step 1. Prepare a structure for the test
    dataset = DatasetsRepository.add_new_dataset('KIDNEYS', 'Kidneys')
    task_left = TasksRepository.add_task('MARK_LEFT', 'Mark Left',
                                         'path/to/image', ['KIDNEYS'], '', [],
                                         [])
    task_right = TasksRepository.add_task('MARK_RIGHT', 'Mark Right',
                                          'path/to/image', ['KIDNEYS'], '', [],
                                          [])
    LabelTagsRepository.add_new_tag('EXAMPLE_TAG', 'Example Tag',
                                    [LabelTool.RECTANGLE], task_left.id)
    scan = ScansRepository.add_new_scan(dataset, 0)
    user_id = UsersRepository.add_new_user(
        User('user@medtagger', 'HASH', 'Admin', 'Admin'))
    user = UsersRepository.get_user_by_id(user_id)

    # Step 2. Add Labels for each Task
    label_left = LabelsRepository.add_new_label(scan.id,
                                                task_left.key,
                                                user,
                                                LabelingTime(0),
                                                is_predefined=True)
    label_right = LabelsRepository.add_new_label(scan.id,
                                                 task_right.key,
                                                 user,
                                                 LabelingTime(0),
                                                 is_predefined=True)

    # Step 3. Check if there are these Predefined Labels
    predefined_label = LabelsRepository.get_predefined_label_for_scan_in_task(
        scan, task_left)
    assert predefined_label
    assert predefined_label.id == label_left.id
    predefined_label = LabelsRepository.get_predefined_label_for_scan_in_task(
        scan, task_right)
    assert predefined_label
    assert predefined_label.id == label_right.id
Exemplo n.º 8
0
def test_parsing_rectangle_label_elements(prepare_environment: Any) -> None:
    """Test parsing Rectangle Label Element to numpy array."""
    user_id = UsersRepository.add_new_user(
        models.User('user@medtagger', 'HASH', 'Admin', 'Admin'))
    user = UsersRepository.get_user_by_id(user_id)
    scan, label_tag = helpers.prepare_scan_and_tag_for_labeling()
    label = helpers.prepare_empty_label(scan, user)
    for slice_index in range(3):
        LabelsRepository.add_new_rectangular_label_element(
            label.id, LabelPosition(x=1, y=1, slice_index=slice_index),
            LabelShape(width=0, height=0), label_tag)

    query = models.RectangularLabelElement.query.join(models.Label)
    query = query.filter(models.Label.scan_id == scan.id)
    label_elements = query.all()

    parser = rectangle.RectangleLabelElementParser()
    data = parser.convert_to_numpy(label_elements)
    assert data.shape == (3, 4)

    expected_data = (1, 1, 1, 1)
    for i in range(4):
        assert math.isclose(data[0][i], expected_data[i], abs_tol=1e-5)