File size: 3,421 Bytes
6c13b27
d751d47
3bae5e9
 
 
 
 
 
d50a8df
 
 
 
 
1f3a91d
f91e542
6c13b27
 
 
 
 
 
 
1f3a91d
 
 
 
 
 
 
 
 
 
6c13b27
 
 
 
 
f02f41f
 
 
 
 
ba5021a
 
 
f02f41f
 
 
 
d64d909
ba5021a
f02f41f
6c13b27
 
 
 
 
 
 
b372d57
6c13b27
 
 
 
454016c
b8a09db
b97d301
daa2a28
454016c
 
7def20b
6c13b27
454016c
6c13b27
 
b372d57
6c13b27
b372d57
d50a8df
 
 
b372d57
79dc39d
b372d57
d547c45
6c13b27
25fbe95
 
2ab749a
 
7994dc0
08f0992
 
 
 
7246e87
 
88979a1
 
 
 
 
 
 
 
 
 
 
49482fd
6c13b27
9da3914
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112


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)