Spaces:
Sleeping
Sleeping
from fastapi import FastAPI | |
from fastapi.responses import StreamingResponse | |
from fastapi.staticfiles import StaticFiles | |
from fastapi.templating import Jinja2Templates | |
from starlette.requests import Request | |
import cv2 | |
app = FastAPI() | |
# Serve static files (for HTML & JS) | |
app.mount("/static", StaticFiles(directory="static"), name="static") | |
# Jinja2 template rendering | |
templates = Jinja2Templates(directory="templates") | |
# Open webcam (or use a file) | |
video_source = 1 # Change to "video.mp4" for a file | |
cap = cv2.VideoCapture(video_source) | |
def generate_frames(): | |
"""Stream video frames as MJPEG.""" | |
while True: | |
success, frame = cap.read() | |
if not success: | |
break | |
_, buffer = cv2.imencode(".jpg", frame) | |
yield (b"--frame\r\n" | |
b"Content-Type: image/jpeg\r\n\r\n" + | |
buffer.tobytes() + b"\r\n") | |
async def homepage(request: Request): | |
return templates.TemplateResponse("index.html", {"request": request}) | |
async def video_feed(): | |
return StreamingResponse(generate_frames(), media_type="multipart/x-mixed-replace; boundary=frame") | |