在Node.js

时间:2016-02-15 16:38:14

标签: node.js

我有一个Raspberry Pi(2B,运行Raspbian Jessie 02/09)和一个网络摄像头(ID 041e:406c Creative Technology,Ltd Live!Cam Sync [VF0520],兼容V4L)。

我正在尝试构建一个机器人,我想象相机的工作方式是这样的:

Pi(Node.js) - >服务器(计算机,Node.js,运行Electron为摄像机图像创建窗口)。

目标是使用套接字(socket.io)以可用的帧速率(10~20?)将数据从Pi发送到服务器。

我研究了以下模块:

  • node-camera,它不起作用(空白图像),并使用了websockets。
  • node-opencv(opencv on npm),无法编译,当它完成时,没有正确检测到摄像头(但是python检测到它与opencv完美无缺)

我在互联网上找到的许多指南要求客户端连接到浏览器,以便能够检索网络摄像头数据,这不是我想要的。

任何帮助将不胜感激,谢谢!

修改 为了澄清,我有一个Node.js socket.io服务器,我希望jpeg(或其他格式)网络摄像头数据以合理的帧速率从Node.js(v5.6.0)客户端传递。

2 个答案:

答案 0 :(得分:0)

我已设法使用Node.js安装opencv并确认它有效。我是这样做的:

  • 安装并编译OpenCV(3.0.0适用于我正在使用的内容)
  • git clone node-opencv
  • 删除.git文件夹
  • npm install文件夹
  • 中运行node-opencv
  • node-opencv重命名为opencv并转到node_modules
  • cd投影dir(包含node_modules的{​​{1}}的目录)

我从对opencv的github问题跟踪器中发布的问题的回复中获得了这些说明。

如果在安装后相机无法打开,则是因为用户无权访问node-opencv。这是我在花了几个小时试图找出无法打开相机的原因之后意识到的。

在大多数发行版中,您只需将自己添加到/dev/video组即可访问所有video设备。

答案 1 :(得分:0)

如果您正在构建机器人,则应该查看ROS(机器人操作系统)。许多相机都有支持ROS的驱动程序,它有一个javascript界面​​。

您可能希望发送数据以进行某种处理。同样,如果这是一个机器人,你应该保持适当的代码结构。一部分为低级控制器,另一部分为高级控制器,外部库为另一部分的图像处理。使用ROS使用的发布者/订阅者方法(也是很多人喜欢的LCM,我发现确实非常酷)让你保持更多订单,因为你可以更容易地分享这些数据。

此外,数据的发送方式对用户来说是透明的。也许不是以最有效的方式(也许LCM有 - 或者有,我不知道 - 更多的性能),但是很容易实现。我强烈建议你去看看。

也许这个链接可以让您了解自己可以做些什么:http://wiki.ros.org/image_transport/Tutorials/PublishingImages

请注意,socket.io声明是实时的。 Web开发的实时性意味着机器人技术的完全不同。你应该记住这一点。