1

我正在制作一个有趣的开源示例,用于使用 Raspberry Pi 作为我的硬件进行边缘计算计算机视觉。

我必须访问硬件的当前 SDK 是基于 nodejs 的(我将在 python 可用时发布第二个)。警告:我是节点新手。

我面临的问题是我想在不保存文件的情况下循环使用库存相机拍照。我只想访问缓冲区,提取像素,传递给我的第二个边缘模块。

在 while(true) 循环中拍摄没有文件保存的照片似乎永远不会执行。

这是我的示例:

'use strict';

var sleep = require('sleep');
const Raspistill = require('node-raspistill').Raspistill;
var pixel_getter = require('pixel-getter');


while(true) {

const camera = new Raspistill({ verticalFlip: true,
                            horizontalFlip: true,
                            width: 500,
                            height: 500,
                            encoding: 'jpg',
                            noFileSave: true,
                            time: 1 });

camera.takePhoto().then((photo) => {
    console.log('got photo');
    pixel_getter.get(photo,
               function(err, pixels) {
                    console.log('got pixels');
                    console.log(String(pixels));
                    });
    });
sleep.sleep(5);
}
console.log('picture taken');

在上面的代码中,console.log 函数实际上都没有记录;让我相信照片永远不会被拍摄,因此无法提取像素。

任何帮助将不胜感激。


更新:看起来循环机制可能很有趣。我想我真的不在乎它是否在循环中拍照,只要它拍照,我就把它传出去,我拍照然后把它传出去,不确定地。

4

1 回答 1

1

我决定用递归循环来解决这个问题,而不是效果很好。

'use strict';

const sleep = require('sleep');
const Raspistill = require('node-raspistill').Raspistill;
const pixel_getter = require('pixel-getter')

const camera = new Raspistill({ verticalFlip: true,
                            horizontalFlip: true,
                            width: 500,
                            height: 500,
                            encoding: 'jpg',
                            noFileSave: true,
                            time: 5 });

function TakePictureLoop() {
    console.log('taking picture');
    camera.takePhoto().then((photo) => {
        console.log('got photo');
        pixel_getter.get(photo, function(err, pixels) {
            console.log('got pixels');
            TakePictureLoop();
        });
    });
}

TakePictureLoop();
于 2018-01-10T21:04:58.667 回答