在树莓派上用nodejs调用摄像头进行拍照传输

在树莓派上用nodejs调用摄像头进行拍照传输


安装摄像头硬件

警告:摄像头对静电非常敏感。如果您在安装摄像头电路板时没有防静电手环,可以尝试触摸一下水龙头、金属水槽或其它类似的东西即可。


在树莓派上用nodejs调用摄像头进行拍照传输


摄像头电路板与 Raspberry Pi 通过一条 15 芯的排线进行连接。仅有两个连接座需要连接,排线需要安装到摄像头电路板和 Raspberry Pi 上。您需要正确安装,否则摄像头无法工作。对于摄像头电路板,排线末端的蓝色标记应该背对着电路板。而 Raspberry Pi 部分,蓝色标记应该正对着网络接口方向。

尽管两部分连接座不尽相同,但它们的工作方式很相似。对于 Raspberry Pi,拉起连接座两端的卡扣。它应该很容易拉起,并能够轻微活动。把排线完全插入到连接座中,并保证竖直,然后轻轻按下两端的卡扣。摄像头电路板方面,也需要您将卡扣向电路板相反方向拉开,然后轻轻插入排线,最后将卡扣推回。摄像头电路板的连接座与 Pi 上的区别就在这里。


安装摄像头软件

执行下文介绍的命令行进行下载并安装最新的内核,GPU 固件及应用程序。您需要连接到互联网才可以实现以下操作。

<code>    $sudo apt-get update
$sudo apt-get upgrade/<code>

接下来,您首先需要在 Raspberry Pi 的 raspi-config 程序中启用摄像头的支持。


1)连接摄像头与树莓派

2)修改树莓派配置,开启摄像头模块。

<code>sudo raspi-config/<code>
在树莓派上用nodejs调用摄像头进行拍照传输

<code>sudo raspi-config/<code>

将光标移动到摄像头选项(Camera option)处,并选择启用(Enable)。在退出 raspi-config 时会要求您重新启动。启用选项是为了确保重启后 GPU 固件能够正确运行(包括摄像头驱动和调节电路),并且 GPU 从主内存划分到了足够的内存使摄像头能够正确运行。


在树莓派上用nodejs调用摄像头进行拍照传输


测试系统已经完成安装并正常工作,可尝试以下命令:

<code>$raspistill -v -o test.jpg/<code>

这个命令将显示来自摄像头 5 秒钟的预览图像,并且拍摄一张照片,然后保存为文件 test.jpg,保存在/home/pi的目录下面,同时显示出需要相关信息。

到这里,如果一切顺利,重启树莓派后,你将可以正确的使用摄像头了。下面我们来安装nodejs中操作摄像头拍照的库。


主要基于开源库node-webcam来实现:

<code>node-webcam/<code>

https://www.npmjs.com/package/node-webcam

执行下面的命令就可以进行安装了。

<code>sudo apt-get install fswebcam
sudo npm install node-webcam/<code>

关于node-webcam的配置请参考官方说明,下面我们直接上代码。

首先引入node-webcam:

<code>var NodeWebcam = require( "node-webcam" );/<code>

进行摄像头配置

<code>var opts = { 
width: 1280,
height: 720,
quality: 100,
delay: 0,
saveShots: true,
output: "jpeg",
device: false,
callbackReturn: "base64",
verbose: false
};/<code>

然后是拍照,我们拍照后,图片数据是进行base64转码过的,这样做的好处是可以直接在网页上显示。另外我们通过mqtt来进行发送数码。

注意的是mqtt一次最大的发送数据大小不能超过1M。

下面是拍摄照片然后进行发送:

<code>function startCamerashot(playerid) { 
NodeWebcam.capture( "camera", opts, function( err, data ) {
global.camera_img = data;

var qttstr = {}; //定义消息(可以为字符串,对象等)
qttstr.camera_img = global.camera_img;
global.MqttClient.publish( "super/machine/camera/" + playerid, JSON.stringify(qttstr) );
});
}/<code>

至于发送后,如何在网页上显示,是基于vue.js的,可以参考我开源项目的代码。


分享到:


相關文章: