视频的共情评分website,python后台,flask交互

后端python
web_ex.py

import os
from flask import Flask, render_template, request
'''
# 设置了静态目录为./upload_pics,方便传递参数给html文件之后,显示图片
# 假设上述目录下有一张123.jpg图片文件
# 本例为了演示和方便理解,略去了传图片时的校验代码

app = Flask(__name__, static_folder='./image')

UPLOAD_FOLDER = 'upload_pics'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER  # 设置文件上传的目标文件夹

basedir = os.path.abspath(os.path.dirname(__file__))  # 获取当前项目的绝对路径


@app.route('/image', methods=['POST'], strict_slashes=False)
def api_upload():
    file_dir = os.path.join(basedir, app.config['UPLOAD_FOLDER'])  # 拼接成合法文件夹地址
    file_name = '123.png'
    f.save(os.path.join(file_dir, file_name))  # 保存文件到upload目录
    return render_template('upload_ok.html',
                           fname=file_name)  # 向html文件以变量名fname传递参数,值为file_name对应的'123.jpg'。此处可以传递多个参数,参考附件链接

    # 传递多个参数示例 return render_template('upload_ok.html', fname = file_name, var1='aaa', var2='bbb')


# !/usr/local/bin/python
# coding=utf-8

from flask import Flask

app = Flask(__name__)


@app.route('/')
def ajax_cal():
    ##将由地址栏传过来的参数转换为int型
    num_1 = str(request.args.get('num_1'))
    num_2 = str(request.args.get('num_2'))
    user = {'nickname': '90%'}  # fake user
    return render_template("AppHtml/cal.html",user = user)  ##将计算结果转换为string型传至前台


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=9000)

# coding: utf-8
from flask import Flask, render_template, url_for, request, json, jsonify
from flask_bootstrap import Bootstrap

app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False


@app.route('/form_data', methods=['GET', 'POST'])
def form_data():
    if request.method=='GET':
        username = request.args.get("username")
        #dumps和loads方法,来自json模块,而json模块是python中的,可以直接导入:
        #而jsonify是flask封装的扩展包
        return jsonify({'status': '0', 'username': username, 'errmsg': '登录成功!'})
    else:
        username = request.form['username']
        return jsonify({'status': '0', 'username': username, 'errmsg': '登录成功!'})



@app.route('/')
def index():
    return render_template('AppHtml/upload_ok.html')


if __name__ == '__main__':
    app.run(debug=True)



from flask import Flask,render_template,request,redirect,url_for,flash
from werkzeug.utils import secure_filename
import os
from flask import send_from_directory

UPLOAD_FOLDER = '/uploads'  #文件存放路径
ALLOWED_EXTENSIONS = set(['mp4']) #限制上传文件格式

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
app.config['MAX_CONTENT_LENGTH'] = 5 * 1024 * 1024

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
@app.route('/upload/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        # check if the post request has the file part
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        # if user does not select file, browser also
        # submit an empty part without filename
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return  '{"filename":"%s"}' % filename
    return render_template('AppHtml/upload_ok.html')

if __name__ == '__main__':
    app.run(debug=True)
'''

# coding:utf-8

from flask import Flask, render_template, request, Response,redirect, url_for, make_response, jsonify
from werkzeug.utils import secure_filename
import os
import cv2
import time
import realtimeempathy
from datetime import timedelta

# 设置允许的文件格式
# ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'bmp'])
ALLOWED_EXTENSIONS = set(['mp4', 'avi', 'flv', 'RMVB', 'MKV','png', 'jpg', 'JPG', 'PNG', 'bmp'])

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS


app = Flask(__name__)
# 设置静态文件缓存过期时间
app.send_file_max_age_default = timedelta(seconds=1)
@app.route('/homepage', methods=['POST', 'GET'])
def homepage():
    return render_template('AppHtml/homepage.html')

@app.route('/register', methods=['POST', 'GET'])
def register():
    return render_template('AppHtml/register.html')

