Spaces:
Sleeping
Sleeping
# from flask import Flask, render_template, request, Response | |
# import base64 | |
# import cv2 | |
# import numpy as np | |
# from datetime import datetime | |
# app = Flask(__name__) | |
# latest_frame = None # Store the latest frame | |
# @app.route('/') | |
# def index(): | |
# return render_template('test_streaming_index.html') | |
# @app.route('/upload_frame', methods=['POST']) | |
# def upload_frame(): | |
# global latest_frame | |
# data_url = request.json['image'] | |
# header, encoded = data_url.split(",", 1) | |
# img_bytes = base64.b64decode(encoded) | |
# nparr = np.frombuffer(img_bytes, np.uint8) | |
# frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR) | |
# latest_frame = frame | |
# return '', 204 | |
# def stream(): | |
# global latest_frame | |
# while True: | |
# if latest_frame is not None: | |
# _, buffer = cv2.imencode('.jpg', latest_frame) | |
# frame = buffer.tobytes() | |
# yield (b'--frame\r\n' | |
# b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') | |
# else: | |
# yield b'' | |
# @app.route('/video_feed') | |
# def video_feed(): | |
# return Response(stream(), mimetype='multipart/x-mixed-replace; boundary=frame') | |
# if __name__ == '__main__': | |
# app.run(host='0.0.0.0', port=7860) | |
from flask import Flask, render_template, request, Response, session | |
import base64 | |
import cv2 | |
import numpy as np | |
from datetime import datetime | |
from uuid import uuid4 | |
app = Flask(__name__) | |
app.secret_key = 'your-secret-key' # Needed for session management | |
user_frames = {} # Dictionary to store frames per user session | |
def ensure_session(): | |
if 'uid' not in session: | |
session['uid'] = str(uuid4()) # Unique ID per user | |
def index(): | |
return render_template('test_streaming_index.html') | |
def upload_frame(): | |
uid = session['uid'] | |
data_url = request.json['image'] | |
header, encoded = data_url.split(",", 1) | |
img_bytes = base64.b64decode(encoded) | |
nparr = np.frombuffer(img_bytes, np.uint8) | |
frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR) | |
user_frames[uid] = frame # Store frame per user | |
return '', 204 | |
def stream(uid): | |
while True: | |
frame = user_frames.get(uid) | |
if frame is not None: | |
_, buffer = cv2.imencode('.jpg', frame) | |
frame_bytes = buffer.tobytes() | |
yield (b'--frame\r\n' | |
b'Content-Type: image/jpeg\r\n\r\n' + frame_bytes + b'\r\n') | |
else: | |
yield b'' | |
def video_feed(): | |
uid = session['uid'] | |
return Response(stream(uid), mimetype='multipart/x-mixed-replace; boundary=frame') | |
if __name__ == '__main__': | |
app.run(host='0.0.0.0', port=7860) | |