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