@app.route('/updatefile', methods=['POST', 'GET'])
def updatefile():
    if request.method == 'POST':
        f = request.files['file']

        if not (f and allowed_file(f.filename)):
            return jsonify({"error": 1001, "msg": "请检查上传的图片类型,仅限于mp4、avi、flv、RMVB、MKV、png、jpg、JPG、PNG、bmp"})

        user_input = request.form.get("name")

        basepath = os.path.dirname(__file__)  # 当前文件所在路径

        upload_path = os.path.join(basepath, 'static/image', secure_filename(f.filename))  # 注意:没有的文件夹一定要先创建,不然会提示没有该路径
        print(secure_filename(f.filename))
        # upload_path = os.path.join(basepath, 'static/images','test.jpg')  #注意:没有的文件夹一定要先创建,不然会提示没有该路径
        f.save(upload_path)
        dir = 'C:/Users/zhangjing/Anaconda3/envs/Django/static/image/' + str(secure_filename(f.filename))
        dir_out = 'C:/Users/zhangjing/Anaconda3/envs/Django/static/sound/TEST.wav'
        video_train_clf_knn = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/peak_detetion(test)/sound_image_knn.pickle'
        image_train_clf_knn = 'E:/ffmpeg-latest-win64-static/2019_11_12_experimental_data/GAZE_DATA_backup/7_09_proceess/classifier/pickle/image_svm.pickle'
        time.sleep(10)
        realtimeempathy.video_sound(dir, dir_out)
        x, E_image, N_image = realtimeempathy.image_pred(dir,image_train_clf_knn)
        E_video, N_video = realtimeempathy.video_pred(dir,dir_out,video_train_clf_knn)
        realtimeempathy.video(dir, x, E_image, N_image, E_video, N_video)
        print('processed!')
        data = E_video[-1]* 100
        #
        user = {'nickname': str(data)}
        # return Response(gen(), mimetype='multipart/x-mixed-replace; boundary=frame')
        return render_template('AppHtml/upload_ok.html', userinput=user_input, val1=time.time(),
                               title='Home',
                               user=user)

    return render_template('AppHtml/updatefile.html')

def gen():
    video_path = 'C:/Users/zhangjing/Anaconda3/envs/Django/static/image/test.mp4'
    vid = cv2.VideoCapture(video_path)
    while True:
        return_value, frame = vid.read()
        image = cv2.imencode('.jpeg', frame)[1].tobytes()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + image + b'\r\n')

@app.route('/video_feed')
def video_feed():
    return Response(gen(), mimetype='multipart/x-mixed-replace; boundary=frame')

if __name__ == '__main__':
    app.run(host='0.0.0.0',port =5000, debug=False)
    # data = real_empathy()
    # print(data)

前端html五个
第一个homepage.html

<html>
	<head>
		<title>empathy evoluation real system</title>
	  <style type="text/css">
    html {
      width: 100%;
      height: 100%;
      overflow: hidden;
      font-style: sans-serif;
    }

    body {
      width: 100%;
      height: 100%;
      font-family: 'Open Sans', sans-serif;
      margin: 0;
      background-color: #FF8080;
    }

    #login {
      position: absolute;
      top: 40%;
      left: 40%;
      margin: -150px 0 0 -150px;
      width: 600px;
      height: 150px;
    }

    #login h1 {
      color: #fff;
      text-shadow: 0 0 10px;
      letter-spacing: 1px;
      text-align: center;
    }

    h1 {
      font-size: 2em;
      margin: 0.67em 0;
    }

    input {
      width: 100px;
      height: 30px;
      margin-bottom: 10px;
      outline: none;
      padding: 10px;
      font-size: 13px;
      color: #fff;
      text-shadow: 1px 1px 1px;
      border-top: 1px solid #312E3D;
      border-left: 1px solid #312E3D;
      border-right: 1px solid #312E3D;
      border-bottom: 1px solid #56536A;
      border-radius: 4px;
      background-color: #2D2D3F;
    }

    .but {
      width: 300px;
      min-height: 20px;
      display: block;
      background-color: #4a77d4;
      border: 1px solid #3762bc;
      color: #fff;
      padding: 9px 14px;
      font-size: 15px;
      line-height: normal;
      border-radius: 5px;
      margin: 0;
    }
  	 </style>
	</head>
	<body>

	<div id="login">
		<center>
			<h1>안녕하세요!
         영상의 공감도 알고 싶죠? Try it!
			</h1>

		<p>

			<a href="mailto:zj03010020@gmail.com">Author Email</a>
			<hr color="pink">

			Username:<input type="text" name="user" value="" width="30"><br>
			Password:<input type="password" name="pwd" value="" width="30"><br>
			<table>
				<tr>
					<td>

						<input type="reset" value="cancel">
						<a href="/updatefile"><input type="submit" value="Proceed" ></a>
						<a href="/register"><input type="submit" value="Login Help" ></a>
					</td>
				</tr>
			</table>
		<p>

		</center>
	</div>
	</body>
