我有一个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.js socket.io服务器,我希望jpeg(或其他格式)网络摄像头数据以合理的帧速率从Node.js(v5.6.0)客户端传递。
答案 0 :(得分:0)
我已设法使用Node.js安装opencv
并确认它有效。我是这样做的:
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开发的实时性意味着机器人技术的完全不同。你应该记住这一点。