Пример #1
0
def upload_file():

    # get mom_file and dad_file out of request.files
    # create a new project in the database
    # when saving the mom and dad files to server (somewhere in static folder),
    # add the project id to the end of each file name.
    # update the new project's database record to fill in the mom_url and dad_url attributes.

    user = User.query.get(session['user_id'])
    new_project = Project(user=user)

    db.session.add(new_project)
    db.session.commit()

    project_id = str(new_project.project_id)

    project_base_dir = os.path.join(app.config['UPLOAD_FOLDER'],
                                    'project_' + project_id)
    os.mkdir(project_base_dir)

    mom_file = request.files['mom_file']
    if mom_file.filename == '':
        flash('No selected file')
        return redirect('/new_project')
    if mom_file and allowed_file(mom_file.filename):
        filename = secure_filename(
            mom_file.filename)  #make sure file is secure
        mom_file.save(os.path.join(project_base_dir,
                                   filename))  #/uploads/name.jpeg

    dad_file = request.files['dad_file']
    if dad_file.filename == '':
        flash('No selected file')
        return redirect('/new_project')
    if dad_file and allowed_file(dad_file.filename):
        filename = secure_filename(
            dad_file.filename)  #make sure file is secure
        dad_file.save(os.path.join(project_base_dir,
                                   filename))  #/uploads/name.jpeg

    new_project.mom_url = 'project_' + project_id + '/' + mom_file.filename
    new_project.dad_url = 'project_' + project_id + '/' + dad_file.filename

    mom = os.path.join(project_base_dir, mom_file.filename)
    dad = os.path.join(project_base_dir, dad_file.filename)

    facemorpher.averager(imgpaths=[mom, dad],
                         out_filename=os.path.join(project_base_dir,
                                                   'result.png'),
                         blur_edges=True,
                         alpha=True)

    new_project.baby_url = os.path.join('project_' + project_id + '/',
                                        'result.png')

    db.session.commit()

    avi_filename = os.path.join(project_base_dir, 'result.avi')

    facemorpher.morpher([mom, dad], out_video=avi_filename)

    #converts avi to mp4
    ff = FFmpeg(inputs={avi_filename: None},
                outputs={
                    os.path.join(project_base_dir, 'result.mp4'):
                    '-filter:v "setpts=3.0*PTS"'
                })

    ff.run()

    new_project.baby_avi = avi_filename

    new_project.baby_mp4 = os.path.join('project_' + project_id + '/',
                                        'result.mp4')

    db.session.commit()

    return redirect("/results/" + project_id)