</html>

第二个register.html

<html>
	<head>
	 <title>Welcome to register</title>
	 <style type="text/css">
    html {
      width: 100%;
      height: 100%;
      overflow: hidden;
      font-style: sans-serif;
    }

    body {
      width: 100%;
      height: 100%;
      font-family: 'Open Sans', sans-serif;
      margin: 0;
      background-color: #FF8080;
    }

    #login {
      position: absolute;
      top: 40%;
      left: 50%;
      margin: -150px 0 0 -150px;
      width: 300px;
      height: 300px;
    }

    #login h1 {
      color: #fff;
      text-shadow: 0 0 10px;
      letter-spacing: 1px;
      text-align: center;
    }

    h1 {
      font-size: 2em;
      margin: 0.67em 0;
    }

    input {
      width: 100px;
      height: 30px;
      margin-bottom: 10px;
      outline: none;
      padding: 10px;
      font-size: 13px;
      color: #fff;
      text-shadow: 1px 1px 1px;
      border-top: 1px solid #312E3D;
      border-left: 1px solid #312E3D;
      border-right: 1px solid #312E3D;
      border-bottom: 1px solid #56536A;
      border-radius: 4px;
      background-color: #2D2D3F;
    }

    .but {
      width: 300px;
      min-height: 20px;
      display: block;
      background-color: #4a77d4;
      border: 1px solid #3762bc;
      color: #fff;
      padding: 9px 14px;
      font-size: 15px;
      line-height: normal;
      border-radius: 5px;
      margin: 0;
    }
  	 </style>
	</head>
	<body>
    <div id="login">
		<center>
			<h1>register</h1>
			<p>
			<form method="get" action="zhuce.html">
				<table>
					<tr>
						<td>Username:</td>
						<td><input type="text" name="user" value="" width="30"></td>
					</tr>
					<tr>
						<td>Password:</td>
						<td><input type="password" name="pwd" value="" width="30"></td>
					</tr>
					<tr>
						<td>Sex:</td>
						<td>
							<input type="radio" name="sex" value="0" checked>Boy
							<input type="radio" name="sex" value="1">Girl
						</td>
					</tr>


					<tr>
						<td valign="top">Personal Statement:</td>
						<td><textarea name="personal" rows="5" cols="30">Personal profile</textarea></td>
					</tr>
					<tr>
						<td> <input type="reset" value="reset"></td>
						<td><input type="submit" value="submit"></td>
					</tr>
				</table>
			</form>
			<a href="/homepage"><font color="black"></b>back homepage!</font></a>
		</center>
	</div>
    </body>
</html>

第三个updatefile.html



<!DOCTYPE html>

<html>
<head>
  <meta charset="UTF-8">
  <title>영상!</title>

  <style type="text/css">
    html {
      width: 100%;
      height: 100%;
      overflow: hidden;
      font-style: sans-serif;
    }

    body {
      width: 100%;
      height: 100%;
      font-family: 'Open Sans', sans-serif;
      margin: 0;
      background-color: #FF8080;
    }

    #login {
      position: absolute;
      top: 40%;
      left: 50%;
      margin: -150px 0 0 -150px;
      width: 300px;
      height: 300px;
    }

    #login h1 {
      color: #fff;
      text-shadow: 0 0 10px;
      letter-spacing: 1px;
      text-align: center;
    }

    h1 {
      font-size: 2em;
      margin: 0.67em 0;
    }

    input {
      width: 278px;
      height: 18px;
      margin-bottom: 10px;
      outline: none;
      padding: 10px;
      font-size: 13px;
      color: #fff;
      text-shadow: 1px 1px 1px;
      border-top: 1px solid #312E3D;
      border-left: 1px solid #312E3D;
      border-right: 1px solid #312E3D;
      border-bottom: 1px solid #56536A;
      border-radius: 4px;
      background-color: #2D2D3F;
    }

    .but {
      width: 300px;
      min-height: 20px;
      display: block;
      background-color: #4a77d4;
      border: 1px solid #3762bc;
      color: #fff;
      padding: 9px 14px;
      font-size: 15px;
      line-height: normal;
      border-radius: 5px;
      margin: 0;
    }
  </style>


