赞
踩
参考:Python读视频流发送给前端H5呈现-websocket实现方法
通过Python获取图像数据并发送给服务器,然后浏览器页面从服务器获取数据并显示,原理似乎就是这样,对前端的了解只是知道有HTML、CSS、JS这几个东西
先是安装Nodejs,参考的Node.js 安装配置
然后安装websocket模块,运行cmd到Nodejs安装目录下执行命令
-g是全局安装
--registry=https://registry.npm.taobao.org是淘宝镜像,毕竟公司电脑不能科学上网
三个我都试了,所以也不知道到底是哪个起作用的,但反正能用
- npm install -g ws --registry=https://registry.npm.taobao.org
- npm install -g websocket --registry=https://registry.npm.taobao.org
- npm install -g nodejs-websocket --registry=https://registry.npm.taobao.org
然后还得下个jQuery,不然浏览器里的JS报错
npm install -g jquery --registry=https://registry.npm.taobao.org
装完后目录下会有个文件夹,里边有个jquery.min.js,复制到Nodejs安装目录下,主要是客户端html文件也在这使用时不用加路径
在Nodejs安装目录下新建一个服务端server.js文件:
- let WebSocketServer = require('ws').Server,
- wss = new WebSocketServer({ port: 3303 });
-
- wss.on('connection', function (ws) {
- console.log('客户端已连接');
- ws.on('message', function (message) {
- wss.clients.forEach(function each(client) {
- client.send(message);
- });
- console.log(message);
- });
- });
然后再新建一个客户端页面HTML文件:
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <div>
- <img id="resImg" src="" />
- </div>
- <script src="jquery.min.js" ></script>
- <script>
- let ws = new WebSocket("ws://127.0.0.1:3303/");
- ws.onopen = function(evt) {
- console.log("Connection open ...");
- ws.send("Hello WebSockets!");
- };
-
- ws.onmessage = function(evt) {
- $("#resImg").attr("src",evt.data);
- console.log( "Received Message: " + evt.data);
- // ws.close();
- };
-
- ws.onclose = function(evt) {
- console.log("Connection closed.");
- };
-
- </script>
- </body>
- </html>
最后各种乱七八糟文件:
python要先安装websocket模块,用pip进行安装
pip install websockets -i https://pypi.tuna.tsinghua.edu.cn/simple
然后新建脚本文件:
- import asyncio
- import websockets
- import base64
- from cv2 import cv2
- import numpy as np
- import time
-
-
- tex_name=["test0.jpg","test1.jpg","test2.jpg"]
-
- # 向服务器端实时发送视频流帧数据
- async def send_msg(websocket):
- while 1:
- for i in range(len(tex_name)):
- time.sleep(1)
- img = cv2.imread(tex_name[i])
-
- img_encode = cv2.imencode('.jpg', img)[1]# '.jpg'表示把图像数据以jpg格式编码
-
- #cv2.imshow("Display",img)
- #cv2.waitKey(1)
-
- data = np.array(img_encode)
- img = data.tostring()
-
- # 以base64进行编码并发送给服务端
- img = base64.b64encode(img).decode()
- await websocket.send("data:image/jpeg;base64,"+img)
-
- # 客户端主逻辑
- async def main_logic():
- async with websockets.connect('ws://127.0.0.1:3303') as websocket:
- await send_msg(websocket)
-
- asyncio.get_event_loop().run_until_complete(main_logic())
循环读取3张本地图片并转为base64编码发送给服务器
cmd中cd到Nodejs安装目录并开启服务器
node server.js
用浏览器打开就行
cmd中会打印提示
但是收不到图像数据
运行python脚本,向服务器发送图像数据
浏览器页面中显示出图像,cmd中打印出图像的base64编码
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。