Oğu*_*lik 4 python opencv image-processing node.js electron
我正在开发一个关于图像处理的应用程序。我在 Python 上使用 OpenCV,并尝试使用 PyQT 实现 GUI,但使用 HTML、CSS 和 Javascript 对于我的项目来说是更好的选择。
我知道 Electron 提供带有使用 HTML、CSS 和 Javascript 实现的 GUI 的桌面应用程序,但是,我不确定如何将 Python 连接到 Node 和 Electron。
我需要将使用 NumPy 和 OpenCV 操作生成的图像数组传递到前端以在我的 GUI 中显示,并且这需要实时发生。我将在 OpenCV 中读取帧并进行一些处理,然后以每秒 24 帧的速度在 GUI 上显示它们,因此性能很重要。
如何实现将图像数组数据从 Python 实时发送到 Electron 的任务?
传统上,我们使用套接字进行进程间通信(IPC)。Electron 本身使用套接字在 NodeJS 进程和 UI 窗口之间进行通信。套接字的速度非常快,因此您不必担心数据传输本身的性能。
Python 有一个用于套接字的内置库,而对于 NodeJS,则有node-ipc 库(这是 Electron 用于其内部套接字的库)。
然后您必须定义您的数据协议。例如,您可以通过套接字发送/接收 JSON 对象,这在 Python 和 NodeJS 中编码/解码都非常简单。但如果性能很重要,您可以做更高级的事情。
您还必须考虑如何管理流程本身。事实上,您必须确保 Electron 应用程序在启动时会生成 Python 进程。并确保它在退出时杀死它(例如,通过套接字发送消息!)。
我的回答很抽象,但我希望它能给你一些入门的见解。这不是一个微不足道的任务;)
我创建了一个超级简单的存储库,其中包含工作示例,以展示使用 Redis 和 ZeroMQ 在 Python 和 Nodejs 之间进行通信的两种不同方法。一探究竟:
https://github.com/OgulcanCelik/nodejs-python-communication
原评论:
所以我想通了。我所做的是使用 python-shell NPM 包从 NodeJS 调用 Python 脚本,并通过 stdin 在 Python 和 NodeJS 之间进行通信。Python脚本在使用OpenCV进行一些处理后生成图像,将其编码为png,将其转换为字节,将其编码为base64,最后将其解码为ascii以便在Node部分读取。
Python部分是这样的:
import cv2 as cv2
import base64
source = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
success, encoded_image = cv2.imencode('.png', source)
content = encoded_image.tobytes()
print(base64.b64encode(content).decode('ascii'))
Run Code Online (Sandbox Code Playgroud)
NodeJS部分:
pyshell.on("message", function(message) {
console.log(message)
});
setInterval(() => {
pyshell.send(data);
}, 300);
Run Code Online (Sandbox Code Playgroud)
更多信息请参见: 无法读取从 Python 发送的 Node.js 中的 Base64 编码图像
| 归档时间: |
|
| 查看次数: |
2686 次 |
| 最近记录: |