</head>
<body>
<div id="login">
<center>
	<h1>Test begin!</h1>
	<form action="" enctype='multipart/form-data' method='POST'>
        <input type="file" name="file" style="margin-top:20px;"/>
        <br>
        <h>지금 당신의 기분이 어떤 신나요?(행복、슬퍼、화나):</h>
        <input type="text" class="txt_input" name="name"  value="행복" style="margin-top:10px;"/>
        <input type="submit" value="submit" class="button-new" style="margin-top:10px;"/>
    </form>

</center>
	</div>
</body>
</html>

得到的结果图展示
upload_ok.html



<!DOCTYPE html>

<html>
<head>
  <meta charset="UTF-8">
  <title>영상!</title>

  <style type="text/css">
    html {
      width: 100%;
      height: 100%;
      overflow: hidden;
      font-style: sans-serif;
    }

    body {
      width: 100%;
      height: 100%;
      font-family: 'Open Sans', sans-serif;
      margin: 0;
      background-color: #FF8080;
    }

    #login {
      position: absolute;
      top: 40%;
      left: 30%;
      margin: -150px 0 0 -150px;
      width: 300px;
      height: 300px;
    }

    #login h1 {
      color: #fff;
      text-shadow: 0 0 10px;
      letter-spacing: 1px;
      text-align: center;
    }

    h1 {
      font-size: 2em;
      margin: 0.67em 0;
    }

    input {
      width: 278px;
      height: 18px;
      margin-bottom: 10px;
      outline: none;
      padding: 10px;
      font-size: 13px;
      color: #fff;
      text-shadow: 1px 1px 1px;
      border-top: 1px solid #312E3D;
      border-left: 1px solid #312E3D;
      border-right: 1px solid #312E3D;
      border-bottom: 1px solid #56536A;
      border-radius: 4px;
      background-color: #2D2D3F;
    }

    .but {
      width: 300px;
      min-height: 20px;
      display: block;
      background-color: #4a77d4;
      border: 1px solid #3762bc;
      color: #fff;
      padding: 9px 14px;
      font-size: 15px;
      line-height: normal;
      border-radius: 5px;
      margin: 0;
    }
  </style>

</head>
<body>
<div id="login">
    <center>
	<h1>empathy score:{{user.nickname}}!</h1>
    </center>
    <img src="{{ url_for('video_feed') }}">

	</div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Flask是一个轻量级的Web应用框架,常用于构建快速原型和小型网站。Flask的核心在于其简单易用,能够方便地处理HTTP请求与响应,非常适合前后端分离架构中的后端开发。 在Flask中,前后端交互主要通过以下几种方式: 1. **RESTful API**(Representational State Transfer):Flask提供了丰富的路由功能,开发者可以通过定义URL映射和对应的视图函数(View Functions),来创建RESTful接口。客户端(如前端JavaScript或移动应用)发送HTTP请求到这些API,获取数据或者执行操作。 ```python from flask import Flask, jsonify app = Flask(__name__) @app.route('/api/users', methods=['GET']) def get_users(): users = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}] return jsonify(users) # 更复杂的接口示例,返回JSON格式的数据 @app.route('/api/products/<int:id>', methods=['GET']) def get_product(id): product_data = {'id': id, 'name': 'Product {}'.format(id)} return jsonify(product_data) ``` 2. **模板引擎**:Flask支持多种模板引擎(比如Jinja2),前端开发者可以在HTML文件中嵌入Python代码,从而动态渲染数据。前端可以通过Ajax等技术向服务器请求数据,并将接收到的数据插入到页面中。 ```html <!-- templates/index.html --> {% for user in users %} <li>{{ user.name }}</li> {% endfor %} ``` 在后端接收前端的AJAX请求并填充数据: ```python from flask import render_template_string @app.route('/users') def list_users(): users = [{'id': 1, 'name': 'Alice'}, {'id': 2, 'name': 'Bob'}] rendered_html = render_template_string('<ul>{% for user in users %} <li>{{ user.name }}</li> {% endfor %}</ul>', users=users) return rendered_html ``` 3. **WebSocket**:Flask扩展库如`Flask-SocketIO`或`Flask-WTF-Signature`可以实现双向通信,例如聊天应用、实时更新等功能。 ```python from flask_socketio import SocketIO app = Flask(__name__) socketio = SocketIO(app) @socketio.on('message') def handle_message(message): # 处理前端发送的消息 if __name__ == '__main__': socketio.run(app) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值