Wenn dieser Vorgang abgeschlossen ist, wird der Live-Feed gestoppt, indem „state.live = False“ gesetzt wird. Die Funktion ruft dann /upload_df auf, das das df in eine HTML-Tabelle umwandeln und im HTML-Frontend anzeigen soll. (Mit einem Druckbefehl habe ich überprüft, ob die HTML-Tabellenkonvertierung erfolgreich ist.)
Allerdings zeigt das Programm das df nicht im Frontend an. Stattdessen wird die folgende Fehlermeldung angezeigt:
„INFO: 127.0.0.1:2948 – „POST /upload_df HTTP/1.1“ 200 OK
Fehler beim Senden der POST-Anfrage an /upload_df.“ : Erwarteter Wert: Zeile 1 Spalte 1 (Zeichen 0)"
Was ist los und wie kann man das beheben? Ich verwende Pycharm in Windows.
Code: Select all
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
html_file = "upload11.html"
class FeedState:
live = True # If True, stream live video; if False, show last processed frame
last_processed_frame = None # Store the last processed image
lock = Lock() # To ensure thread safety when accessing the state
state = FeedState()
df = pd.DataFrame(columns=["A", "B", "TF \n(+ve)","TF \n(-ve)","QA \n(+ve)","QA \n(-ve)"])
def process_image(img, scale=0.35):
global df
#
with state.lock:
state.live = False
try:
print("Video feed stopped. Now calling upload_df function")
response = requests.post("http://127.0.0.1:8000/upload_df")
print("Request to /upload_df:", response.json())
except Exception as e:
print("Error sending POST request to /upload_df:", e)
return
@app.post("/upload_df", response_class=HTMLResponse)
async def upload_df(request: Request):
global df
# Convert DataFrame to HTML with styling
df_html = df.to_html(classes="table table-bordered", escape=False)
return templates.TemplateResponse(html_file, {"request": request, "df_html": df_html})
@app.get("/image_feed")
def image_feed():
def generate_images():
cap = cv2.VideoCapture(0) # Open the default webcam
if not cap.isOpened():
raise RuntimeError("Could not access the webcam.")
ret, last_img = cap.read()
while True:
if state.live:
ret, img = cap.read()
last_img=process_image(img)
_, buffer = cv2.imencode(".jpg", last_img)
frame_bytes = buffer.tobytes()
yield (
b"--frame\r\n"
b"Content-Type: image/jpeg\r\n\r\n" + frame_bytes + b"\r\n")
return StreamingResponse(generate_images(), media_type="multipart/x-mixed-replace; boundary=frame")
@app.get("/", response_class=HTMLResponse)
async def read_root():
return templates.TemplateResponse(html_file, {"request": {}})
def open_browser():
webbrowser.open("http://127.0.0.1:8000")
if __name__ == "__main__":
# Run the browser-opening function in a separate thread
threading.Thread(target=open_browser).start()
# Start the Uvicorn server
uvicorn.run("webInterface11:app", host="127.0.0.1", port=8000, reload=True)