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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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')
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) })
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')
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')
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')