Пример #1
0
def collection_detail(id):
    token_form = BulkTokenForm(request.form)
    if request.method == 'POST':
        tokens = create_tokens(
            id,
            request.files.getlist('files'),
            token_form.is_g2p.data)

    collection = Collection.query.get(id)

    tokens = Token.query.filter(Token.collection_id == collection.id)\
        .order_by(resolve_order(
            Token,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(
            int(request.args.get('page', 1)),
            per_page=app.config['TOKEN_PAGINATION'])

    return render_template(
        'collection.jinja',
        collection=collection,
        token_form=token_form,
        tokens=tokens,
        users=User.query.all(),
        section='collection')
Пример #2
0
def mos_list():
    page = int(request.args.get('page', 1))
    mos_list = Mos.query.order_by(
            resolve_order(
                Mos,
                request.args.get('sort_by', default='created_at'),
                order=request.args.get('order', default='desc')))\
        .paginate(page, per_page=app.config['MOS_PAGINATION'])
    collections = Collection.query.order_by(
        resolve_order(Collection,
                      request.args.get('sort_by', default='name'),
                      order=request.args.get('order', default='desc')))
    return render_template('mos_list.jinja',
                           mos_list=mos_list,
                           collections=collections,
                           section='mos')
Пример #3
0
def user_list():
    page = int(request.args.get('page', 1))
    users = User.query.order_by(resolve_order(
                User,
                request.args.get('sort_by', default='name'),
                order=request.args.get('order', default='desc')))\
        .paginate(page, app.config['USER_PAGINATION'])
    return render_template('user_list.jinja', users=users, section='user')
Пример #4
0
def conf_list():
    page = int(request.args.get('page', 1))
    confs = Configuration.query.order_by(resolve_order(
            Configuration,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(page, per_page=app.config['CONF_PAGINATION'])

    return render_template('conf_list.jinja', confs=confs, section='other')
Пример #5
0
def token_list():
    page = int(request.args.get('page', default=1))
    tokens = Token.query.order_by(resolve_order(
            Token,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(page, per_page=app.config['TOKEN_PAGINATION'])

    return render_template('token_list.jinja', tokens=tokens, section='token')
Пример #6
0
def collection_list():
    form = UploadCollectionForm()
    if request.method == 'POST':
        if form.validate():
            if form.is_g2p.data:
                try:
                    zip_file = request.files.get('files')
                    with ZipFile(zip_file, 'r') as zip:
                        zip_name = zip_file.filename[:-4]
                        tsv_name = '{}/index.tsv'.format(zip_name)
                        collection = save_uploaded_collection(
                            zip, zip_name, tsv_name, form)
                    return redirect(
                        url_for('collection.collection_detail',
                                id=collection.id))
                except Exception as e:
                    print(e)
                    flash('Ekki tókst að hlaða söfnun upp. Athugaðu hvort' +
                          ' öllum leiðbeiningum sé fylgt og reyndu aftur.',
                          category='warning')
            elif form.is_lobe_collection:
                try:
                    zip_file = request.files.get('files')
                    with ZipFile(zip_file, 'r') as zip:
                        zip_name = zip_file.filename[:-4]
                        json_name = 'info.json'
                        collection = save_uploaded_lobe_collection(
                            zip, zip_name, json_name, form)
                    return redirect(
                        url_for('collection.collection_detail',
                                id=collection.id))
                except Exception as e:
                    print(e)
                    flash('Ekki tókst að hlaða söfnun upp. Athugaðu hvort' +
                          ' öllum leiðbeiningum sé fylgt og reyndu aftur.',
                          category='warning')
            else:
                flash('Ekki tókst að hlaða söfnun upp. Athugaðu hvort' +
                      ' öllum leiðbeiningum sé fylgt og reyndu aftur.',
                      category='warning')
        else:
            flash('Ekki tókst að hlaða söfnun upp. Athugaðu hvort' +
                  ' öllum leiðbeiningum sé fylgt og reyndu aftur.',
                  category='warning')

    page = int(request.args.get('page', 1))
    collections = Collection.query.order_by(
        resolve_order(
            Collection,
            request.args.get('sort_by', default='name'),
            order=request.args.get('order', default='desc')))\
        .paginate(page, per_page=app.config['COLLECTION_PAGINATION'])
    return render_template('collection_list.jinja',
                           form=form,
                           collections=collections,
                           section='collection')
Пример #7
0
def applications():
    page = int(request.args.get('page', 1))
    applications = Application.query.order_by(resolve_order(
            Application,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(page, per_page=50)
    return render_template(
        'application_list.jinja',
        applications=applications,
        section='application')
Пример #8
0
def verification_list():
    page = int(request.args.get('page', 1))

    verifications = Verification.query.order_by(resolve_order(
            Verification,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(page, per_page=app.config['VERIFICATION_PAGINATION'])

    return render_template('verification_list.jinja',
                           verifications=verifications,
                           section='verification')
Пример #9
0
def mos_collection_none():
    page = int(request.args.get('page', 1))
    collection = json.dumps({'name': 'Óháð söfnun', 'id': 0})
    mos_list = Mos.query.filter(Mos.collection_id == None).order_by(
            resolve_order(
                Mos,
                request.args.get('sort_by', default='created_at'),
                order=request.args.get('order', default='desc')))\
        .paginate(page, per_page=app.config['MOS_PAGINATION'])
    return render_template('mos_no_collection_list.jinja',
                           mos_list=mos_list,
                           collection=collection,
                           section='mos')
Пример #10
0
def rec_session_list():
    page = int(request.args.get('page', 1))
    sessions = Session.query.order_by(
        resolve_order(
            Session,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(
            page,
            per_page=app.config['SESSION_PAGINATION'])
    return render_template('session_list.jinja',
                           sessions=sessions,
                           section='session')
Пример #11
0
def user_detail(id):
    page = int(request.args.get('page', 1))
    user = User.query.get(id)
    recordings = Recording.query.filter(Recording.user_id == id).order_by(
        resolve_order(
            Recording,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(page, app.config['RECORDING_PAGINATION'])
    return render_template("user.jinja",
                           user=user,
                           recordings=recordings,
                           section='user')
Пример #12
0
def application_detail(id):
    page = int(request.args.get('page', 1))
    application = Application.query.get(id)
    recordings = application.recordings().order_by(
        resolve_order(
            Recording,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(page, app.config['RECORDING_PAGINATION'])
    return render_template(
        'application.jinja',
        application=application,
        recordings=recordings,
        section='application')
Пример #13
0
def collection_detail(id):
    token_form = BulkTokenForm(request.form)
    if request.method == 'POST':
        tokens = create_tokens(id, request.files.getlist('files'),
                               token_form.is_g2p.data)

    collection = Collection.query.get(id)
    recorded_users = []
    all_users = collection.users
    nums = collection.get_users_number_of_recordings([u.id for u in all_users])
    for u in all_users:
        try:
            num = next(filter(lambda r: r[0] == u.id, nums))[1]
        except StopIteration:
            # This probably only happens if no recordings for user
            num = collection.get_user_number_of_recordings(u.id)

        json_user = {
            'user':
            u,
            'number_of_recordings':
            num,
            'time_estimate':
            collection.get_user_time_estimate(u.id, num_recordings=num),
            'percentage':
            round((num / collection.num_tokens) * 100)
        }

        recorded_users.append(json_user)

    tokens = Token.query.filter(Token.collection_id == collection.id)\
        .order_by(resolve_order(
            Token,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))\
        .paginate(
            int(request.args.get('page', 1)),
            per_page=app.config['TOKEN_PAGINATION'])

    return render_template('collection.jinja',
                           collection=collection,
                           token_form=token_form,
                           recorded_users=recorded_users,
                           tokens=tokens,
                           users=User.query.order_by(User.name).all(),
                           section='collection')
Пример #14
0
def postings():
    page = int(request.args.get('page', 1))
    postings = Posting.query.order_by(resolve_order(
            Posting,
            request.args.get('sort_by', default='created_at'),
            order=request.args.get('order', default='desc')))

    applications = []
    for posting in postings.filter(Posting.dev != True):
        applications.extend(posting.unique_with_recordings())
    info = Posting.statistics_for_applications(applications)

    return render_template(
        'posting_list.jinja',
        postings=postings.paginate(page, per_page=20),
        info=info,
        section='posting')
Пример #15
0
def recording_list():
    page = int(request.args.get('page', 1))
    only_bad = bool(request.args.get('only_bad', False))

    if only_bad:
        recordings = db.session.query(Recording)\
            .filter_by(marked_as_bad=True)\
            .paginate(
                page,
                per_page=app.config['RECORDING_PAGINATION'])
    else:
        recordings = Recording.query.order_by(
            resolve_order(
                Recording,
                request.args.get('sort_by', default='created_at'),
                order=request.args.get('order', default='desc')))\
            .paginate(page, per_page=app.config['RECORDING_PAGINATION'])

    return render_template('recording_list.jinja',
                           recordings=recordings,
                           only_bad=only_bad,
                           section='recording')
Пример #16
0
def stream_MOS_zip(id):
    mos = Mos.query.get(id)
    mos_list = MosInstance.query\
        .filter(MosInstance.mos_id == id)\
        .filter(MosInstance.is_synth == False).order_by(
            resolve_order(
                MosInstance,
                request.args.get('sort_by', default='id'),
                order=request.args.get('order', default='desc'))).all()

    results = 'mos_instance_id\tcustom_token_id\ttoken_text\n'
    for i in mos_list:
        results += "{}\t{}\t{}\n".format(str(i.id), str(i.custom_token.id),
                                         i.custom_token.text)

    generator = (cell for row in results for cell in row)

    return Response(generator,
                    mimetype="text/plain",
                    headers={
                        "Content-Disposition":
                        "attachment;filename={}_tokens.txt".format(
                            mos.printable_id)
                    })
Пример #17
0
Файл: mos.py Проект: G-Thor/LOBE
def mos_results(id):
    mos = Mos.query.get(id)
    mos_list = MosInstance.query.filter(MosInstance.mos_id == id).order_by(
        resolve_order(MosInstance,
                      request.args.get('sort_by', default='id'),
                      order=request.args.get('order', default='desc'))).all()
    ratings = mos.getAllRatings()
    max_placement = 1
    for j in ratings:
        if j.placement > max_placement:
            max_placement = j.placement

    if len(ratings) == 0:
        return redirect(url_for('mos.mos_detail', id=mos.id))
    user_ids = mos.getAllUsers()
    users = User.query.filter(User.id.in_(user_ids)).all()
    rating_json = {}
    all_rating_stats = []
    placement = [0] * max_placement
    p_counter = [0] * max_placement
    for i in ratings:
        all_rating_stats.append(i.rating)
        placement[i.placement - 1] += i.rating
        p_counter[i.placement - 1] += 1
    all_rating_stats = np.array(all_rating_stats)
    for i in range(len(placement)):
        if p_counter[i] != 0 and placement[i] != 0:
            placement[i] = placement[i] / p_counter[i]
    placement_info = {
        'placement': placement,
        'p_nums': list(range(1, len(mos_list)))
    }
    rating_json = {
        'average': round(np.mean(all_rating_stats), 2),
        'std': round(np.std(all_rating_stats), 2)
    }
    mos_stats = {'names': [], 'means': [], 'total_amount': []}
    for m in mos_list:
        mos_stats['names'].append(str(m.id))
        mos_stats['means'].append(m.average_rating)
        mos_stats['total_amount'].append(m.number_of_ratings)
    users_list = []
    users_graph_json = []
    for u in users:
        user_ratings = mos.getAllUserRatings(u.id)
        ratings_stats = []
        for r in user_ratings:
            ratings_stats.append(r.rating)
        ratings_stats = np.array(ratings_stats)

        mos_ratings_per_user = []
        for m in mos_list:
            if not m.getUserRating(u.id):
                mos_ratings_per_user.append('')
            else:
                mos_ratings_per_user.append(m.getUserRating(u.id))
        user_ratings = {
            "username": u.get_printable_name(),
            "ratings": mos_ratings_per_user
        }
        temp = {
            'user': u,
            'mean': round(np.mean(ratings_stats), 2),
            'std': round(np.std(ratings_stats), 2),
            'total': len(ratings_stats),
            'user_ratings': mos_ratings_per_user
        }
        temp2 = {'user_ratings': user_ratings}
        users_list.append(temp)
        users_graph_json.append(temp2)

    users_list = sorted(users_list, key=itemgetter('mean'))

    return render_template('mos_results.jinja',
                           mos=mos,
                           mos_stats=mos_stats,
                           ratings=ratings,
                           placement_info=placement_info,
                           users=users_list,
                           rating_json=rating_json,
                           users_graph_json=users_graph_json,
                           mos_list=mos_list,
                           section='mos')
Пример #18
0
def mos_results(id):
    mos = Mos.query.get(id)
    mos_list = MosInstance.query.filter(MosInstance.mos_id == id).order_by(
        resolve_order(MosInstance,
                      request.args.get('sort_by', default='id'),
                      order=request.args.get('order', default='desc'))).all()
    ratings = mos.getAllRatings()
    max_placement = 1
    for j in ratings:
        if j.placement > max_placement:
            max_placement = j.placement

    if len(ratings) == 0:
        return redirect(url_for('mos.mos_detail', id=mos.id))
    user_ids = mos.getAllUsers()
    users = User.query.filter(User.id.in_(user_ids)).all()

    all_rating_stats = []
    placement = [0] * max_placement
    p_counter = [0] * max_placement
    for i in ratings:
        all_rating_stats.append(i.rating)
        placement[i.placement - 1] += i.rating
        p_counter[i.placement - 1] += 1
    all_rating_stats = np.array(all_rating_stats)
    for i in range(len(placement)):
        if p_counter[i] != 0 and placement[i] != 0:
            placement[i] = placement[i] / p_counter[i]
    placement_info = {
        'placement': placement,
        'p_nums': list(range(1, len(mos_list)))
    }
    rating_json = {
        'average': round(np.mean(all_rating_stats), 2),
        'std': round(np.std(all_rating_stats), 2)
    }
    mos_stats = {'names': [], 'means': [], 'total_amount': []}
    for m in mos_list:
        mos_stats['names'].append(str(m.id))
        mos_stats['means'].append(m.average_rating)
        mos_stats['total_amount'].append(m.number_of_ratings)
    users_list = []
    users_graph_json = []
    for u in users:
        user_ratings = mos.getAllUserRatings(u.id)
        ratings_stats = []
        for r in user_ratings:
            ratings_stats.append(r.rating)
        ratings_stats = np.array(ratings_stats)

        mos_ratings_per_user = []
        for m in mos_list:
            if not m.getUserRating(u.id):
                mos_ratings_per_user.append('')
            else:
                mos_ratings_per_user.append(m.getUserRating(u.id))
        user_ratings = {
            "username": u.get_printable_name(),
            "ratings": mos_ratings_per_user
        }
        temp = {
            'user': u,
            'mean': round(np.mean(ratings_stats), 2),
            'std': round(np.std(ratings_stats), 2),
            'total': len(ratings_stats),
            'user_ratings': mos_ratings_per_user
        }
        temp2 = {'user_ratings': user_ratings}
        users_list.append(temp)
        users_graph_json.append(temp2)

    users_list = sorted(users_list, key=itemgetter('mean'))

    all_usernames_list = []
    user_name_dict = {}
    for u in users_graph_json:
        all_usernames_list.append(u['user_ratings']['username'])
        user_name_dict[u['user_ratings']['username']] = {
            'fullrating': u['user_ratings']['ratings']
        }
        indices = [
            i for i, x in enumerate(u['user_ratings']['ratings']) if x != ''
        ]
        user_name_dict[u['user_ratings']['username']]['selectiveRatings'] = [
            u['user_ratings']['ratings'][i] for i in indices
        ]
        user_name_dict[u['user_ratings']['username']]['selectiveMosIds'] = [
            mos_stats['names'][i] for i in indices
        ]
        user_name_dict[u['user_ratings']['username']]['selectiveMosMeans'] = [
            mos_stats['means'][i] for i in indices
        ]

    # Average per voice index
    ratings_by_voice = mos.getResultsByVoice()
    per_voice_data = {
        "x": [],
        "y": [],
        "std": [],
    }
    for voice_idx, ratings in ratings_by_voice.items():
        per_voice_data["x"].append(voice_idx)
        per_voice_data["y"].append(
            round(np.mean([r.rating for r in ratings]), 2))
        per_voice_data["std"].append(
            round(np.std([r.rating for r in ratings]), 2))

    return render_template('mos_results.jinja',
                           mos=mos,
                           mos_stats=mos_stats,
                           ratings=ratings,
                           placement_info=placement_info,
                           all_usernames_list=all_usernames_list,
                           user_name_dict=user_name_dict,
                           users=users_list,
                           rating_json=rating_json,
                           users_graph_json=users_graph_json,
                           per_voice_data=per_voice_data,
                           mos_list=mos_list,
                           section='mos')
Пример #19
0
def mos_detail(id):
    mos = Mos.query.get(id)
    form = MosUploadForm()
    select_all_forms = [
        MosSelectAllForm(is_synth=True, select=True),
        MosSelectAllForm(is_synth=True, select=False),
        MosSelectAllForm(is_synth=False, select=True),
        MosSelectAllForm(is_synth=False, select=False),
    ]

    if request.method == 'POST':
        if form.validate():
            if (form.is_g2p.data):
                zip_file = request.files.get('files')
                with ZipFile(zip_file, 'r') as zip:
                    zip_name = zip_file.filename[:-4]
                    tsv_name = '{}/index.tsv'.format(zip_name)
                    successfully_uploaded = save_custom_wav(
                        zip, zip_name, tsv_name, mos, id)
                    if len(successfully_uploaded) > 0:
                        flash("Tókst að hlaða upp {} setningum.".format(
                            len(successfully_uploaded)),
                              category="success")
                    else:
                        flash("Ekki tókst að hlaða upp neinum setningum.",
                              category="warning")
                return redirect(url_for('mos.mos_detail', id=id))
            else:
                flash(
                    "Ekki tókst að hlaða inn skrá. Eingögnu hægt að hlaða inn skrám á stöðluðu formi.",
                    category="danger")
        else:
            flash(
                "Villa í formi, athugaðu að rétt sé fyllt inn og reyndu aftur.",
                category="danger")

    mos_list = MosInstance.query.filter(MosInstance.mos_id == id).order_by(
        resolve_order(MosInstance,
                      request.args.get('sort_by', default='id'),
                      order=request.args.get('order', default='desc'))).all()

    if mos.collection is not None:
        collection = mos.collection
    else:
        collection = json.dumps({'name': 'Óháð söfnun', 'id': 0})

    ground_truths = []
    synths = []
    for m in mos_list:
        m.selection_form = MosItemSelectionForm(obj=m)
        if m.is_synth:
            synths.append(m)
        else:
            ground_truths.append(m)
    ratings = mos.getAllRatings()

    return render_template('mos.jinja',
                           mos=mos,
                           mos_list=mos_list,
                           collection=collection,
                           select_all_forms=select_all_forms,
                           ground_truths=ground_truths,
                           synths=synths,
                           mos_form=form,
                           ratings=ratings,
                           section='mos')