如何使用 Flask 更改 python 文件的 opencv 网络摄像头?

问题描述 投票:0回答:1

我正在开发一个人脸识别项目,该项目将 gen_frame() 发送到 video_feed 以在我的 html 文件中呈现。但是,我找不到将 localStorage 值发送到 Flask 服务器的正确方法。有人对我如何使用 localStorage 更改网络摄像头有一些建议吗?

这是包含

attendance_taker.py
方法的 python
gen_frame

def gen_frame():
    cap = cv2.VideoCapture(0) # This is what I want to change using localstorage
    face_recognizer = Face_Recognizer()

    while True:
        success, frame = cap.read()
        if not success:
            break

        face_recognizer.process(frame)

        ret, buffer = cv2.imencode('.jpg', frame)
        frame = buffer.tobytes()
        yield (b'--frame\r\n'
               b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n')`

这是 JavaScript 代码:

window.addEventListener("DOMContentLoaded", function () {
    var webcamSelect = document.getElementById("webcamSelect");

    webcamSelect.addEventListener("change", function () {
        var selectedWebcamIndex = webcamSelect.selectedIndex;
        localStorage.setItem("selectedWebcamIndex", selectedWebcamIndex);
    });

    navigator.mediaDevices
        .enumerateDevices()
        .then((devices) => {
            var videoDevices = devices.filter(
                (device) => device.kind === "videoinput",
            );
            videoDevices.forEach((device, index) => {
                var option = document.createElement("option");
                option.value = index;
                option.text = device.label || `Webcam ${index + 1}`;
                webcamSelect.appendChild(option);
            });

            var selectedWebcamIndex = localStorage.getItem(
                "selectedWebcamIndex",
            );
            if (selectedWebcamIndex) {
                webcamSelect.selectedIndex = selectedWebcamIndex;
            }
        })
        .catch((error) => {
            console.error("Error enumerating devices:", error);
        });
});

app.py

@app.route('/video_feed')
def video_feed():
    return Response(gen_frame(), mimetype='multipart/x-mixed-replace; boundary=frame')

我尝试使用 jquery 中的 ajax,但不起作用。

javascript flask local-storage
1个回答
0
投票

将数据发送回烧瓶

“我尝试了 jQuery 的 AJAX,但它不起作用”,AJAX 可能有点过时了,如果它不能与 jQuery 一起工作,也许可以使用常规的 javascript

除此之外:您可以直接在 Flask 服务器文件中通过发布请求来完成此操作,如下所示:

from flask import Flask, render_template, request
import cv2


app = Flask(__name__)


def gen_frame(webcam_val):
  cap = cv2.VideoCapture(webcam_val)
  # ...

@app.route('/your/route', methods=["GET", "POST"])
def get_webcam_value():
  if request.method == 'POST': # method on POST (when form is submitted)
    value = request.form['value'] # gets the value of the input field with the attribute `value` (`name="value"`)
    gen_frame(value) # call your gen_frame function, and pass the value through
    
  return render_template('yourfile.html')
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>your file</title>
</head>
<body>
  
  <form action="your/action" method="POST"> <!-- create form with method `POST` -->
    <label>
      <input type="number" name="value" placeholder="camera" /> <!-- created an html input with type `number` and name `value` (to be accessed by our flask) -->
    </label>

    <input type="submit" value="change camera" /> <!-- to submit the form when the user is ready -->
  </form>

</body>
</html>

不知道你的文件结构是如何设置的,也不知道你的服务器代码,所以如果你需要调整任何东西,请告诉我

© www.soinside.com 2019 - 2024. All rights reserved.