📜  如何在 Node.js 中使用 OpenCV?

📅  最后修改于: 2022-05-13 01:56:20.412000             🧑  作者: Mango

如何在 Node.js 中使用 OpenCV?

OpenCV是一个免费使用的跨平台编程库,主要用于计算机视觉。它是用 C/C++ 编写的。计算机视觉广泛用于人脸检测、自动驾驶汽车等应用。要将其与 Node.js 一起使用,我们将使用opencv4nodejs库。 Opencv4nodejs 允许我们将本机 OpenCV 库与我们的 Node.js 应用程序一起使用。这是在现有网站上实施计算机视觉的好方法,也是制作项目的好方法。

将 OpenCV 与 Node.js 结合使用的优势

  1. 由于 OpenCV 是用 C/C++ 编写的,它非常高效,因此不会减慢站点速度。
  2. 在已经有 Node.js 后端的 Web 应用程序上实现非常容易,因此任何项目都可以具有面部识别和计算机视觉等功能。
  3. 轻松使用预构建的分类器,使其易于实施
  4. 它是一个开源库,这意味着它会不断地工作和更新以提高性能。

安装所需模块

  • 安装 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。