后端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>