Spaces:
Runtime error
Runtime error
| import cv2 | |
| import numpy as np | |
| import base64 | |
| from flask import Flask, render_template | |
| from flask_socketio import SocketIO, emit | |
| from io import BytesIO | |
| from PIL import Image | |
| # Initialize Flask app and SocketIO | |
| app = Flask(__name__) | |
| socketio = SocketIO(app) | |
| def index(): | |
| """Serve the HTML page.""" | |
| return render_template('index2.html') | |
| def handle_video_frame(data): | |
| """Receive video frame from client, apply Canny edge detection, and emit the processed frame.""" | |
| # Extract the base64 image from the client | |
| frame_data = data['image'] | |
| # Decode the base64 image to bytes | |
| img_data = base64.b64decode(frame_data) | |
| # Convert the image data to a numpy array | |
| np_arr = np.frombuffer(img_data, np.uint8) | |
| frame = cv2.imdecode(np_arr, cv2.IMREAD_COLOR) | |
| if frame is not None: | |
| # Apply Canny edge detection | |
| edges = cv2.Canny(frame, 100, 200) | |
| # Convert the edges image to BGR (for compatibility with base64 encoding) | |
| edges_bgr = cv2.cvtColor(edges, cv2.COLOR_GRAY2BGR) | |
| # Convert the processed image (edges) to base64 | |
| _, buffer = cv2.imencode('.jpg', edges_bgr) | |
| edges_str = base64.b64encode(buffer).decode('utf-8') | |
| # Emit the processed frame back to the client | |
| emit('display_frame', {'image': edges_str}, broadcast=True) | |
| if __name__ == '__main__': | |
| socketio.run(app, host='0.0.0.0', port=5000) | |