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) | |