Example #1
0
def admin_page():
    num_images = db.get_sample_count()
    num_human_annotations = db.get_human_annotation_count()
    datasets = db.get_datasets()
    enqueued = db.get_unprocessed_samples()
    models = db.get_models(details=True)
    model_id_to_name = {m['_id']: m['name'] for m in models}
    secondary_items = db.get_queued_samples()
    enqueued2 = []
    for item in secondary_items:
        model_name = model_id_to_name.get(item['model_id'], '???')
        if 'sample_id' in item:
            target_name = db.get_sample_by_id(item['sample_id'])['filename']
        elif 'validation_model_id' in item:
            target_name = model_id_to_name.get(item['validation_model_id'],
                                               '?!?')
        else:
            target_name = '!!!'
        enqueued2.append((model_name, target_name, str(item['_id'])))
    enqueued2 = sorted(enqueued2, key=lambda item: item[0])
    status = [(status_name, db.get_status(status_id))
              for status_name, status_id in status_ids]
    return render_template('admin.html',
                           num_images=num_images,
                           num_human_annotations=num_human_annotations,
                           datasets=datasets,
                           enqueued=enqueued,
                           status=status,
                           error=pop_last_error(),
                           models=models,
                           enqueued2=enqueued2)
Example #2
0
def process_primary_model(net, model):
    # Process all unprocessed samples
    model_id = model['_id']
    unprocessed_samples = db.get_unprocessed_samples()
    for qsample in unprocessed_samples:
        process_image_sample(net=net,
                             model_id=model_id,
                             sample_id=qsample['_id'],
                             is_primary_model=True)
Example #3
0
def get_all_samples(dataset_id, dataset_info=None):
    # Get all samples, annotated with dataset name
    if dataset_info is None:
        dataset_info = db.get_dataset_by_id(dataset_id)
    enqueued = db.get_unprocessed_samples(dataset_id=dataset_id)
    finished = db.get_processed_samples(dataset_id=dataset_id)
    errored = db.get_error_samples(dataset_id=dataset_id)
    all_samples = enqueued + finished + errored
    for s in all_samples:
        s['dataset_name'] = dataset_info.get('name')
    return all_samples
Example #4
0
def dataset_info(dataset_id_str):
    print 'request.method', request.method
    if dataset_id_str == 'new' and request.method == 'POST':
        dataset_id = None
        dataset_info = None
        new_dataset_zoom = request.form['size']
    else:
        dataset_id = ObjectId(dataset_id_str)
        dataset_info = db.get_dataset_by_id(dataset_id)
        new_dataset_zoom = None
        if dataset_info is None:
            return render_template("404.html")
    if request.method == 'POST':
        # File upload
        if dataset_info is not None:
            if db.is_readonly_dataset(dataset_info):
                set_error('Dataset is protected.')
                return redirect('/dataset/' + dataset_id_str)
        return upload_file(dataset_id, image_zoom=new_dataset_zoom)
    enqueued = db.get_unprocessed_samples(dataset_id=dataset_id)
    finished = db.get_processed_samples(dataset_id=dataset_id)
    for i, sample in enumerate(finished):
        sample['machine_distance'] = 1.0 / max(
            [0.001, sqrt(float(sample['machine_position_count']))])
        sample['index'] = i
    errored = db.get_error_samples(dataset_id=dataset_id)
    # Get request data
    return render_template("dataset.html",
                           dataset_name=dataset_info['name'],
                           dataset_id=dataset_id_str,
                           enqueued=enqueued,
                           finished=finished,
                           errored=errored,
                           status=db.get_status('worker'),
                           readonly=db.is_readonly_dataset(dataset_info),
                           error=pop_last_error(),
                           dataset_user=dataset_info.get('user'),
                           image_zoom=dataset_info.get('image_zoom',
                                                       'default'))
Example #5
0
def dataset_info(dataset_id_str):
    print 'request.method', request.method
    new_dataset_threshold_prob = None
    new_allow_reuse = False
    if dataset_id_str == 'new':
        print 'Creating new dataset'
        if request.method != 'POST':
            return redirect('/')
        dataset_id = None
        dataset_info = None
        new_dataset_zoom = request.form['size']
        print 'Threshold prob:'
        print request.form['threshold']
        try:
            v = float(request.form['threshold'])
            new_dataset_threshold_prob = min(max(v, 0.5), 1.0)
            print 'Specified thresh prob:', new_dataset_threshold_prob
        except ValueError:
            print 'Invalid threshold. Ignored.'
        try:
            new_allow_reuse = bool(request.form.get('reuseCheck'))
            print 'Specified allow reuse:', request.form.get(
                'reuseCheck'), new_allow_reuse
        except ValueError:
            print 'Invalid reuse setting. Ignored.'
    else:
        dataset_id = ObjectId(dataset_id_str)
        db.access_dataset(dataset_id)
        dataset_info = db.get_dataset_by_id(dataset_id)
        new_dataset_zoom = None
        if dataset_info is None:
            return render_template("404.html")
    if request.method == 'POST':
        # File upload
        if dataset_info is not None:
            if db.is_readonly_dataset(dataset_info):
                set_error('Dataset is protected.')
                return redirect('/dataset/' + dataset_id_str)
        return upload_file(dataset_id,
                           image_zoom=new_dataset_zoom,
                           threshold_prob=new_dataset_threshold_prob,
                           allow_reuse=new_allow_reuse)
    enqueued = db.get_unprocessed_samples(dataset_id=dataset_id)
    finished = db.get_processed_samples(dataset_id=dataset_id)
    for i, sample in enumerate(finished):
        sample['machine_distance'] = 1.0 / max(
            [0.001, sqrt(float(sample['machine_position_count']))])
        sample['index'] = i
    errored = db.get_error_samples(dataset_id=dataset_id)
    threshold_prob = round(dataset_info.get('threshold_prob')
                           or fc8_to_prob(default_prob_threshold),
                           ndigits=3)
    # Get request data
    return render_template("dataset.html",
                           dataset_name=dataset_info['name'],
                           dataset_id=dataset_id_str,
                           enqueued=enqueued,
                           finished=finished,
                           errored=errored,
                           status=db.get_status('worker'),
                           readonly=db.is_readonly_dataset(dataset_info),
                           error=pop_last_error(),
                           dataset_user=dataset_info.get('user'),
                           image_zoom=dataset_info.get('image_zoom',
                                                       'default'),
                           threshold_prob=threshold_prob)