如何在 Node.js 中使用 OpenCV?
OpenCV是一个免费使用的跨平台编程库,主要用于计算机视觉。它是用 C/C++ 编写的。计算机视觉广泛用于人脸检测、自动驾驶汽车等应用。要将其与 Node.js 一起使用,我们将使用opencv4nodejs库。 Opencv4nodejs 允许我们将本机 OpenCV 库与我们的 Node.js 应用程序一起使用。这是在现有网站上实施计算机视觉的好方法,也是制作项目的好方法。
将 OpenCV 与 Node.js 结合使用的优势
- 由于 OpenCV 是用 C/C++ 编写的,它非常高效,因此不会减慢站点速度。
- 在已经有 Node.js 后端的 Web 应用程序上实现非常容易,因此任何项目都可以具有面部识别和计算机视觉等功能。
- 轻松使用预构建的分类器,使其易于实施
- 它是一个开源库,这意味着它会不断地工作和更新以提高性能。
安装所需模块:
- 安装 Express 模块。
npm install express
- 安装Windows 构建工具安装 VS Code 需要构建工具。
npm install --global windows-build-tools
- 安装 socket.io 模块。
npm install socket.io
- 安装opencv4nodejs 模块。
npm install --save opencv4nodejs
首先,我们将创建一个托管整个应用程序的 Web Express 服务器,然后我们将使用 socket.io 更新图像,然后使用 OpenCV 读取图像。
示例此 HTML 文件将用于显示图像。
index.html
index.js
// importing OpenCv library
const cv = require('opencv4nodejs');
const path = require('path')
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
// We will now create a video capture object.
const wCap = new cv.VideoCapture(0);
//Setting the height and width of object
wCap.set(cv.CAP_PROP_FRAME_WIDTH, 300);
wCap.set(cv.CAP_PROP_FRAME_HEIGHT, 300);
// Creating get request simple route
app.get('/', (req, res)=>{
res.sendFile(path.join(__dirname, 'index.html'));
});
// Using setInterval to read the image every one second.
setInterval(()=>{
// Reading image from video capture device
const frame = wCap.read();
// Encoding the image with base64.
const image = cv.imencode('.jpg', frame).toString('base64');
io.emit('image', image);
}, 1000)
server.listen(3000);
这是 Node.js 入口点文件,它将使用 express、socket.io 和 OpenCV 来显示图像。
文件名:
index.js
// importing OpenCv library
const cv = require('opencv4nodejs');
const path = require('path')
const express = require('express');
const app = express();
const server = require('http').Server(app);
const io = require('socket.io')(server);
// We will now create a video capture object.
const wCap = new cv.VideoCapture(0);
//Setting the height and width of object
wCap.set(cv.CAP_PROP_FRAME_WIDTH, 300);
wCap.set(cv.CAP_PROP_FRAME_HEIGHT, 300);
// Creating get request simple route
app.get('/', (req, res)=>{
res.sendFile(path.join(__dirname, 'index.html'));
});
// Using setInterval to read the image every one second.
setInterval(()=>{
// Reading image from video capture device
const frame = wCap.read();
// Encoding the image with base64.
const image = cv.imencode('.jpg', frame).toString('base64');
io.emit('image', image);
}, 1000)
server.listen(3000);
使用以下命令运行index.js文件:
node index.js
输出:打开我们机器上的任意浏览器并输入 localhost:3000。