简体   繁体   English

在 HTML 中获取网络摄像头视频并通过 socketio 发送到 flask 服务器

[英]Get webcam video in HTML and send to flask server via socketio

I'm trying to capture webcam video in the client side and sent frames to the server to process it.我正在尝试在客户端捕获网络摄像头视频并将帧发送到服务器进行处理。 I'm newbie in JS and I'm having some problems.我是 JS 的新手,我遇到了一些问题。 I tried to use OpenCV.js to get the data but I didn't understand how to get it, in Python we can make我尝试使用 OpenCV.js 来获取数据,但我不明白如何获取它,在 Python 我们可以

cap = cv2.VideoCapture(0)
ret, frame = cap.read()

and the frame is an 2d-array with the image, but how can I get each frame (as 2d array) to send using OpenCV.js?并且帧是带有图像的二维数组,但是我怎样才能让每个帧(作为二维数组)使用 OpenCV.js 发送?

I have this code on the client side:我在客户端有这段代码:

<script type="text/javascript">
function onOpenCvReady() {
    cv['onRuntimeInitialized'] = () => {
        var socket = io('http://localhost:5000');

        socket.on('connect', function () {
            console.log("Connected...!", socket.connected)
        });

        const video = document.querySelector("#videoElement");

        video.width = 500;
        video.height = 400;

        if (navigator.mediaDevices.getUserMedia) {
            navigator.mediaDevices.getUserMedia({ video: true })
                .then(function (stream) {
                    video.srcObject = stream;
                    video.play();

                })
                .catch(function (err0r) {
                    console.log(err0r)
                    console.log("Something went wrong!");
                });
        }

                    let src = new cv.Mat(video.height, video.width, cv.CV_8UC4);
                    let cap = new cv.VideoCapture(video);

                    const FPS = 15;
                    function processVideo() {

                        let begin = Date.now();
                        cap.read(src);

                        handle_socket(src['data']);

                        // schedule next one.
                        let delay = 1000 / FPS - (Date.now() - begin);
                        setTimeout(processVideo, delay);
                    }
                    // schedule first one.
                    setTimeout(processVideo, 0);

        function handle_socket(src) {

            socket.emit('event', { info: 'I\'m connected!', data: src });

        }

    }
}

</script>

My solution was:我的解决方案是:

// Select HTML video element where the webcam data is
const video = document.querySelector("#videoElement");

// returns a frame encoded in base64
const getFrame = () => {
    const canvas = document.createElement('canvas');
    canvas.width = video.videoWidth;
    canvas.height = video.videoHeight;
    canvas.getContext('2d').drawImage(video, 0, 0);
    const data = canvas.toDataURL('image/jpeg');
    return data;
}


// Send data over socket
function handle_socket(data, dst) {
    socket.emit('event', data, function (res) {
        if (res !== 0) {
            results = res;
        }
    });
}

frame64 = getFrame()
handle_socket(frame64);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法通过flask-socketIO服务器在HTML客户端中显示来自python客户端的视频流 - Cant display my video stream from a python client in the HTML client through a flask-socketIO server 通过ajax从网络摄像头发送imageObject到Flask Server - Send imageObject from webcam by ajax to Flask Server Flask 服务器未启动 SocketIO - Flask server not starting for SocketIO HTML 按钮通过 Python、Flask 和 ZB385E1A4D74C2AFA71FZ9FE39FE3 开启网络摄像头 - HTML Button to switch on a Webcam via Python, Flask and OPENCv Flask + gevent 服务器在更新 HTML 元素/使用 socketio 时比 flask 开发服务器慢 - Flask + gevent server slower at updating HTML element/using socketio than flask development server 如何通过输入字段发送捕获的网络摄像头图像并保存到服务器 - How to send captured webcam image and save to server via input field 如何将捕获的视频 stream 帧从 html 发送到 flask 服务器? - How can I send captured video stream frames from html to flask server? 如何将网络摄像头视频发送到 rtmp - How to send webcam video to rtmp 从 HTML 中的网络摄像头获取视频帧并将其用于 OPENCV python - Get video frames from webcam in HTML and use it for OPENCV python 如何在 flask 通过 socketIO 执行任务时用一些更新更新 HTML 页面 - How to update the HTML page with some updates while flask is performing a task via socketIO
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM