Flask人脸视频分析API接口
@app.route('/face2DAll',methods = ['POST'])
def face2DAll():
'''
人脸视频分析API接口
接收POST请求,处理上传的视频文件,进行人脸特征分析。
Args:
无
Returns:
JSON格式响应,包含处理结果和人脸特征数据:
- succeed: 处理是否成功 (True/False)
- msg: 处理结果信息
- all_leyes: 所有帧左眼比例列表
- all_reyes: 所有帧右眼比例列表
- all_mouthes: 所有帧嘴巴比例列表
- all_eulers: 所有帧欧拉角列表
- framenum: 视频总帧数
'''
if request.method == 'POST':
print('************ enter face video process ************')
data = {'succeed':False,'msg':'no video find','all_leyes':[],'all_reyes':[],'all_mouthes':[],'all_eulers':[],'framenum':0}
if 'name' not in request.form:
return jsonify(data)
else:
filename = request.form['name']
video_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
if not os.path.exists(video_path):
data['msg'] = 'video not uploaded in server'
return jsonify(data)
cap = cv2.VideoCapture(video_path)
alldata = []
frame_idx = 0
print('total frame:',cap.get(7))
leyes = []
reyes = []
mouthes = []
eulers = []
while(cap.isOpened()):
progress(frame_idx/cap.get(7)*100,width=30)
ret,img = cap.read()
if ret is not False:
_,_,leye_ratio,reye_ratio,mouth_ratio,euler_angles = facemodel.detect(img)
leyes.append(leye_ratio.item())
reyes.append(reye_ratio.item())
mouthes.append(mouth_ratio.item())
eulers.append(euler_angles)
frame_idx = frame_idx + 1
else:
data['succeed'] = True
data['msg'] = 'Finish'
data['all_leyes'] = leyes
data['all_reyes'] = reyes
data['all_mouthes'] = mouthes
data['all_eulers'] = np.squeeze(np.array(eulers,dtype=np.float32).reshape((-1,1))).tolist()
data['framenum'] = frame_idx
return jsonify(data)
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0', port = 6666) #deployment
# serve(app, host='0.0.0.0', port=5555) #product
原文地址: https://www.cveoy.top/t/topic/f0kN 著作权归作者所有。请勿转载和采集!