5月31日
软件杯1
from flask import Flask, request, jsonify, send_from_directory, render_template import os import random import matplotlib.pyplot as plt import numpy as np from matplotlib import rcParams # 设置中文字体(以 Windows 为例) rcParams['font.family'] = 'SimHei' rcParams['axes.unicode_minus'] = False app = Flask(__name__) UPLOAD_FOLDER = 'uploads' STATIC_FOLDER = 'static' os.makedirs(UPLOAD_FOLDER, exist_ok=True) os.makedirs(STATIC_FOLDER, exist_ok=True) def analyze_speech(video_path): score = random.uniform(60, 100) return { 'language_score': score, 'text': "我的优点是善于沟通和团队合作,熟悉Java和Python,曾参与校园系统开发。", 'feedback': f"语言表达评分: {score:.1f}" } def analyze_text(text): keywords = ['Java', 'Python', '数据库', '项目', '团队', '沟通', '开发', '系统'] logic_markers = ['首先', '其次', '然后', '最后', '因此', '所以', '总结'] keyword_count = sum(1 for kw in keywords if kw in text) logic_count = sum(1 for marker in logic_markers if marker in text) # 分数计算逻辑 knowledge_score = min(60 + keyword_count * 5, 100) logic_score = min(60 + logic_count * 8, 100) skill_match_score = 60 + random.uniform(0, 40) feedback = ( f"专业知识评分: {knowledge_score:.1f},共提及{keyword_count}个相关关键词;" f"逻辑思维评分: {logic_score:.1f},共使用{logic_count}个逻辑词。" ) return { 'knowledge_score': knowledge_score, 'skill_match_score': skill_match_score, 'logic_score': logic_score, 'feedback': feedback } def analyze_video(video_path): score = random.uniform(60, 100) return { 'innovation_score': score, 'feedback': f"创新能力评分: {score:.1f}" } def draw_radar_chart(scores, save_path): labels = list(scores.keys()) values = list(scores.values()) values += values[:1] angles = np.linspace(0, 2 * np.pi, len(labels), endpoint=False).tolist() angles += angles[:1] fig, ax = plt.subplots(figsize=(6,6), subplot_kw=dict(polar=True)) ax.plot(angles, values, 'o-', linewidth=2) ax.fill(angles, values, alpha=0.25) ax.set_thetagrids(np.degrees(angles[:-1]), labels) ax.set_ylim(0, 100) ax.set_title("综合面试评分雷达图", fontsize=16) plt.savefig(save_path) plt.close() @app.route('/') def index(): return render_template('index.html') @app.route('/upload_multiple', methods=['POST']) def upload_multiple(): try: files = [] for i in range(1, 4): f = request.files.get(f'file{i}') if not f: return jsonify({'error': f'缺少第{i}个视频文件'}) save_path = os.path.join(UPLOAD_FOLDER, f'interview{i}.webm') f.save(save_path) files.append(save_path) total_scores = { 'language': 0, 'knowledge': 0, 'skill': 0, 'logic': 0, 'innovation': 0 } feedbacks = [] for idx, video_path in enumerate(files, 1): speech_res = analyze_speech(video_path) text_res = analyze_text(speech_res['text']) video_res = analyze_video(video_path) total_scores['language'] += speech_res['language_score'] total_scores['knowledge'] += text_res['knowledge_score'] total_scores['skill'] += text_res['skill_match_score'] total_scores['logic'] += text_res['logic_score'] total_scores['innovation'] += video_res['innovation_score'] feedbacks.append( f"【第{idx}题反馈】\n" + speech_res['feedback'] + "\n" + text_res['feedback'] + "\n" + video_res['feedback'] ) for k in total_scores: total_scores[k] /= 3 radar_scores = { '语言表达': total_scores['language'], '专业知识': total_scores['knowledge'], '技能匹配': total_scores['skill'], '逻辑思维': total_scores['logic'], '创新能力': total_scores['innovation'], } radar_path = os.path.join(STATIC_FOLDER, 'radar.png') draw_radar_chart(radar_scores, radar_path) return jsonify({ 'feedback': "\n\n".join(feedbacks) + "\n\n综合评分已在雷达图中展示" }) except Exception as e: return jsonify({'error': str(e)}) if __name__ == '__main__': app.run(debug=True)

浙公网安备 33010602011771号