I'm trying to render a HTML
page that displays a video stream from a webcam. However, I'm facing the following error:
500 Server Error TypeError: TemplateResponse() missing 1 required positional argument: 'context'
My FastAPI application:
from fastapi import FastAPI import uvicorn from fastapi import Depends, FastAPI from fastapi import FastAPI, Request from fastapi.responses import HTMLResponse from fastapi.templating import Jinja2Templates import cv2 app = FastAPI(debug=True) templates = Jinja2Templates(directory="templates") @app.get("/") async def index(): return templates.TemplateResponse("index.html") async def gen_frames(camera_id): cap= cv2.VideoCapture(0) while True: # for cap in caps: # # Capture frame-by-frame success, frame = cap.read() # read the camera frame if not success: break else: ret, buffer = cv2.imencode('.jpg', frame) frame = buffer.tobytes() yield (b'--framern'b'Content-Type: image/jpegrnrn' + frame + b'rn') if __name__ == '__main__': uvicorn.run(app, host="127.0.0.1",port=8000)
My HTML page (index.html):
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous"> <title>Multiple Live Streaming</title> </head> <body> <div class="container"> <div class="row"> <div class="col-lg-7"> <h3 class="mt-5">Multiple Live Streaming</h3> <img src="{{ url_for('video_feed', id='0') }}" width="100%"> </div> </div> </div> </body> </html>
Traceback:
You need to pass the request when using templates.
So you can also use StreamingResponse
Then use Ajax or Axios to get the response.