我正在使用Raspberry Pi和Raspberry Pi相机模块构建延时相机Web应用程序。到目前为止,我已经构建了一个Web应用程序(使用NodeJS,Express,AngularJS和BootStrap 3),可以使用开源NodeJS模块(https://www.npmjs.org/package/raspicam)与Raspberry Camera Module进行交互。
我有一个名为"设置"的全局变量。每当用户更改相机设置时,它将始终更改:
var setting = {
mode: "timelapse",
output: "public/images/image%d.jpg", // image1, image2, image3, etc...
encoding: "jpg",
timelapse: 3000, // take a picture every 3 seconds
timeout: 12000 // take a total of 4 pictures over 12 seconds
}
我在Express中有三个功能可以:
设置相机设置
exports.setCamera = function(req, res) {
setting = {
mode: req.body.mode,
output: req.body.output,
encoding: req.body.encoding,
timelapse: req.body.timelapse,
timeout: req.body.timeout
}
res.json(setting, 200);
console.log('SET CAMERA - ' + JSON.stringify(setting));
}
启动相机
exports.startCamera = function(req, res) {
camera = new RaspiCam(setting);
camera.on("start", function( err, timestamp ){
console.log("timelapse started at " + timestamp);
});
camera.on("read", function( err, timestamp, filename ){
console.log("timelapse image captured with filename: " + filename);
});
camera.on("exit", function( timestamp ){
console.log("timelapse child process has exited");
res.json(setting, 200);
});
camera.on("stop", function( err, timestamp ){
console.log("timelapse child process has been stopped at " + timestamp);
});
camera.start();
setTimeout(function(){
camera.stop();
}, setting.timeout + 1000);
console.log('START CAMERA - ' + JSON.stringify(setting));
}
停止相机
exports.stopCamera = function(req, res) {
camera.stop();
res.json(setting, 200);
console.log('STOP CAMERA - ' + JSON.stringify(setting));
}
正如您在" startCamera"中看到的那样函数,我正在创建一个名为" camera"的新RaspiCam对象。传入全局变量"设置" (总是可以改变)。创建相机对象时,我也创建"开始","读","存在","停止"它的功能。问题是因为我没有将相机对象设置为全局变量,所以当用户决定在会话期间中途点击停止时," stopCamera"函数被调用,但它不知道camera.stop()是什么,并说它是未定义的。有没有办法我可以允许" stopCamera"函数知道camera.stop()是什么(在" startCamera"函数中创建的)?
很抱歉,如果这令人困惑,我也不知道如何描述我的问题...... :(
答案 0 :(得分:0)
我认为你的架构有问题,但问题的简单解决方法是检查相机对象是否已初始化。
exports.stopCamera = function(req, res) {
if(camera && typeof(camera.stop) == "function") {
camera.stop();
console.log('STOP CAMERA - ' + JSON.stringify(setting));
}
res.json(setting, 200);
}