团队项目-问题:通过书写api,利用Vue调用py脚本
from flask import Flask, jsonify
import subprocess
import threading
import pandas as pd
from datetime import datetime
导入必要的库:
Flask 和 jsonify 用于创建Web服务。
subprocess 用于运行外部Python脚本。
threading 用于在后台运行面部识别任务。
pandas 用于处理CSV文件。
datetime 用于生成当前时间戳。
app = Flask(name)
current_csv = "" # 存储当前CSV文件路径
创建一个Flask应用实例。
定义一个全局变量 current_csv 用于存储当前CSV文件的路径。
def run_face_reco():
global current_csv
current_time = datetime.now().strftime('%Y%m%d_%H%M%S')
current_csv = f'D:/github/sign/sign_in_records_{current_time}.csv'
subprocess.run(['python', 'face_reco_from_camera_ot.py'])
定义一个函数 run_face_reco:
使用 global current_csv 声明使用全局变量 current_csv。
获取当前时间并格式化为字符串。
构建CSV文件路径,并将其赋值给 current_csv。
使用 subprocess.run 运行外部Python脚本 face_reco_from_camera_ot.py。
@app.route('/start-recognition', methods=['POST'])
def start_recognition():
thread = threading.Thread(target=run_face_reco)
thread.start()
return jsonify({"status": "started"})
定义一个路由 /start-recognition,该路由接受POST请求。
创建一个新的线程来运行 run_face_reco 函数。
启动线程。
返回一个JSON响应,表示任务已启动。
@app.route('/sign-in-status', methods=['GET'])
def get_sign_in_status():
try:
df = pd.read_csv(current_csv)
signed_names = df['Name'].tolist()
return jsonify({"signed": signed_names})
except:
return jsonify({"signed": []})
定义一个路由 /sign-in-status,该路由接受GET请求。
尝试读取 current_csv 文件。
如果成功读取,将CSV文件中的Name列转换为列表,并返回包含已签到人员名字的JSON响应。
如果读取失败(例如,CSV文件不存在),则返回一个空列表。
if name == 'main':
app.run(debug=True, port=5000)
检查是否直接运行此脚本(而不是作为模块导入)。
如果是,则启动Flask应用,设置调试模式为True,并监听端口5000。
而后在所需的vue页面中书写对应的Js脚本
并调用相关api接口下的功能实现vue中调用py脚本,
// 轮询获取签到状态
const fetchSignStatus = async () => {
try {
const response = await fetch('http://localhost:5000/sign-in-status');
const data = await response.json();
signedStudents.value = data.signed;
} catch (error) {
console.error('Error fetching sign status:', error);
}
};
// 启动人脸识别
const startFaceRecognition = async () => {
try {
await fetch('http://localhost:5000/start-recognition', { method: 'POST' });
// 开始轮询
setInterval(fetchSignStatus, 2000);
} catch (error) {
console.error('Error starting recognition:', error);
}
};
其中提供端口的py脚本要实现运行。