SomaPop / app.py
JunRecFour6's picture
Update app.py
25fbe95 verified
Raw
History Blame Contribute Delete
3.42 kB
try:
from analyzer.process_video import analyze_video
except Exception as e:
print("Failed to import analyze_video:", e)
def analyze_video(*args, **kwargs):
print("Stub analyze_video called.")
return {
"plot": "placeholder.jpg",
"frames": []
}
from flask import Flask, render_template, request, redirect, url_for, session
from flask import send_from_directory
import os
import uuid
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'uploads'
app.config['RESULT_FOLDER'] = 'static/results'
app.config['MAX_CONTENT_LENGTH'] = 100 * 1024 * 1024 # 100MB
app.secret_key = os.environ.get("FLASK_SECRET_KEY", "your-secret-key")
# πŸ”₯ ADD THIS BLOCK RIGHT HERE:
@app.before_request
def make_session_permanent():
session.permanent = True
if 'user_id' not in session:
session['user_id'] = str(uuid.uuid4())
@app.route('/')
def index():
video_filename = request.args.get('video_filename')
result_image = request.args.get('result_image')
frame_images = request.args.get('frame_images')
if frame_images:
frame_images = frame_images.split("|")
else:
frame_images = []
user_id = session.get('user_id', 'unknown')
return render_template(
'index.html',
video_filename=video_filename,
result_image=result_image,
frame_images=frame_images,
user_id=user_id # <-- pass it in
)
@app.route('/upload', methods=['POST'])
def upload():
if 'video' not in request.files:
return 'No video file uploaded', 400
video = request.files['video']
print("πŸ“₯ Received file:", video.filename)
if video.filename == '':
return 'No selected file', 400
# Ensure user-specific upload and result folders exist
user_upload_folder = os.path.join('/tmp/uploads', session['user_id'])
user_result_folder = '/tmp/results'
os.makedirs(user_upload_folder, exist_ok=True)
os.makedirs(user_result_folder, exist_ok=True)
filename = f"{uuid.uuid4()}.mp4"
filepath = os.path.join(user_upload_folder, filename)
video.save(filepath)
print(f"πŸ“ Saved video to: {filepath}")
try:
result_data = analyze_video(filepath, filename, session['user_id'])
result_image = result_data["plot"]
frame_images = result_data["frames"]
except Exception as e:
print(f"❌ analyze_video failed: {e}")
result_image = "placeholder.jpg"
frame_images = []
print(f"πŸ“€ Redirecting with result_image={result_image}, frame_images={frame_images}")
print(f"βœ… analyze_video returned: {result_image}, {frame_images}")
return redirect(url_for(
'index',
video_filename=filename,
result_image=result_image,
frame_images="|".join(frame_images)
)) # <-- this is the required closing parenthesis
@app.route('/uploads/<path:filename>')
def uploaded_file(filename):
full_path = os.path.join('/tmp/uploads', filename)
print(f"πŸ“€ Serving upload: {full_path}")
return send_from_directory('/tmp/uploads', filename)
@app.route('/results/<path:filename>')
def result_file(filename):
full_path = os.path.join('/tmp/results', filename)
print(f"🧾 Serving flat result path: {full_path}")
return send_from_directory('/tmp/results', filename)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860, debug=False)